package com.haochuan.djbl; import android.app.Activity; import android.app.Dialog; import android.app.DialogFragment; import android.app.FragmentManager; import android.content.DialogInterface; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.Volley; import com.haochuan.djbl2.R; import org.json.JSONObject; import java.text.SimpleDateFormat; import java.util.Date; /** * Created by yunhaipiaodi on 2017/10/13. */ public class VideoEndDialog extends DialogFragment{ private static String PARAM1 = "uid"; private static String PARAM2 = "sourceId"; private static String PARAM3 = "isComplete"; private String uId = ""; private String sourceId = ""; private Boolean isComplete = false; private OnClickListener mListener; private RequestQueue queue; private LinearLayout collectContainer; private ImageView collectIcon; private TextView collectTitle; private long mLastClickTime = 0; public static VideoEndDialog getInstance(String uId,String sourceId,Boolean isComplete){ VideoEndDialog videoEndDialog = new VideoEndDialog(); Bundle bundle = new Bundle(); bundle.putString(PARAM1,uId); bundle.putString(PARAM2,sourceId); bundle.putBoolean(PARAM3,isComplete); videoEndDialog.setArguments(bundle); return videoEndDialog; } @Override public void onAttach(Activity activity){ super.onAttach(activity); queue = Volley.newRequestQueue(activity); if(activity instanceof OnClickListener){ mListener = (OnClickListener)activity; }else{ throw new RuntimeException(activity.toString() + " must implement VideoEndDialog.OnClickListener"); } } @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); this.setCancelable(false); uId = getArguments().getString(PARAM1); sourceId = getArguments().getString(PARAM2); isComplete = getArguments().getBoolean(PARAM3); } @Override public void onStart(){ super.onStart(); mLastClickTime = getCurrentTime(); //Toast.makeText(getActivity(),"mLastClickTime:" + mLastClickTime,Toast.LENGTH_LONG ).show(); } private int getCurrentTime(){ int currentTime = 0; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HHmmss"); currentTime = Integer.parseInt(simpleDateFormat.format(new Date())); return currentTime; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Dialog dialog = getDialog(); dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { switch (keyCode){ case KeyEvent.KEYCODE_BACK: if (getCurrentTime() - mLastClickTime < 2) { return false; }else{ VideoEndDialog.this.dismiss(); return true; } } return false; } }); View view = inflater.inflate(R.layout.dialog_video_end, container); LinearLayout continueBtn = view.findViewById(R.id.continue_play); collectContainer = view.findViewById(R.id.collect_video); LinearLayout exitBtn = view.findViewById(R.id.exit_play); collectIcon = view.findViewById(R.id.collect_icon); collectTitle = view.findViewById(R.id.collect_title); if(isComplete){ continueBtn.setVisibility(View.INVISIBLE); } getCollectState(new OnCollectListener(){ @Override public void onCollected(boolean result) { if(result){ //已经收藏 collectSet(); collectContainer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { cancelCollectStateToWeb(); } }); }else{ //未收藏 noCollectSet(); collectContainer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addCollectStateToWeb(); } }); } } }); continueBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { VideoEndDialog.this.dismiss(); mListener.onContinuePlay(); } }); exitBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mListener.onExit(); } }); continueBtn.requestFocus(); return view; } @Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); if(mListener!=null){ mListener.onDismiss(); } } //没收藏时的设置 private void noCollectSet(){ collectTitle.setText("加入收藏"); collectTitle.setTextColor(getActivity().getResources().getColor(R.color.video_end_text_color)); collectIcon.setImageResource(R.drawable.btn_icon_add_default); } //已收藏时的设置 private void collectSet(){ collectTitle.setText("取消收藏"); collectTitle.setTextColor(getActivity().getResources().getColor(R.color.video_end_text_color)); collectIcon.setImageResource(R.drawable.btn_icon_add_selected); } public void getCollectState(final OnCollectListener listener ){ final String requestUrl = new UrlManager().getCollectedStateUrl(uId,sourceId); queue.add(new JsonObjectRequest(Request.Method.GET, requestUrl, null, new Response.Listener() { @Override public void onResponse(JSONObject response) { if(response.has("code")){ try{ int code = response.getInt("code"); switch (code){ case 1: listener.onCollected(false); break; case 2: listener.onCollected(true); break; default: listener.onCollected(false); break; } }catch (Exception e){ listener.onCollected(false); e.printStackTrace(); } } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } })); } private void addCollectStateToWeb(){ final String requestUrl = new UrlManager().addCollectedStateUrl(uId,sourceId,2); queue.add(new JsonObjectRequest(Request.Method.GET, requestUrl, null, new Response.Listener() { @Override public void onResponse(JSONObject response) { if(response.has("code")){ try{ int code = response.getInt("code"); if(code == 0){ collectSet(); collectContainer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { cancelCollectStateToWeb(); } }); }else{ Toast.makeText(getActivity(),"收藏失败",Toast.LENGTH_SHORT).show(); } }catch (Exception e){ e.printStackTrace(); } } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } })); } private void cancelCollectStateToWeb(){ final String requestUrl = new UrlManager().cancelCollectedStateUrl(uId,sourceId,2); queue.add(new JsonObjectRequest(Request.Method.GET, requestUrl, null, new Response.Listener() { @Override public void onResponse(JSONObject response) { if(response.has("code")){ try{ int code = response.getInt("code"); if(code == 0){ noCollectSet(); collectContainer.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addCollectStateToWeb(); } }); }else{ Toast.makeText(getActivity(),"取消收藏失败",Toast.LENGTH_SHORT).show(); } }catch (Exception e){ e.printStackTrace(); } } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } })); } @Override public void show(FragmentManager manager, String tag) { try { //在每个add事务前增加一个remove事务,防止连续的add manager.beginTransaction().remove(this).commitAllowingStateLoss(); super.show(manager, tag); } catch (Exception e) { //同一实例使用不同的tag会异常,这里捕获一下 e.printStackTrace(); } } @Override public void onDestroy(){ collectContainer= null; collectIcon = null; collectTitle = null; super.onDestroy(); } public interface OnCollectListener{ public void onCollected(boolean result); } public interface OnClickListener{ public void onExit(); public void onDismiss(); public void onContinuePlay(); } }