package com.edufound.reader.popwindow; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.graphics.Color; import android.view.Display; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.PopupWindow; import android.widget.TextView; import com.edufound.reader.R; import com.edufound.reader.application.EApplication; import com.edufound.reader.bean.ChannelCodeEnum; import com.edufound.reader.bean.RecordResultBean; import com.edufound.reader.bean.UserRecordBean; import com.edufound.reader.cusview.GridRadioGroup; import com.edufound.reader.listener.PopUtilClickListener; import com.edufound.reader.listener.PopupRecordStatusListener; import com.edufound.reader.presenter.PopWindowPresneter; import com.edufound.reader.util.Consts; import com.edufound.reader.util.DeviceUtil; import com.edufound.reader.util.DeviceUuidFactory; import com.edufound.reader.util.GlideUtils; import com.edufound.reader.util.SizeUtils; import com.jakewharton.rxbinding4.view.RxView; import com.orhanobut.logger.Logger; import com.trello.rxlifecycle4.android.ActivityEvent; import java.util.List; import java.util.concurrent.TimeUnit; import androidx.annotation.Nullable; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.functions.Consumer; import io.reactivex.rxjava3.functions.Function; import kotlin.Unit; import static com.trello.rxlifecycle4.RxLifecycle.bindUntilEvent; public class PopWindowUtil { private static PopWindowPresneter mPresenter; private static PopupWindow mPopupWindow; private static FrameLayout dialog_view; private static void initPresenter() { if (mPresenter == null) { mPresenter = new PopWindowPresneter(); } } private static boolean checkWindowShoing() { if (mPopupWindow == null) { return false; } return mPopupWindow.isShowing(); } public static void hidePopupWindow() { if (mPopupWindow.isShowing()) { mPopupWindow.dismiss(); } } public static void showExitAppWindow(Activity context, View parent) { initPresenter(); if (checkWindowShoing()) { return; } dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_exit_app, null); dialog_view.setFocusable(true); ImageView image = dialog_view.findViewById(R.id.popupwindow_exit_app_image); GlideUtils.loadImageSizeKipMemoryCache(context, "http://reader-apk.ai160.com/reader-apk/res/exit_app.png", image); FrameLayout exit = dialog_view.findViewById(R.id.popupwindow_exit_app_ok); FrameLayout cancel = dialog_view.findViewById(R.id.popupwindow_exit_app_cancel); setClickListener(exit, o -> { EApplication.killAppProcess(context); }); setClickListener(cancel, o -> { mPopupWindow.dismiss(); }); RxView.longClicks(image).subscribe(o -> { //显示deviceInfo showDeviceInfo(context); }); newPopupWindow(parent, true); } public static void showSelectGradeWindow(Context context, View parent, int checked, PopUtilClickListener listener) { initPresenter(); if (checkWindowShoing()) { return; } dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_select_grade, null); dialog_view.setFocusable(true); FrameLayout btn_ok = dialog_view.findViewById(R.id.popupwindow_select_ok); GridRadioGroup gridRadioGroup = dialog_view.findViewById(R.id.popupwindow_select_grade_gridgroup); int id = 0; final String[] checkText = {String.valueOf(id)}; switch (checked) { case 0: id = R.id.popupwindow_select_grade_one; checkText[0] = "一年级"; break; case 1: id = R.id.popupwindow_select_grade_two; checkText[0] = "二年级"; break; case 2: id = R.id.popupwindow_select_grade_three; checkText[0] = "三年级"; break; case 3: id = R.id.popupwindow_select_grade_four; checkText[0] = "四年级"; break; case 4: id = R.id.popupwindow_select_grade_pre; checkText[0] = "学前"; break; } gridRadioGroup.setOnCheckedChangeListener(new GridRadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(GridRadioGroup group, int checkedId) { group.check(checkedId); switch (checkedId) { case R.id.popupwindow_select_grade_one: //一年级 checkText[0] = "一年级"; break; case R.id.popupwindow_select_grade_two: checkText[0] = "二年级"; //二年级 break; case R.id.popupwindow_select_grade_three: checkText[0] = "三年级"; //三年级 break; case R.id.popupwindow_select_grade_four: checkText[0] = "四年级"; //四年级 break; case R.id.popupwindow_select_grade_pre: //学前 checkText[0] = "学前"; break; } } }); gridRadioGroup.check(id); setClickListener(btn_ok, o -> { mPopupWindow.dismiss(); listener.clickSubmit(checkText[0]); }); newPopupWindow(parent, true); } public static void showExitLoginWindow(Context context, View parent, PopUtilClickListener listener) { initPresenter(); if (checkWindowShoing()) { return; } dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_exit_login, null); dialog_view.setFocusable(true); ImageView image = dialog_view.findViewById(R.id.popupwindow_exit_login_image); GlideUtils.loadImageSizeKipMemoryCache(context, "http://reader-apk.ai160.com/reader-apk/res/exit_login.png", image); FrameLayout exit = dialog_view.findViewById(R.id.popupwindow_exit_login_ok); FrameLayout cancel = dialog_view.findViewById(R.id.popupwindow_exit_login_cancel); setClickListener(exit, o -> { mPopupWindow.dismiss(); listener.clickSubmit(null); }); setClickListener(cancel, o -> { mPopupWindow.dismiss(); listener.clickCancel(); }); newPopupWindow(parent, true); } public static void showCancellationAccountWindow(Context context, View parent, PopUtilClickListener listener) { initPresenter(); if (checkWindowShoing()) { return; } dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_cancellation_account, null); dialog_view.setFocusable(true); FrameLayout exit = dialog_view.findViewById(R.id.popupwindow_cancellation_account_ok); FrameLayout cancel = dialog_view.findViewById(R.id.popupwindow_cancellation_account_cancel); setClickListener(exit, o -> { mPopupWindow.dismiss(); listener.clickSubmit(null); }); setClickListener(cancel, o -> { mPopupWindow.dismiss(); listener.clickCancel(); }); newPopupWindow(parent, true); } public static void showBindWeChatWindow(Activity context, View parent, @Nullable PopUtilClickListener listener) { initPresenter(); if (checkWindowShoing()) { return; } dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_bind_wechat, null); dialog_view.setFocusable(true); ImageView back = dialog_view.findViewById(R.id.popupwindow_bindwechat_back); ImageView image = dialog_view.findViewById(R.id.popupwindow_bind_wechat_image); TextView text = dialog_view.findViewById(R.id.popupwindow_bind_wechat_name); setClickListener(back, o -> { mPopupWindow.dismiss(); if (listener != null) { listener.clickCancel(); } mPresenter.getPopHandler().removeMessages(0x1312); }); mPresenter.getBindWeChatPath(context, image); mPresenter.getMyInfo(context, text); newPopupWindow(parent, false); } public static void showRecordStatusWindow(Activity context, View parent, RecordResultBean bean, UserRecordBean.UserRead userread, PopupRecordStatusListener listener) { initPresenter(); if (checkWindowShoing()) { return; } dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_record_status, null); dialog_view.setFocusable(true); dialog_view.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return true; } return false; } }); ImageView back = dialog_view.findViewById(R.id.popupwindow_record_status_close); setClickListener(back, o -> { mPopupWindow.dismiss(); }); mPresenter.initRecordStatusWindow(context, dialog_view, bean, userread, listener); newPopupWindow(parent, false); } public static void showMyOrderWindow(Activity context, View parent) { initPresenter(); if (checkWindowShoing()) { return; } dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_myorder, null); dialog_view.setFocusable(true); dialog_view.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return true; } return false; } }); ImageView back = dialog_view.findViewById(R.id.popupwindow_myorder_back); setClickListener(back, o -> { mPopupWindow.dismiss(); }); mPresenter.myOrderWindowInit(context, dialog_view); newPopupWindow(parent, false); } public static void showRecordRemovedWindow(Context context, View parent, PopUtilClickListener listener) { initPresenter(); if (checkWindowShoing()) { return; } dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_record_remove, null); dialog_view.setFocusable(true); FrameLayout ok = dialog_view.findViewById(R.id.popupwindow_record_remove_ok); FrameLayout cancel = dialog_view.findViewById(R.id.popupwindow_record_remove_cancel); setClickListener(ok, o -> { mPopupWindow.dismiss(); listener.clickSubmit(null); }); setClickListener(cancel, o -> { mPopupWindow.dismiss(); listener.clickCancel(); }); newPopupWindow(parent, true); } /** * 注冊送7天活动的popupwindow */ public static void RegistrationEventsWindow(Context context, View parent, PopUtilClickListener listener) { initPresenter(); if (checkWindowShoing()) { return; } dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_registration_events, null); dialog_view.setFocusable(true); ImageView img = dialog_view.findViewById(R.id.popupwindow_registration_events_img); ImageView close = dialog_view.findViewById(R.id.popupwindow_registration_events_close); setClickListener(img, o -> { mPopupWindow.dismiss(); listener.clickSubmit(null); }); setClickListener(close, o -> { mPopupWindow.dismiss(); listener.clickCancel(); }); newPopupWindow(parent, true); } /** * 跳转webview的活动 */ public static void webviewEventsWindow(Context context, View parent, PopUtilClickListener listener) { initPresenter(); if (checkWindowShoing()) { return; } dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_webs_events, null); dialog_view.setFocusable(true); ImageView img = dialog_view.findViewById(R.id.popupwindow_webs_events_img); ImageView close = dialog_view.findViewById(R.id.popupwindow_webs_events_close); setClickListener(img, o -> { mPopupWindow.dismiss(); listener.clickSubmit(null); }); setClickListener(close, o -> { mPopupWindow.dismiss(); listener.clickCancel(); }); newPopupWindow(parent, true); } private static void showDeviceInfo(Activity context) { StringBuffer buffer = new StringBuffer(); buffer.append("\tchannel:\t" + "\t" + Consts.getUmengChannel() + "\n"); buffer.append("\tUUID:\t" + "\t" + DeviceUuidFactory.getUuid() + "\n"); buffer.append("\t厂商:\t" + "\t" + DeviceUtil.getDeviceBrand() + "\n"); buffer.append("\t型号:\t" + "\t" + DeviceUtil.getSystemModel() + "\n"); buffer.append("\t系统版本号:\t" + "\t" + DeviceUtil.getSystemVersion() + "\n"); buffer.append("\t应用版本号:\t" + "\t" + DeviceUtil.getVersionCode(context) + "\n"); buffer.append("\t应用版本号名称:\t" + "\t" + DeviceUtil.getVersionName(context) + "\n"); buffer.append("\t屏幕宽度:\t\t" + DeviceUtil.getWidth(context) + "\n"); buffer.append("\t屏幕高度:\t\t" + DeviceUtil.getHeight(context) + "\n"); buffer.append("\t屏幕密度:\t\t" + DeviceUtil.getDensity(context) + "\n"); buffer.append("\t屏幕DPI:\t\t" + DeviceUtil.getDensityDpi(context) + "\n"); if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode()) && Consts.getmConstsBaiDuUserBean() != null) { buffer.append("\t百度UserId:\t\t" + Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId() + "\n"); } View infoView = LayoutInflater.from(context).inflate(R.layout.window_deviceinfo, null); TextView text = (TextView) infoView.findViewById(R.id.deviceinfo); text.setText(buffer.toString()); text.setTextSize(SizeUtils.dp2px(context, 20)); text.setTextColor(Color.WHITE); Dialog dialog = new Dialog(context); dialog.setContentView(infoView); Window dialogWindow = dialog.getWindow(); dialogWindow.setGravity(Gravity.CENTER); WindowManager m = context.getWindowManager(); Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值 p.height = (int) (d.getHeight() * 0.8); p.width = (int) (d.getWidth() * 0.7); dialogWindow.setAttributes(p); dialog.setTitle("Device信息"); dialog.show(); } private static void setClickListener(View view, Consumer onNext) { RxView.clicks(view).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext); } private static void newPopupWindow(View parent, boolean nedFocus) { mPopupWindow = new PopupWindow(dialog_view, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); mPopupWindow.setFocusable(nedFocus); mPopupWindow.showAtLocation(parent, Gravity.CENTER, 0, 0); mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { dialog_view.removeAllViews(); dialog_view = null; mPopupWindow = null; } }); } }