VideoEndDialog.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. package com.haochuan.dudutoy;
  2. import android.app.Activity;
  3. import android.app.Dialog;
  4. import android.app.DialogFragment;
  5. import android.app.FragmentManager;
  6. import android.content.DialogInterface;
  7. import android.content.res.ColorStateList;
  8. import android.graphics.Color;
  9. import android.graphics.drawable.ColorDrawable;
  10. import android.os.Bundle;
  11. import android.view.KeyEvent;
  12. import android.view.LayoutInflater;
  13. import android.view.View;
  14. import android.view.ViewGroup;
  15. import android.view.Window;
  16. import android.widget.FrameLayout;
  17. import android.widget.ImageView;
  18. import android.widget.LinearLayout;
  19. import android.widget.TextView;
  20. import android.widget.Toast;
  21. import com.android.volley.Request;
  22. import com.android.volley.RequestQueue;
  23. import com.android.volley.Response;
  24. import com.android.volley.VolleyError;
  25. import com.android.volley.toolbox.JsonObjectRequest;
  26. import com.android.volley.toolbox.Volley;
  27. import org.json.JSONObject;
  28. import org.w3c.dom.Text;
  29. import java.text.SimpleDateFormat;
  30. import java.util.Date;
  31. /**
  32. * Created by yunhaipiaodi on 2017/10/13.
  33. */
  34. public class VideoEndDialog extends DialogFragment{
  35. private static String PARAM1 = "uid";
  36. private static String PARAM2 = "sourceId";
  37. private static String PARAM3 = "isComplete";
  38. private String uId = "";
  39. private String sourceId = "";
  40. private Boolean isComplete = false;
  41. private OnClickListener mListener;
  42. private RequestQueue queue;
  43. private LinearLayout collectContainer;
  44. private ImageView collectIcon;
  45. private TextView collectTitle;
  46. private long mLastClickTime = 0;
  47. public static VideoEndDialog getInstance(String uId,String sourceId,Boolean isComplete){
  48. VideoEndDialog videoEndDialog = new VideoEndDialog();
  49. Bundle bundle = new Bundle();
  50. bundle.putString(PARAM1,uId);
  51. bundle.putString(PARAM2,sourceId);
  52. bundle.putBoolean(PARAM3,isComplete);
  53. videoEndDialog.setArguments(bundle);
  54. return videoEndDialog;
  55. }
  56. @Override
  57. public void onAttach(Activity activity){
  58. super.onAttach(activity);
  59. queue = Volley.newRequestQueue(activity);
  60. if(activity instanceof OnClickListener){
  61. mListener = (OnClickListener)activity;
  62. }else{
  63. throw new RuntimeException(activity.toString()
  64. + " must implement VideoEndDialog.OnClickListener");
  65. }
  66. }
  67. @Override
  68. public void onCreate(Bundle savedInstanceState){
  69. super.onCreate(savedInstanceState);
  70. this.setCancelable(false);
  71. uId = getArguments().getString(PARAM1);
  72. sourceId = getArguments().getString(PARAM2);
  73. isComplete = getArguments().getBoolean(PARAM3);
  74. }
  75. @Override
  76. public void onStart(){
  77. super.onStart();
  78. mLastClickTime = getCurrentTime();
  79. //Toast.makeText(getActivity(),"mLastClickTime:" + mLastClickTime,Toast.LENGTH_LONG ).show();
  80. }
  81. private int getCurrentTime(){
  82. int currentTime = 0;
  83. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HHmmss");
  84. currentTime = Integer.parseInt(simpleDateFormat.format(new Date()));
  85. return currentTime;
  86. }
  87. @Override
  88. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  89. Bundle savedInstanceState)
  90. {
  91. Dialog dialog = getDialog();
  92. dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
  93. dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
  94. dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
  95. @Override
  96. public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
  97. switch (keyCode){
  98. case KeyEvent.KEYCODE_BACK:
  99. if (getCurrentTime() - mLastClickTime < 2) {
  100. return false;
  101. }else{
  102. VideoEndDialog.this.dismiss();
  103. return true;
  104. }
  105. }
  106. return false;
  107. }
  108. });
  109. View view = inflater.inflate(R.layout.dialog_video_end, container);
  110. LinearLayout continueBtn = view.findViewById(R.id.continue_play);
  111. collectContainer = view.findViewById(R.id.collect_video);
  112. LinearLayout exitBtn = view.findViewById(R.id.exit_play);
  113. collectIcon = view.findViewById(R.id.collect_icon);
  114. collectTitle = view.findViewById(R.id.collect_title);
  115. if(isComplete){
  116. continueBtn.setVisibility(View.INVISIBLE);
  117. }
  118. getCollectState(new OnCollectListener(){
  119. @Override
  120. public void onCollected(boolean result) {
  121. if(result){ //已经收藏
  122. collectSet();
  123. collectContainer.setOnClickListener(new View.OnClickListener() {
  124. @Override
  125. public void onClick(View v) {
  126. cancelCollectStateToWeb();
  127. }
  128. });
  129. }else{ //未收藏
  130. noCollectSet();
  131. collectContainer.setOnClickListener(new View.OnClickListener() {
  132. @Override
  133. public void onClick(View v) {
  134. addCollectStateToWeb();
  135. }
  136. });
  137. }
  138. }
  139. });
  140. continueBtn.setOnClickListener(new View.OnClickListener() {
  141. @Override
  142. public void onClick(View v) {
  143. VideoEndDialog.this.dismiss();
  144. mListener.onContinuePlay();
  145. }
  146. });
  147. exitBtn.setOnClickListener(new View.OnClickListener() {
  148. @Override
  149. public void onClick(View v) {
  150. mListener.onExit();
  151. }
  152. });
  153. continueBtn.requestFocus();
  154. return view;
  155. }
  156. @Override
  157. public void onDismiss(DialogInterface dialog) {
  158. super.onDismiss(dialog);
  159. if(mListener!=null){
  160. mListener.onDismiss();
  161. }
  162. }
  163. //没收藏时的设置
  164. private void noCollectSet(){
  165. collectTitle.setText("加入收藏");
  166. collectTitle.setTextColor(getActivity().getResources().getColor(R.color.video_end_text_color));
  167. collectIcon.setImageResource(R.drawable.btn_icon_add_default);
  168. }
  169. //已收藏时的设置
  170. private void collectSet(){
  171. collectTitle.setText("取消收藏");
  172. collectTitle.setTextColor(getActivity().getResources().getColor(R.color.video_end_text_color));
  173. collectIcon.setImageResource(R.drawable.btn_icon_add_selected);
  174. }
  175. public void getCollectState(final OnCollectListener listener ){
  176. final String requestUrl = new UrlManager().getCollectedStateUrl(uId,sourceId);
  177. queue.add(new JsonObjectRequest(Request.Method.GET, requestUrl, null, new Response.Listener<JSONObject>() {
  178. @Override
  179. public void onResponse(JSONObject response) {
  180. if(response.has("code")){
  181. try{
  182. int code = response.getInt("code");
  183. switch (code){
  184. case 1:
  185. listener.onCollected(false);
  186. break;
  187. case 2:
  188. listener.onCollected(true);
  189. break;
  190. default:
  191. listener.onCollected(false);
  192. break;
  193. }
  194. }catch (Exception e){
  195. listener.onCollected(false);
  196. e.printStackTrace();
  197. }
  198. }
  199. }
  200. }, new Response.ErrorListener() {
  201. @Override
  202. public void onErrorResponse(VolleyError error) {
  203. }
  204. }));
  205. }
  206. private void addCollectStateToWeb(){
  207. final String requestUrl = new UrlManager().addCollectedStateUrl(uId,sourceId,2);
  208. queue.add(new JsonObjectRequest(Request.Method.GET, requestUrl, null, new Response.Listener<JSONObject>() {
  209. @Override
  210. public void onResponse(JSONObject response) {
  211. if(response.has("code")){
  212. try{
  213. int code = response.getInt("code");
  214. if(code == 0){
  215. collectSet();
  216. collectContainer.setOnClickListener(new View.OnClickListener() {
  217. @Override
  218. public void onClick(View v) {
  219. cancelCollectStateToWeb();
  220. }
  221. });
  222. }else{
  223. Toast.makeText(getActivity(),"收藏失败",Toast.LENGTH_SHORT).show();
  224. }
  225. }catch (Exception e){
  226. e.printStackTrace();
  227. }
  228. }
  229. }
  230. }, new Response.ErrorListener() {
  231. @Override
  232. public void onErrorResponse(VolleyError error) {
  233. }
  234. }));
  235. }
  236. private void cancelCollectStateToWeb(){
  237. final String requestUrl = new UrlManager().cancelCollectedStateUrl(uId,sourceId,2);
  238. queue.add(new JsonObjectRequest(Request.Method.GET, requestUrl, null, new Response.Listener<JSONObject>() {
  239. @Override
  240. public void onResponse(JSONObject response) {
  241. if(response.has("code")){
  242. try{
  243. int code = response.getInt("code");
  244. if(code == 0){
  245. noCollectSet();
  246. collectContainer.setOnClickListener(new View.OnClickListener() {
  247. @Override
  248. public void onClick(View v) {
  249. addCollectStateToWeb();
  250. }
  251. });
  252. }else{
  253. Toast.makeText(getActivity(),"取消收藏失败",Toast.LENGTH_SHORT).show();
  254. }
  255. }catch (Exception e){
  256. e.printStackTrace();
  257. }
  258. }
  259. }
  260. }, new Response.ErrorListener() {
  261. @Override
  262. public void onErrorResponse(VolleyError error) {
  263. }
  264. }));
  265. }
  266. @Override
  267. public void show(FragmentManager manager, String tag) {
  268. try {
  269. //在每个add事务前增加一个remove事务,防止连续的add
  270. manager.beginTransaction().remove(this).commitAllowingStateLoss();
  271. super.show(manager, tag);
  272. } catch (Exception e) {
  273. //同一实例使用不同的tag会异常,这里捕获一下
  274. e.printStackTrace();
  275. }
  276. }
  277. @Override
  278. public void onDestroy(){
  279. collectContainer= null;
  280. collectIcon = null;
  281. collectTitle = null;
  282. super.onDestroy();
  283. }
  284. public interface OnCollectListener{
  285. public void onCollected(boolean result);
  286. }
  287. public interface OnClickListener{
  288. public void onExit();
  289. public void onDismiss();
  290. public void onContinuePlay();
  291. }
  292. }