PopWindowUtil.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603
  1. package com.edufound.reader.popwindow;
  2. import android.app.Activity;
  3. import android.app.Dialog;
  4. import android.content.Context;
  5. import android.graphics.Color;
  6. import android.graphics.PointF;
  7. import android.net.Uri;
  8. import android.os.FileUtils;
  9. import android.view.Display;
  10. import android.view.Gravity;
  11. import android.view.KeyEvent;
  12. import android.view.LayoutInflater;
  13. import android.view.View;
  14. import android.view.Window;
  15. import android.view.WindowManager;
  16. import android.widget.FrameLayout;
  17. import android.widget.ImageView;
  18. import android.widget.PopupWindow;
  19. import android.widget.TextView;
  20. import com.bumptech.glide.Glide;
  21. import com.bumptech.glide.load.DataSource;
  22. import com.bumptech.glide.load.engine.GlideException;
  23. import com.bumptech.glide.request.RequestListener;
  24. import com.bumptech.glide.request.target.SimpleTarget;
  25. import com.bumptech.glide.request.target.Target;
  26. import com.davemorrissey.labs.subscaleview.ImageSource;
  27. import com.davemorrissey.labs.subscaleview.ImageViewState;
  28. import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
  29. import com.edufound.reader.R;
  30. import com.edufound.reader.application.EApplication;
  31. import com.edufound.reader.bean.ChannelCodeEnum;
  32. import com.edufound.reader.bean.ModelBean;
  33. import com.edufound.reader.bean.RecordResultBean;
  34. import com.edufound.reader.bean.UserRecordBean;
  35. import com.edufound.reader.cusview.GridRadioGroup;
  36. import com.edufound.reader.listener.PopUtilClickListener;
  37. import com.edufound.reader.listener.PopupRecordStatusListener;
  38. import com.edufound.reader.miutil.MiSoundSDKUtil;
  39. import com.edufound.reader.presenter.PopWindowPresneter;
  40. import com.edufound.reader.util.Consts;
  41. import com.edufound.reader.util.DataCleanManager;
  42. import com.edufound.reader.util.DeviceUtil;
  43. import com.edufound.reader.util.DeviceUuidFactory;
  44. import com.edufound.reader.util.EfunboxUtil;
  45. import com.edufound.reader.util.GlideUtils;
  46. import com.edufound.reader.util.SizeUtils;
  47. import com.jakewharton.rxbinding4.view.RxView;
  48. import com.orhanobut.logger.Logger;
  49. import java.io.File;
  50. import java.util.concurrent.TimeUnit;
  51. import androidx.annotation.Nullable;
  52. import androidx.constraintlayout.widget.ConstraintLayout;
  53. import androidx.recyclerview.widget.RecyclerView;
  54. import io.reactivex.rxjava3.functions.Consumer;
  55. public class PopWindowUtil {
  56. private static PopWindowPresneter mPresenter;
  57. private static PopupWindow mPopupWindow;
  58. private static FrameLayout dialog_view;
  59. private static PopupWindow recordPopupWindow;
  60. private static FrameLayout record_view;
  61. private static PopupWindow eventPopupWindow;
  62. private static FrameLayout event_view;
  63. private static void initPresenter() {
  64. if (mPresenter == null) {
  65. mPresenter = new PopWindowPresneter();
  66. }
  67. }
  68. private static boolean checkWindowShoing() {
  69. if (mPopupWindow == null) {
  70. return false;
  71. }
  72. return mPopupWindow.isShowing();
  73. }
  74. public static void hidePopupWindow() {
  75. if (mPopupWindow != null && mPopupWindow.isShowing()) {
  76. mPopupWindow.dismiss();
  77. }
  78. if (recordPopupWindow != null && recordPopupWindow.isShowing()) {
  79. recordPopupWindow.dismiss();
  80. }
  81. }
  82. public static void showExitAppWindow(Activity context, View parent) {
  83. initPresenter();
  84. if (checkWindowShoing()) {
  85. return;
  86. }
  87. EfunboxUtil.initDesignSize(context);
  88. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_exit_app, null);
  89. dialog_view.setFocusable(true);
  90. ImageView image = dialog_view.findViewById(R.id.popupwindow_exit_app_image);
  91. GlideUtils.loadImageSizeKipMemoryCache(context, "http://reader-apk.ai160.com/reader-apk/res/exit_app.png", image);
  92. FrameLayout exit = dialog_view.findViewById(R.id.popupwindow_exit_app_ok);
  93. FrameLayout cancel = dialog_view.findViewById(R.id.popupwindow_exit_app_cancel);
  94. setClickListener(exit, o -> {
  95. EApplication.killAppProcess(context);
  96. });
  97. setClickListener(cancel, o -> {
  98. mPopupWindow.dismiss();
  99. });
  100. RxView.longClicks(image).subscribe(o -> {
  101. //显示deviceInfo
  102. showDeviceInfo(context);
  103. });
  104. newPopupWindow(parent, true);
  105. }
  106. public static void showSelectGradeWindow(Context context, View parent, int checked, PopUtilClickListener listener) {
  107. initPresenter();
  108. if (checkWindowShoing()) {
  109. return;
  110. }
  111. EfunboxUtil.initDesignSize(context);
  112. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_select_grade, null);
  113. dialog_view.setFocusable(true);
  114. FrameLayout btn_ok = dialog_view.findViewById(R.id.popupwindow_select_ok);
  115. GridRadioGroup gridRadioGroup = dialog_view.findViewById(R.id.popupwindow_select_grade_gridgroup);
  116. int id = 0;
  117. final String[] checkText = {String.valueOf(id)};
  118. switch (checked) {
  119. case 0:
  120. id = R.id.popupwindow_select_grade_one;
  121. checkText[0] = "一年级";
  122. break;
  123. case 1:
  124. id = R.id.popupwindow_select_grade_two;
  125. checkText[0] = "二年级";
  126. break;
  127. case 2:
  128. id = R.id.popupwindow_select_grade_three;
  129. checkText[0] = "三年级";
  130. break;
  131. case 3:
  132. id = R.id.popupwindow_select_grade_four;
  133. checkText[0] = "四年级";
  134. break;
  135. case 4:
  136. id = R.id.popupwindow_select_grade_pre;
  137. checkText[0] = "学前";
  138. break;
  139. }
  140. gridRadioGroup.setOnCheckedChangeListener(new GridRadioGroup.OnCheckedChangeListener() {
  141. @Override
  142. public void onCheckedChanged(GridRadioGroup group, int checkedId) {
  143. group.check(checkedId);
  144. switch (checkedId) {
  145. case R.id.popupwindow_select_grade_one:
  146. //一年级
  147. checkText[0] = "一年级";
  148. break;
  149. case R.id.popupwindow_select_grade_two:
  150. checkText[0] = "二年级";
  151. //二年级
  152. break;
  153. case R.id.popupwindow_select_grade_three:
  154. checkText[0] = "三年级";
  155. //三年级
  156. break;
  157. case R.id.popupwindow_select_grade_four:
  158. checkText[0] = "四年级";
  159. //四年级
  160. break;
  161. case R.id.popupwindow_select_grade_pre:
  162. //学前
  163. checkText[0] = "学前";
  164. break;
  165. }
  166. }
  167. });
  168. gridRadioGroup.check(id);
  169. setClickListener(btn_ok, o -> {
  170. mPopupWindow.dismiss();
  171. listener.clickSubmit(checkText[0]);
  172. });
  173. newPopupWindow(parent, true);
  174. }
  175. public static void showExitLoginWindow(Context context, View parent, PopUtilClickListener listener) {
  176. initPresenter();
  177. if (checkWindowShoing()) {
  178. return;
  179. }
  180. EfunboxUtil.initDesignSize(context);
  181. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_exit_login, null);
  182. dialog_view.setFocusable(true);
  183. ImageView image = dialog_view.findViewById(R.id.popupwindow_exit_login_image);
  184. GlideUtils.loadImageSizeKipMemoryCache(context, "http://reader-apk.ai160.com/reader-apk/res/exit_login.png", image);
  185. FrameLayout exit = dialog_view.findViewById(R.id.popupwindow_exit_login_ok);
  186. FrameLayout cancel = dialog_view.findViewById(R.id.popupwindow_exit_login_cancel);
  187. setClickListener(exit, o -> {
  188. mPopupWindow.dismiss();
  189. listener.clickSubmit(null);
  190. });
  191. setClickListener(cancel, o -> {
  192. mPopupWindow.dismiss();
  193. listener.clickCancel();
  194. });
  195. newPopupWindow(parent, true);
  196. }
  197. public static void showCancellationAccountWindow(Context context, View parent, PopUtilClickListener listener) {
  198. initPresenter();
  199. if (checkWindowShoing()) {
  200. return;
  201. }
  202. EfunboxUtil.initDesignSize(context);
  203. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_cancellation_account, null);
  204. dialog_view.setFocusable(true);
  205. FrameLayout exit = dialog_view.findViewById(R.id.popupwindow_cancellation_account_ok);
  206. FrameLayout cancel = dialog_view.findViewById(R.id.popupwindow_cancellation_account_cancel);
  207. setClickListener(exit, o -> {
  208. mPopupWindow.dismiss();
  209. listener.clickSubmit(null);
  210. });
  211. setClickListener(cancel, o -> {
  212. mPopupWindow.dismiss();
  213. listener.clickCancel();
  214. });
  215. newPopupWindow(parent, true);
  216. }
  217. public static void showBindWeChatWindow(Activity context, View parent, @Nullable PopUtilClickListener listener) {
  218. initPresenter();
  219. if (checkWindowShoing()) {
  220. return;
  221. }
  222. EfunboxUtil.initDesignSize(context);
  223. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_bind_wechat, null);
  224. dialog_view.setFocusable(true);
  225. ImageView back = dialog_view.findViewById(R.id.popupwindow_bindwechat_back);
  226. ImageView image = dialog_view.findViewById(R.id.popupwindow_bind_wechat_image);
  227. TextView text = dialog_view.findViewById(R.id.popupwindow_bind_wechat_name);
  228. setClickListener(back, o -> {
  229. mPopupWindow.dismiss();
  230. if (listener != null) {
  231. listener.clickCancel();
  232. }
  233. mPresenter.getPopHandler().removeMessages(0x1312);
  234. });
  235. mPresenter.getBindWeChatPath(context, image);
  236. mPresenter.getMyInfo(context, text);
  237. newPopupWindow(parent, false);
  238. }
  239. public static void showRecordStatusWindow(Activity context, View parent, RecordResultBean bean, UserRecordBean.UserRead userread, PopupRecordStatusListener listener) {
  240. initPresenter();
  241. if (recordPopupWindow != null) {
  242. recordPopupWindow = null;
  243. }
  244. if (record_view != null) {
  245. record_view = null;
  246. }
  247. EfunboxUtil.initDesignSize(context);
  248. record_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_record_status, null);
  249. record_view.setFocusable(true);
  250. record_view.setOnKeyListener(new View.OnKeyListener() {
  251. @Override
  252. public boolean onKey(View v, int keyCode, KeyEvent event) {
  253. if (keyCode == KeyEvent.KEYCODE_BACK) {
  254. return true;
  255. }
  256. return false;
  257. }
  258. });
  259. ImageView back = record_view.findViewById(R.id.popupwindow_record_status_close);
  260. setClickListener(back, o -> {
  261. recordPopupWindow.dismiss();
  262. });
  263. mPresenter.initRecordStatusWindow(context, record_view, bean, userread, listener);
  264. recordPopupWindow = new PopupWindow(record_view, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
  265. recordPopupWindow.setFocusable(false);
  266. recordPopupWindow.showAtLocation(parent, Gravity.CENTER, 0, 0);
  267. recordPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
  268. @Override
  269. public void onDismiss() {
  270. record_view.removeAllViews();
  271. record_view = null;
  272. recordPopupWindow = null;
  273. }
  274. });
  275. }
  276. public static void showMyOrderWindow(Activity context, View parent) {
  277. initPresenter();
  278. if (checkWindowShoing()) {
  279. mPopupWindow.dismiss();
  280. return;
  281. }
  282. EfunboxUtil.initDesignSize(context);
  283. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_myorder, null);
  284. dialog_view.setFocusable(true);
  285. dialog_view.setOnKeyListener(new View.OnKeyListener() {
  286. @Override
  287. public boolean onKey(View v, int keyCode, KeyEvent event) {
  288. if (keyCode == KeyEvent.KEYCODE_BACK) {
  289. return true;
  290. }
  291. return false;
  292. }
  293. });
  294. ImageView back = dialog_view.findViewById(R.id.popupwindow_myorder_back);
  295. setClickListener(back, o -> {
  296. mPopupWindow.dismiss();
  297. });
  298. mPresenter.myOrderWindowInit(context, dialog_view);
  299. newPopupWindow(parent, false);
  300. }
  301. public static void showRecordRemovedWindow(Context context, View parent, PopUtilClickListener listener) {
  302. initPresenter();
  303. if (checkWindowShoing()) {
  304. return;
  305. }
  306. EfunboxUtil.initDesignSize(context);
  307. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_record_remove, null);
  308. dialog_view.setFocusable(true);
  309. FrameLayout ok = dialog_view.findViewById(R.id.popupwindow_record_remove_ok);
  310. FrameLayout cancel = dialog_view.findViewById(R.id.popupwindow_record_remove_cancel);
  311. setClickListener(ok, o -> {
  312. mPopupWindow.dismiss();
  313. listener.clickSubmit(null);
  314. });
  315. setClickListener(cancel, o -> {
  316. mPopupWindow.dismiss();
  317. listener.clickCancel();
  318. });
  319. newPopupWindow(parent, true);
  320. }
  321. /**
  322. * 注冊送7天活动的popupwindow
  323. */
  324. public static void RegistrationEventsWindow(Context context, View parent, PopUtilClickListener listener) {
  325. initPresenter();
  326. if (checkWindowShoing()) {
  327. return;
  328. }
  329. EfunboxUtil.initDesignSize(context);
  330. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_registration_events, null);
  331. dialog_view.setFocusable(true);
  332. ImageView img = dialog_view.findViewById(R.id.popupwindow_registration_events_img);
  333. GlideUtils.loadImageSizeKipMemoryCache(context, "http://reader-apk.ai160.com/reader-apk/res/login_event.png", img);
  334. ImageView close = dialog_view.findViewById(R.id.popupwindow_registration_events_close);
  335. setClickListener(img, o -> {
  336. mPopupWindow.dismiss();
  337. listener.clickSubmit(null);
  338. });
  339. setClickListener(close, o -> {
  340. mPopupWindow.dismiss();
  341. listener.clickCancel();
  342. });
  343. newPopupWindow(parent, true);
  344. }
  345. /**
  346. * 跳转webview的活动
  347. */
  348. public static void webviewEventsWindow(Context context, View parent, PopUtilClickListener listener, boolean needwindow) {
  349. initPresenter();
  350. if (!needwindow) {
  351. listener.clickSubmit(null);
  352. return;
  353. }
  354. EfunboxUtil.initDesignSize(context);
  355. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_webs_events, null);
  356. dialog_view.setFocusable(true);
  357. ImageView img = dialog_view.findViewById(R.id.popupwindow_webs_events_img);
  358. GlideUtils.loadImageSizeKipMemoryCache(context, "http://reader-apk.ai160.com/reader-apk/res/event_img.png", img);
  359. ImageView close = dialog_view.findViewById(R.id.popupwindow_webs_events_close);
  360. setClickListener(img, o -> {
  361. eventPopupWindow.dismiss();
  362. listener.clickSubmit(null);
  363. });
  364. setClickListener(close, o -> {
  365. eventPopupWindow.dismiss();
  366. listener.clickCancel();
  367. });
  368. eventPopupWindow = new PopupWindow(dialog_view, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
  369. eventPopupWindow.setFocusable(true);
  370. eventPopupWindow.showAtLocation(parent, Gravity.CENTER, 0, 0);
  371. eventPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
  372. @Override
  373. public void onDismiss() {
  374. dialog_view.removeAllViews();
  375. dialog_view = null;
  376. eventPopupWindow = null;
  377. }
  378. });
  379. }
  380. public static void miSoundLoginWindow(Context context, View parent, int type, PopWindowPresneter.MISoundLoginCallBack callBack) {
  381. initPresenter();
  382. if (checkWindowShoing()) {
  383. mPopupWindow.dismiss();
  384. return;
  385. }
  386. EfunboxUtil.initDesignSize(context);
  387. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_mi_sound_qrcode_layout, null);
  388. dialog_view.setFocusable(true);
  389. dialog_view.setOnKeyListener(new View.OnKeyListener() {
  390. @Override
  391. public boolean onKey(View v, int keyCode, KeyEvent event) {
  392. if (keyCode == KeyEvent.KEYCODE_BACK) {
  393. return true;
  394. }
  395. return false;
  396. }
  397. });
  398. ConstraintLayout mQRLoginLayout = dialog_view.findViewById(R.id.popupwindow_mi_sound_qrcode_login_layout);
  399. mQRLoginLayout.setVisibility(View.GONE);
  400. ConstraintLayout mBindPhoneNumLayout = dialog_view.findViewById(R.id.popupwindow_mi_sound_bind_phone_layout);
  401. ConstraintLayout mShowBindNumLayout = dialog_view.findViewById(R.id.popupwindow_mi_sound_show_bind_phoneNum_layout);
  402. mBindPhoneNumLayout.setVisibility(View.GONE);
  403. switch (type) {
  404. case MiSoundSDKUtil.MI_SOUND_QRCODE_TYPE:
  405. Logger.e("显示qrcodelayout");
  406. mQRLoginLayout.setVisibility(View.VISIBLE);
  407. break;
  408. case MiSoundSDKUtil.MI_SOUND_BIND_PHONENUM:
  409. mBindPhoneNumLayout.setVisibility(View.VISIBLE);
  410. break;
  411. case MiSoundSDKUtil.MI_SOUND_SHOW_BINDPHONENUM:
  412. mShowBindNumLayout.setVisibility(View.VISIBLE);
  413. break;
  414. }
  415. ImageView close = dialog_view.findViewById(R.id.popupwindow_mi_sound_qrcode_layout_close);
  416. setClickListener(close, o -> {
  417. mPresenter.getPopHandler().removeMessages(0x1313);
  418. mPopupWindow.dismiss();
  419. });
  420. mPresenter.initMiSoundLoginWindow(context, dialog_view, type, new PopWindowPresneter.MISoundLoginCallBack() {
  421. @Override
  422. public void success() {
  423. Logger.e("popupwindow第一层的callback");
  424. if (callBack != null) {
  425. Logger.e("调用传过来的callback的success");
  426. callBack.success();
  427. }
  428. mPopupWindow.dismiss();
  429. }
  430. });
  431. newPopupWindow(parent, true);
  432. }
  433. /**
  434. * 超长图popupwindow
  435. */
  436. public static void showLongSizeImg(Context context, String url, View parent) {
  437. initPresenter();
  438. if (checkWindowShoing()) {
  439. return;
  440. }
  441. EfunboxUtil.initDesignSize(context);
  442. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_show_rule, null);
  443. dialog_view.setFocusable(true);
  444. final File[] imgResource = new File[1];
  445. SubsamplingScaleImageView imageView = (SubsamplingScaleImageView) dialog_view.findViewById(R.id.imageview);
  446. imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CUSTOM);
  447. imageView.setMinScale(1.0F);
  448. //下载图片保存到本地
  449. GlideUtils.downloadImage(context, url, new RequestListener<File>() {
  450. @Override
  451. public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<File> target, boolean isFirstResource) {
  452. return false;
  453. }
  454. @Override
  455. public boolean onResourceReady(File resource, Object model, Target<File> target, DataSource dataSource, boolean isFirstResource) {
  456. imgResource[0] = resource;
  457. imageView.setImage(ImageSource.uri(Uri.fromFile(resource)), new ImageViewState(1.0F, new PointF(0, 0), 0));
  458. // Uri uri = Uri.fromFile(resource);
  459. // imageView.setImage(uri);
  460. return false;
  461. }
  462. });
  463. ImageView back = dialog_view.findViewById(R.id.popupwindow_show_rule_back);
  464. setClickListener(back, o -> {
  465. if (imgResource[0] != null) {
  466. DataCleanManager.deleteFilesByDirectory(imgResource[0]);
  467. }
  468. mPopupWindow.dismiss();
  469. });
  470. newPopupWindow(parent, true);
  471. }
  472. /**
  473. * 排行榜
  474. * */
  475. /**
  476. * 超长图popupwindow
  477. */
  478. public static void showRankListWindow(Context context, ModelBean.ReadUserList bean, View parent) {
  479. initPresenter();
  480. if (checkWindowShoing()) {
  481. return;
  482. }
  483. EfunboxUtil.initDesignSize(context);
  484. dialog_view = (FrameLayout) LayoutInflater.from(context).inflate(R.layout.popupwindow_show_ranklist, null);
  485. dialog_view.setFocusable(true);
  486. mPresenter.rankListInit(context, dialog_view, bean.getId());
  487. ImageView back = dialog_view.findViewById(R.id.popupwindow_ranklist_back);
  488. setClickListener(back, o -> {
  489. mPopupWindow.dismiss();
  490. });
  491. newPopupWindow(parent, true);
  492. }
  493. private static void showDeviceInfo(Activity context) {
  494. StringBuffer buffer = new StringBuffer();
  495. buffer.append("\tchannel:\t" + "\t" + Consts.getUmengChannel() + "\n");
  496. buffer.append("\tUUID:\t" + "\t" + DeviceUuidFactory.getUuid() + "\n");
  497. buffer.append("\t厂商:\t" + "\t" + DeviceUtil.getDeviceBrand() + "\n");
  498. buffer.append("\t型号:\t" + "\t" + DeviceUtil.getSystemModel() + "\n");
  499. buffer.append("\t系统版本号:\t" + "\t" + DeviceUtil.getSystemVersion() + "\n");
  500. buffer.append("\t应用版本号:\t" + "\t" + DeviceUtil.getVersionCode(context) + "\n");
  501. buffer.append("\t应用版本号名称:\t" + "\t" + DeviceUtil.getVersionName(context) + "\n");
  502. buffer.append("\t屏幕宽度:\t\t" + DeviceUtil.getWidth(context) + "\n");
  503. buffer.append("\t屏幕高度:\t\t" + DeviceUtil.getHeight(context) + "\n");
  504. buffer.append("\t屏幕密度:\t\t" + DeviceUtil.getDensity(context) + "\n");
  505. buffer.append("\t屏幕DPI:\t\t" + DeviceUtil.getDensityDpi(context) + "\n");
  506. if (Consts.getUmengChannel().equals(ChannelCodeEnum.BAIDU.getChannelCode()) && Consts.getmConstsBaiDuUserBean() != null) {
  507. buffer.append("\t百度UserId:\t\t" + Consts.getmConstsBaiDuUserBean().getUserInfo().getUserId() + "\n");
  508. }
  509. View infoView = LayoutInflater.from(context).inflate(R.layout.window_deviceinfo, null);
  510. TextView text = (TextView) infoView.findViewById(R.id.deviceinfo);
  511. text.setText(buffer.toString());
  512. text.setTextSize(SizeUtils.dp2px(context, 20));
  513. text.setTextColor(Color.WHITE);
  514. Dialog dialog = new Dialog(context);
  515. dialog.setContentView(infoView);
  516. Window dialogWindow = dialog.getWindow();
  517. dialogWindow.setGravity(Gravity.CENTER);
  518. WindowManager m = context.getWindowManager();
  519. Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
  520. WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
  521. p.height = (int) (d.getHeight() * 0.8);
  522. p.width = (int) (d.getWidth() * 0.7);
  523. dialogWindow.setAttributes(p);
  524. dialog.setTitle("Device信息");
  525. dialog.show();
  526. }
  527. private static void setClickListener(View view, Consumer onNext) {
  528. RxView.clicks(view).throttleFirst(2, TimeUnit.SECONDS).subscribe(onNext);
  529. }
  530. private static void newPopupWindow(View parent, boolean nedFocus) {
  531. mPopupWindow = new PopupWindow(dialog_view, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
  532. mPopupWindow.setFocusable(nedFocus);
  533. mPopupWindow.showAtLocation(parent, Gravity.CENTER, 0, 0);
  534. mPopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
  535. @Override
  536. public void onDismiss() {
  537. dialog_view.removeAllViews();
  538. dialog_view = null;
  539. mPopupWindow = null;
  540. }
  541. });
  542. }
  543. }