VideoEndDialog.java 11 KB

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