MainActivity.java 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237
  1. package com.kongzue.dialogxdemo.activity;
  2. import android.content.ActivityNotFoundException;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.res.Configuration;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;
  8. import android.graphics.Color;
  9. import android.net.Uri;
  10. import android.os.Build;
  11. import android.os.Handler;
  12. import android.os.Looper;
  13. import android.provider.Settings;
  14. import android.view.Gravity;
  15. import android.view.View;
  16. import android.view.ViewGroup;
  17. import android.view.WindowManager;
  18. import android.view.inputmethod.InputMethodManager;
  19. import android.webkit.WebSettings;
  20. import android.webkit.WebView;
  21. import android.webkit.WebViewClient;
  22. import android.widget.EditText;
  23. import android.widget.ImageView;
  24. import android.widget.LinearLayout;
  25. import android.widget.RadioButton;
  26. import android.widget.RadioGroup;
  27. import android.widget.RelativeLayout;
  28. import android.widget.TextView;
  29. import android.widget.Toast;
  30. import androidx.annotation.NonNull;
  31. import androidx.constraintlayout.widget.ConstraintLayout;
  32. import androidx.recyclerview.widget.LinearLayoutManager;
  33. import androidx.recyclerview.widget.RecyclerView;
  34. import com.kongzue.baseframework.BaseActivity;
  35. import com.kongzue.baseframework.interfaces.DarkNavigationBarTheme;
  36. import com.kongzue.baseframework.interfaces.DarkStatusBarTheme;
  37. import com.kongzue.baseframework.interfaces.Layout;
  38. import com.kongzue.baseframework.interfaces.NavigationBarBackgroundColorRes;
  39. import com.kongzue.baseframework.util.CycleRunner;
  40. import com.kongzue.baseframework.util.JumpParameter;
  41. import com.kongzue.dialogx.DialogX;
  42. import com.kongzue.dialogx.dialogs.BottomDialog;
  43. import com.kongzue.dialogx.dialogs.BottomMenu;
  44. import com.kongzue.dialogx.dialogs.CustomDialog;
  45. import com.kongzue.dialogx.dialogs.FullScreenDialog;
  46. import com.kongzue.dialogx.dialogs.InputDialog;
  47. import com.kongzue.dialogx.dialogs.MessageDialog;
  48. import com.kongzue.dialogx.dialogs.PopMenu;
  49. import com.kongzue.dialogx.dialogs.PopNotification;
  50. import com.kongzue.dialogx.dialogs.PopTip;
  51. import com.kongzue.dialogx.dialogs.TipDialog;
  52. import com.kongzue.dialogx.dialogs.WaitDialog;
  53. import com.kongzue.dialogx.interfaces.BaseDialog;
  54. import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
  55. import com.kongzue.dialogx.interfaces.DialogXStyle;
  56. import com.kongzue.dialogx.interfaces.MenuItemTextInfoInterceptor;
  57. import com.kongzue.dialogx.interfaces.OnBackPressedListener;
  58. import com.kongzue.dialogx.interfaces.OnBindView;
  59. import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
  60. import com.kongzue.dialogx.interfaces.OnIconChangeCallBack;
  61. import com.kongzue.dialogx.interfaces.OnInputDialogButtonClickListener;
  62. import com.kongzue.dialogx.interfaces.OnMenuItemClickListener;
  63. import com.kongzue.dialogx.interfaces.OnMenuItemSelectListener;
  64. import com.kongzue.dialogx.style.IOSStyle;
  65. import com.kongzue.dialogx.style.KongzueStyle;
  66. import com.kongzue.dialogx.style.MIUIStyle;
  67. import com.kongzue.dialogx.style.MaterialStyle;
  68. import com.kongzue.dialogx.util.TextInfo;
  69. import com.kongzue.dialogx.util.views.ActivityScreenShotImageView;
  70. import com.kongzue.dialogxdemo.BuildConfig;
  71. import com.kongzue.dialogxdemo.R;
  72. import com.kongzue.dialogxdemo.custom.recycleview.CustomRecycleViewAdapter;
  73. import com.kongzue.dialogxdemo.fragment.CustomFragment;
  74. import com.kongzue.dialogxmaterialyou.style.MaterialYouStyle;
  75. import java.util.ArrayList;
  76. import java.util.List;
  77. import java.util.Random;
  78. @Layout(R.layout.activity_main)
  79. @DarkStatusBarTheme(true)
  80. @DarkNavigationBarTheme(true)
  81. @NavigationBarBackgroundColorRes(R.color.emptyNavBar)
  82. public class MainActivity extends BaseActivity {
  83. private ConstraintLayout boxTable;
  84. private TextView txtTitle;
  85. private ImageView btnShare;
  86. private ImageView splitBody;
  87. private LinearLayout boxBody;
  88. private RadioGroup grpStyle;
  89. private RadioButton rdoMaterial;
  90. private RadioButton rdoIos;
  91. private RadioButton rdoKongzue;
  92. private RadioButton rdoMiui;
  93. private RadioButton rdoMaterialYou;
  94. private RadioGroup grpTheme;
  95. private RadioButton rdoAuto;
  96. private RadioButton rdoLight;
  97. private RadioButton rdoDark;
  98. private RadioGroup grpMode;
  99. private RadioButton rdoModeView;
  100. private RadioButton rdoModeWindow;
  101. private RadioButton rdoModeDialogFragment;
  102. private RadioButton rdoModeFloatingActivity;
  103. private TextView btnMessageDialog;
  104. private TextView btnSelectDialog;
  105. private TextView btnInputDialog;
  106. private TextView btnWaitDialog;
  107. private TextView btnWaitAndTipDialog;
  108. private TextView btnTipSuccess;
  109. private TextView btnTipWarning;
  110. private TextView btnTipError;
  111. private TextView btnTipProgress;
  112. private TextView btnPoptip;
  113. private TextView btnPoptipBigMessage;
  114. private TextView btnPoptipSuccess;
  115. private TextView btnPoptipWarning;
  116. private TextView btnPoptipError;
  117. private TextView btnPopnotification;
  118. private TextView btnPopnotificationBigMessage;
  119. private TextView btnPopnotificationOverlay;
  120. private TextView btnBottomDialog;
  121. private TextView btnBottomMenu;
  122. private TextView btnBottomReply;
  123. private TextView btnBottomSelectMenu;
  124. private TextView btnBottomMultiSelectMenu;
  125. private TextView btnBottomCustomRecycleView;
  126. private TextView btnCustomMessageDialog;
  127. private TextView btnCustomInputDialog;
  128. private TextView btnCustomBottomMenu;
  129. private TextView btnCustomDialog;
  130. private TextView btnCustomDialogAlign;
  131. private TextView btnFullScreenDialogWebPage;
  132. private TextView btnFullScreenDialogLogin;
  133. private TextView btnFullScreenDialogFragment;
  134. private TextView btnContextMenu;
  135. private TextView btnSelectMenu;
  136. private TextView btnShowBreak;
  137. private TextView btnListDialog;
  138. private TextView txtVer;
  139. @Override
  140. public void initViews() {
  141. boxTable = findViewById(R.id.box_table);
  142. txtTitle = findViewById(R.id.txt_title);
  143. btnShare = findViewById(R.id.btn_share);
  144. splitBody = findViewById(R.id.split_body);
  145. boxBody = findViewById(R.id.box_body);
  146. grpStyle = findViewById(R.id.grp_style);
  147. rdoMaterial = findViewById(R.id.rdo_material);
  148. rdoIos = findViewById(R.id.rdo_ios);
  149. rdoKongzue = findViewById(R.id.rdo_kongzue);
  150. rdoMiui = findViewById(R.id.rdo_miui);
  151. rdoMaterialYou = findViewById(R.id.rdo_material_you);
  152. grpTheme = findViewById(R.id.grp_theme);
  153. rdoAuto = findViewById(R.id.rdo_auto);
  154. rdoLight = findViewById(R.id.rdo_light);
  155. rdoDark = findViewById(R.id.rdo_dark);
  156. grpMode = findViewById(R.id.grp_mode);
  157. rdoModeView = findViewById(R.id.rdo_mode_view);
  158. rdoModeWindow = findViewById(R.id.rdo_mode_window);
  159. rdoModeDialogFragment = findViewById(R.id.rdo_mode_dialogFragment);
  160. rdoModeFloatingActivity = findViewById(R.id.rdo_mode_floatingActivity);
  161. btnMessageDialog = findViewById(R.id.btn_messageDialog);
  162. btnSelectDialog = findViewById(R.id.btn_selectDialog);
  163. btnInputDialog = findViewById(R.id.btn_inputDialog);
  164. btnWaitDialog = findViewById(R.id.btn_waitDialog);
  165. btnWaitAndTipDialog = findViewById(R.id.btn_waitAndTipDialog);
  166. btnTipSuccess = findViewById(R.id.btn_tipSuccess);
  167. btnTipWarning = findViewById(R.id.btn_tipWarning);
  168. btnTipError = findViewById(R.id.btn_tipError);
  169. btnTipProgress = findViewById(R.id.btn_tipProgress);
  170. btnPoptip = findViewById(R.id.btn_poptip);
  171. btnPoptipBigMessage = findViewById(R.id.btn_poptip_bigMessage);
  172. btnPoptipSuccess = findViewById(R.id.btn_poptip_success);
  173. btnPoptipWarning = findViewById(R.id.btn_poptip_warning);
  174. btnPoptipError = findViewById(R.id.btn_poptip_error);
  175. btnPopnotification = findViewById(R.id.btn_popnotification);
  176. btnPopnotificationBigMessage = findViewById(R.id.btn_popnotification_bigMessage);
  177. btnPopnotificationOverlay = findViewById(R.id.btn_popnotification_overlay);
  178. btnBottomDialog = findViewById(R.id.btn_bottom_dialog);
  179. btnBottomMenu = findViewById(R.id.btn_bottom_menu);
  180. btnBottomReply = findViewById(R.id.btn_bottom_reply);
  181. btnBottomSelectMenu = findViewById(R.id.btn_bottom_select_menu);
  182. btnBottomMultiSelectMenu = findViewById(R.id.btn_bottom_multiSelect_menu);
  183. btnBottomCustomRecycleView = findViewById(R.id.btn_bottom_custom_recycleView);
  184. btnCustomMessageDialog = findViewById(R.id.btn_customMessageDialog);
  185. btnCustomInputDialog = findViewById(R.id.btn_customInputDialog);
  186. btnCustomBottomMenu = findViewById(R.id.btn_customBottomMenu);
  187. btnCustomDialog = findViewById(R.id.btn_customDialog);
  188. btnCustomDialogAlign = findViewById(R.id.btn_customDialogAlign);
  189. btnFullScreenDialogWebPage = findViewById(R.id.btn_fullScreenDialog_webPage);
  190. btnFullScreenDialogLogin = findViewById(R.id.btn_fullScreenDialog_login);
  191. btnFullScreenDialogFragment = findViewById(R.id.btn_fullScreenDialog_fragment);
  192. btnContextMenu = findViewById(R.id.btn_contextMenu);
  193. btnSelectMenu = findViewById(R.id.btn_selectMenu);
  194. btnShowBreak = findViewById(R.id.btn_showBreak);
  195. btnListDialog = findViewById(R.id.btn_listDialog);
  196. txtVer = findViewById(R.id.txt_ver);
  197. }
  198. @Override
  199. public void initDatas(JumpParameter parameter) {
  200. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
  201. refreshUIMode();
  202. boolean showBreak = parameter.getBoolean("showBreak");
  203. if (showBreak) {
  204. txtTitle.setText("显示Dialog时关闭Activity演示");
  205. MessageDialog.show("提示", "接下来会直接运行一个 WaitDialog,2 秒后直接关闭 Activity,并回到原 Activity,保证程序不会出现 WindowLeaked 错误。\n\n" +
  206. "Android 原生 AlertDialog 常出现因 Activity 先于 Dialog 关闭而导致此错误引发程序崩溃。\n\n" +
  207. "而使用 DialogX 构建的对话框不仅仅不会出现此问题,还可避免因句柄持续持有导致的内存泄漏。", "开始测试", "取消")
  208. .setOkButton(new OnDialogButtonClickListener() {
  209. @Override
  210. public boolean onClick(BaseDialog baseDialog, View v) {
  211. WaitDialog.show("请稍后...");
  212. runDelayed(new Runnable() {
  213. @Override
  214. public void run() {
  215. finish(); //先结束掉本界面
  216. }
  217. }, 2000);
  218. return false;
  219. }
  220. })
  221. .setCancelButton(new OnDialogButtonClickListener() {
  222. @Override
  223. public boolean onClick(BaseDialog baseDialog, View v) {
  224. finish();
  225. return false;
  226. }
  227. })
  228. .setCancelable(false);
  229. }
  230. switch (DialogX.implIMPLMode) {
  231. case VIEW:
  232. rdoModeView.setChecked(true);
  233. break;
  234. case WINDOW:
  235. rdoModeWindow.setChecked(true);
  236. break;
  237. case DIALOG_FRAGMENT:
  238. rdoModeDialogFragment.setChecked(true);
  239. break;
  240. case FLOATING_ACTIVITY:
  241. rdoModeFloatingActivity.setChecked(true);
  242. break;
  243. }
  244. txtVer.setText("当前版本:" + BuildConfig.VERSION_NAME);
  245. }
  246. //用于模拟进度提示
  247. private CycleRunner cycleRunner;
  248. private float progress = 0;
  249. private int waitId;
  250. private TextView btnReplyCommit;
  251. private EditText editReplyCommit;
  252. private TextView btnCancel;
  253. private TextView btnSubmit;
  254. private RelativeLayout boxUserName;
  255. private EditText editUserName;
  256. private RelativeLayout boxPassword;
  257. private EditText editPassword;
  258. private TextView btnLicense;
  259. private TextView btnClose;
  260. private WebView webView;
  261. private String[] singleSelectMenuText = new String[]{"拒绝", "询问", "始终允许", "仅在使用中允许"};
  262. private int selectMenuIndex;
  263. private String[] multiSelectMenuText = new String[]{"上海", "北京", "广州", "深圳"};
  264. private int[] selectMenuIndexArray;
  265. private String multiSelectMenuResultCache;
  266. @Override
  267. public void setEvents() {
  268. grpMode.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
  269. @Override
  270. public void onCheckedChanged(RadioGroup group, int checkedId) {
  271. BaseDialog.cleanAll();
  272. switch (checkedId) {
  273. case R.id.rdo_mode_view:
  274. DialogX.implIMPLMode = DialogX.IMPL_MODE.VIEW;
  275. break;
  276. case R.id.rdo_mode_window:
  277. DialogX.implIMPLMode = DialogX.IMPL_MODE.WINDOW;
  278. break;
  279. case R.id.rdo_mode_dialogFragment:
  280. DialogX.implIMPLMode = DialogX.IMPL_MODE.DIALOG_FRAGMENT;
  281. break;
  282. case R.id.rdo_mode_floatingActivity:
  283. DialogX.implIMPLMode = DialogX.IMPL_MODE.FLOATING_ACTIVITY;
  284. break;
  285. }
  286. }
  287. });
  288. grpTheme.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
  289. @Override
  290. public void onCheckedChanged(RadioGroup group, int checkedId) {
  291. switch (checkedId) {
  292. case R.id.rdo_auto:
  293. DialogX.globalTheme = DialogX.THEME.AUTO;
  294. break;
  295. case R.id.rdo_light:
  296. DialogX.globalTheme = DialogX.THEME.LIGHT;
  297. break;
  298. case R.id.rdo_dark:
  299. DialogX.globalTheme = DialogX.THEME.DARK;
  300. break;
  301. }
  302. }
  303. });
  304. grpStyle.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
  305. @Override
  306. public void onCheckedChanged(RadioGroup group, int checkedId) {
  307. DialogX.cancelButtonText = "取消";
  308. DialogX.titleTextInfo = null;
  309. DialogX.buttonTextInfo = null;
  310. switch (checkedId) {
  311. case R.id.rdo_material:
  312. DialogX.globalStyle = MaterialStyle.style();
  313. DialogX.cancelButtonText = "";
  314. break;
  315. case R.id.rdo_kongzue:
  316. DialogX.globalStyle = KongzueStyle.style();
  317. break;
  318. case R.id.rdo_ios:
  319. DialogX.globalStyle = IOSStyle.style();
  320. break;
  321. case R.id.rdo_miui:
  322. DialogX.globalStyle = MIUIStyle.style();
  323. break;
  324. case R.id.rdo_material_you:
  325. DialogX.globalStyle = MaterialYouStyle.style();
  326. break;
  327. }
  328. }
  329. });
  330. btnShare.setOnClickListener(new View.OnClickListener() {
  331. @Override
  332. public void onClick(View v) {
  333. openUrl("https://github.com/kongzue/DialogX");
  334. }
  335. });
  336. btnContextMenu.setOnClickListener(new View.OnClickListener() {
  337. @Override
  338. public void onClick(View v) {
  339. PopMenu.show(new String[]{"添加", "编辑", "删除", "分享"})
  340. .setOnMenuItemClickListener(new OnMenuItemClickListener<PopMenu>() {
  341. @Override
  342. public boolean onClick(PopMenu dialog, CharSequence text, int index) {
  343. if (index == 0) {
  344. dialog.setMenuList(new String[]{"A", "B", "C"});
  345. return true;
  346. }
  347. return false;
  348. }
  349. })
  350. .setOnIconChangeCallBack(new OnIconChangeCallBack<PopMenu>(true) {
  351. @Override
  352. public int getIcon(PopMenu dialog, int index, String menuText) {
  353. switch (menuText) {
  354. case "添加":
  355. return R.mipmap.img_dialogx_demo_add;
  356. case "编辑":
  357. return R.mipmap.img_dialogx_demo_edit;
  358. case "删除":
  359. return R.mipmap.img_dialogx_demo_delete;
  360. case "分享":
  361. return R.mipmap.img_dialogx_demo_share;
  362. default:
  363. return 0;
  364. }
  365. }
  366. });
  367. }
  368. });
  369. btnSelectMenu.setOnClickListener(new View.OnClickListener() {
  370. @Override
  371. public void onClick(View view) {
  372. PopMenu.show(view, new String[]{"选项1", "选项2", "选项3"})
  373. .setOnMenuItemClickListener(new OnMenuItemClickListener<PopMenu>() {
  374. @Override
  375. public boolean onClick(PopMenu dialog, CharSequence text, int index) {
  376. btnSelectMenu.setText(text);
  377. return false;
  378. }
  379. });
  380. }
  381. });
  382. btnFullScreenDialogFragment.setOnClickListener(new View.OnClickListener() {
  383. @Override
  384. public void onClick(View v) {
  385. CustomFragment customFragment = new CustomFragment();
  386. FullScreenDialog.show(new OnBindView<FullScreenDialog>(customFragment) {
  387. @Override
  388. public void onBind(FullScreenDialog dialog, View v) {
  389. }
  390. });
  391. }
  392. });
  393. btnMessageDialog.setOnClickListener(new View.OnClickListener() {
  394. @Override
  395. public void onClick(View view) {
  396. MessageDialog.show("标题", "这里是正文内容。", "确定")
  397. .setOkButton(new OnDialogButtonClickListener<MessageDialog>() {
  398. @Override
  399. public boolean onClick(MessageDialog baseDialog, View v) {
  400. PopTip.show("点击确定按钮");
  401. return false;
  402. }
  403. });
  404. }
  405. });
  406. btnSelectDialog.setOnClickListener(new View.OnClickListener() {
  407. @Override
  408. public void onClick(View v) {
  409. MessageDialog messageDialog = new MessageDialog("多选对话框", "移除App会将它从主屏幕移除并保留其所有数据。", "删除App", "取消", "移至App资源库")
  410. .setButtonOrientation(LinearLayout.VERTICAL);
  411. if (!rdoMiui.isChecked()) {
  412. messageDialog.setOkTextInfo(new TextInfo().setFontColor(Color.parseColor("#EB5545")).setBold(true));
  413. }
  414. messageDialog.show();
  415. }
  416. });
  417. btnInputDialog.setOnClickListener(new View.OnClickListener() {
  418. @Override
  419. public void onClick(View view) {
  420. new InputDialog("标题", "正文内容", "确定", "取消", "正在输入的文字")
  421. .setInputText("Hello World")
  422. .setOkButton(new OnInputDialogButtonClickListener<InputDialog>() {
  423. @Override
  424. public boolean onClick(InputDialog baseDialog, View v, String inputStr) {
  425. PopTip.show("输入的内容:" + inputStr);
  426. return false;
  427. }
  428. })
  429. .show();
  430. }
  431. });
  432. btnWaitDialog.setOnClickListener(new View.OnClickListener() {
  433. @Override
  434. public void onClick(View v) {
  435. WaitDialog.show("Please Wait!").setOnBackPressedListener(new OnBackPressedListener() {
  436. @Override
  437. public boolean onBackPressed() {
  438. PopTip.show("按下返回");
  439. return false;
  440. }
  441. });
  442. runDelayed(new Runnable() {
  443. @Override
  444. public void run() {
  445. WaitDialog.dismiss();
  446. }
  447. }, 1500);
  448. }
  449. });
  450. btnWaitAndTipDialog.setOnClickListener(new View.OnClickListener() {
  451. boolean closeFlag = false;
  452. @Override
  453. public void onClick(View v) {
  454. closeFlag = false;
  455. WaitDialog.show("Please Wait!").setOnBackPressedListener(new OnBackPressedListener() {
  456. @Override
  457. public boolean onBackPressed() {
  458. PopTip.show("按下返回", "关闭").setButton(new OnDialogButtonClickListener<PopTip>() {
  459. @Override
  460. public boolean onClick(PopTip baseDialog, View v) {
  461. closeFlag = true;
  462. WaitDialog.dismiss();
  463. return false;
  464. }
  465. });
  466. return false;
  467. }
  468. });
  469. if (!closeFlag) runDelayed(new Runnable() {
  470. @Override
  471. public void run() {
  472. if (!closeFlag) TipDialog.show("完成!", WaitDialog.TYPE.SUCCESS);
  473. }
  474. }, 1500 + new Random().nextInt(1000));
  475. }
  476. });
  477. btnTipSuccess.setOnClickListener(new View.OnClickListener() {
  478. @Override
  479. public void onClick(View v) {
  480. TipDialog.show("Success!", WaitDialog.TYPE.SUCCESS);
  481. }
  482. });
  483. btnTipWarning.setOnClickListener(new View.OnClickListener() {
  484. @Override
  485. public void onClick(View v) {
  486. TipDialog.show("Warning!", WaitDialog.TYPE.WARNING);
  487. }
  488. });
  489. btnTipError.setOnClickListener(new View.OnClickListener() {
  490. @Override
  491. public void onClick(View v) {
  492. TipDialog.show("Error!", WaitDialog.TYPE.ERROR);
  493. }
  494. });
  495. btnTipProgress.setOnClickListener(new View.OnClickListener() {
  496. @Override
  497. public void onClick(View v) {
  498. waitId = 0;
  499. progress = 0;
  500. WaitDialog.show("假装连接...").setOnBackPressedListener(new OnBackPressedListener() {
  501. @Override
  502. public boolean onBackPressed() {
  503. MessageDialog.show("正在进行", "是否取消?", "是", "否").setOkButton(new OnDialogButtonClickListener() {
  504. @Override
  505. public boolean onClick(BaseDialog baseDialog, View v) {
  506. waitId = -1;
  507. WaitDialog.dismiss();
  508. return false;
  509. }
  510. });
  511. return false;
  512. }
  513. });
  514. runOnMainDelayed(new Runnable() {
  515. @Override
  516. public void run() {
  517. if (waitId != 0) {
  518. return;
  519. }
  520. cycleRunner = runOnMainCycle(new Runnable() {
  521. @Override
  522. public void run() {
  523. if (waitId != 0) {
  524. cycleRunner.cancel();
  525. return;
  526. }
  527. progress = progress + 0.1f;
  528. if (progress < 1f) {
  529. WaitDialog.show("假装加载" + ((int) (progress * 100)) + "%", progress);
  530. } else {
  531. TipDialog.show("加载完成", WaitDialog.TYPE.SUCCESS);
  532. cycleRunner.cancel();
  533. }
  534. }
  535. }, 1000, 1000);
  536. }
  537. }, 3000);
  538. }
  539. });
  540. btnBottomDialog.setOnClickListener(new View.OnClickListener() {
  541. @Override
  542. public void onClick(View v) {
  543. String s = rdoMaterial.isChecked() ? "你可以向下滑动来关闭这个对话框" : "你可以点击空白区域或返回键来关闭这个对话框";
  544. new BottomDialog("标题", "这里是对话框内容。\n" + s + "。\n底部对话框也支持自定义布局扩展使用方式。",
  545. new OnBindView<BottomDialog>(R.layout.layout_custom_view) {
  546. @Override
  547. public void onBind(BottomDialog dialog, View v) {
  548. if (dialog.getDialogImpl().imgTab != null) {
  549. ((ViewGroup) dialog.getDialogImpl().imgTab.getParent()).removeView(dialog.getDialogImpl().imgTab);
  550. }
  551. v.setOnClickListener(new View.OnClickListener() {
  552. @Override
  553. public void onClick(View v) {
  554. dialog.dismiss();
  555. PopTip.show("Click Custom View");
  556. }
  557. });
  558. }
  559. })
  560. .show();
  561. }
  562. });
  563. btnBottomMenu.setOnClickListener(new View.OnClickListener() {
  564. @Override
  565. public void onClick(View v) {
  566. if (rdoMaterial.isChecked()) {
  567. //Material 可滑动展开 BottomMenu 演示
  568. BottomMenu.build()
  569. .setBottomDialogMaxHeight(0.6f)
  570. .setMenuList(new String[]{"添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐", "添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐"})
  571. .setOnIconChangeCallBack(new OnIconChangeCallBack<BottomMenu>(true) {
  572. @Override
  573. public int getIcon(BottomMenu bottomMenu, int index, String menuText) {
  574. switch (menuText) {
  575. case "添加":
  576. return R.mipmap.img_dialogx_demo_add;
  577. case "查看":
  578. return R.mipmap.img_dialogx_demo_view;
  579. case "编辑":
  580. return R.mipmap.img_dialogx_demo_edit;
  581. case "删除":
  582. return R.mipmap.img_dialogx_demo_delete;
  583. case "分享":
  584. return R.mipmap.img_dialogx_demo_share;
  585. case "评论":
  586. return R.mipmap.img_dialogx_demo_comment;
  587. case "下载":
  588. return R.mipmap.img_dialogx_demo_download;
  589. case "收藏":
  590. return R.mipmap.img_dialogx_demo_favorite;
  591. case "赞!":
  592. return R.mipmap.img_dialogx_demo_good;
  593. case "不喜欢":
  594. return R.mipmap.img_dialogx_demo_dislike;
  595. case "所属专辑":
  596. return R.mipmap.img_dialogx_demo_album;
  597. case "复制链接":
  598. return R.mipmap.img_dialogx_demo_link;
  599. case "类似推荐":
  600. return R.mipmap.img_dialogx_demo_recommend;
  601. }
  602. return 0;
  603. }
  604. })
  605. .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
  606. @Override
  607. public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
  608. PopTip.show(text);
  609. return false;
  610. }
  611. })
  612. .show();
  613. } else {
  614. BottomMenu.show(new String[]{"新标签页中打开", "稍后阅读", "复制链接网址"})
  615. .setMessage("http://www.kongzue.com/DialogX")
  616. .setMenuItemTextInfoInterceptor(new MenuItemTextInfoInterceptor<BottomMenu>() {
  617. @Override
  618. public TextInfo menuItemTextInfo(BottomMenu dialog, int index, String menuText) {
  619. if (index == 2) {
  620. return new TextInfo()
  621. .setFontColor(Color.RED)
  622. .setBold(true);
  623. }
  624. return null;
  625. }
  626. })
  627. .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
  628. @Override
  629. public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
  630. PopTip.show(text);
  631. return false;
  632. }
  633. });
  634. }
  635. }
  636. });
  637. btnBottomReply.setOnClickListener(new View.OnClickListener() {
  638. @Override
  639. public void onClick(View v) {
  640. BottomDialog.show(new OnBindView<BottomDialog>(rdoDark.isChecked() ? R.layout.layout_custom_reply_dark : R.layout.layout_custom_reply) {
  641. @Override
  642. public void onBind(final BottomDialog dialog, View v) {
  643. btnReplyCommit = v.findViewById(R.id.btn_reply_commit);
  644. editReplyCommit = v.findViewById(R.id.edit_reply_commit);
  645. btnReplyCommit.setOnClickListener(new View.OnClickListener() {
  646. @Override
  647. public void onClick(View v) {
  648. dialog.dismiss();
  649. PopTip.show("提交内容:\n" + editReplyCommit.getText().toString());
  650. }
  651. });
  652. editReplyCommit.postDelayed(new Runnable() {
  653. @Override
  654. public void run() {
  655. showIME(editReplyCommit);
  656. }
  657. }, 300);
  658. }
  659. }).setAllowInterceptTouch(false);
  660. }
  661. });
  662. btnCustomMessageDialog.setOnClickListener(new View.OnClickListener() {
  663. @Override
  664. public void onClick(View v) {
  665. MessageDialog.show("这里是标题", "此对话框演示的是自定义对话框内部布局的效果", "确定", "取消")
  666. .setCustomView(new OnBindView<MessageDialog>(R.layout.layout_custom_view) {
  667. @Override
  668. public void onBind(MessageDialog dialog, View v) {
  669. }
  670. });
  671. }
  672. });
  673. btnCustomInputDialog.setOnClickListener(new View.OnClickListener() {
  674. @Override
  675. public void onClick(View v) {
  676. InputDialog.show("这里是标题", "此对话框演示的是自定义对话框内部布局的效果", "确定", "取消")
  677. .setCustomView(new OnBindView<MessageDialog>(R.layout.layout_custom_view) {
  678. @Override
  679. public void onBind(MessageDialog dialog, View v) {
  680. }
  681. });
  682. }
  683. });
  684. btnCustomBottomMenu.setOnClickListener(new View.OnClickListener() {
  685. @Override
  686. public void onClick(View v) {
  687. BottomMenu.show(new String[]{"新标签页中打开", "稍后阅读", "复制链接网址"})
  688. .setMessage("http://www.kongzue.com/DialogX")
  689. .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
  690. @Override
  691. public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
  692. PopTip.show(text);
  693. return false;
  694. }
  695. })
  696. .setCustomView(new OnBindView<BottomDialog>(R.layout.layout_custom_view) {
  697. @Override
  698. public void onBind(BottomDialog dialog, View v) {
  699. }
  700. });
  701. }
  702. });
  703. btnShowBreak.setOnClickListener(new View.OnClickListener() {
  704. @Override
  705. public void onClick(View v) {
  706. jump(MainActivity.class, new JumpParameter().put("showBreak", true).put("fromActivity", getInstanceKey()));
  707. }
  708. });
  709. btnListDialog.setOnClickListener(new View.OnClickListener() {
  710. @Override
  711. public void onClick(View v) {
  712. DialogX.showDialogList(
  713. MessageDialog.build().setTitle("提示").setMessage("这是一组消息对话框队列").setOkButton("开始").setCancelButton("取消")
  714. .setCancelButton(new OnDialogButtonClickListener<MessageDialog>() {
  715. @Override
  716. public boolean onClick(MessageDialog dialog, View v) {
  717. dialog.cleanDialogList();
  718. return false;
  719. }
  720. }),
  721. PopTip.build().setMessage("每个对话框会依次显示"),
  722. PopNotification.build().setTitle("通知提示").setMessage("直到上一个对话框消失"),
  723. InputDialog.build().setTitle("请注意").setMessage("你必须使用 .build() 方法构建,并保证不要自己执行 .show() 方法").setInputText("输入文字").setOkButton("知道了"),
  724. TipDialog.build().setMessageContent("准备结束...").setTipType(WaitDialog.TYPE.SUCCESS),
  725. BottomDialog.build().setTitle("结束").setMessage("下滑以结束旅程,祝你编码愉快!").setCustomView(new OnBindView<BottomDialog>(R.layout.layout_custom_dialog) {
  726. @Override
  727. public void onBind(BottomDialog dialog, View v) {
  728. ImageView btnOk;
  729. btnOk = v.findViewById(R.id.btn_ok);
  730. btnOk.setOnClickListener(new View.OnClickListener() {
  731. @Override
  732. public void onClick(View v) {
  733. dialog.dismiss();
  734. }
  735. });
  736. }
  737. })
  738. );
  739. }
  740. });
  741. btnFullScreenDialogLogin.setOnClickListener(new View.OnClickListener() {
  742. /**
  743. * 采用异步加载布局防止卡顿测试
  744. */
  745. OnBindView<FullScreenDialog> onBindView;
  746. @Override
  747. public void onClick(View v) {
  748. onBindView = new OnBindView<FullScreenDialog>(R.layout.layout_full_login, true) {
  749. @Override
  750. public void onBind(FullScreenDialog dialog, View v) {
  751. btnCancel = v.findViewById(R.id.btn_cancel);
  752. btnSubmit = v.findViewById(R.id.btn_submit);
  753. boxUserName = v.findViewById(R.id.box_userName);
  754. editUserName = v.findViewById(R.id.edit_userName);
  755. boxPassword = v.findViewById(R.id.box_password);
  756. editPassword = v.findViewById(R.id.edit_password);
  757. btnLicense = v.findViewById(R.id.btn_license);
  758. initFullScreenLoginDemo(dialog);
  759. }
  760. };
  761. FullScreenDialog.show(onBindView);
  762. }
  763. });
  764. btnFullScreenDialogWebPage.setOnClickListener(new View.OnClickListener() {
  765. @Override
  766. public void onClick(View v) {
  767. FullScreenDialog.build(new OnBindView<FullScreenDialog>(R.layout.layout_full_webview) {
  768. @Override
  769. public void onBind(final FullScreenDialog dialog, View v) {
  770. btnClose = v.findViewById(R.id.btn_close);
  771. webView = v.findViewById(R.id.webView);
  772. btnClose.setOnClickListener(new View.OnClickListener() {
  773. @Override
  774. public void onClick(View v) {
  775. dialog.dismiss();
  776. }
  777. });
  778. WebSettings webSettings = webView.getSettings();
  779. webSettings.setJavaScriptEnabled(true);
  780. webSettings.setLoadWithOverviewMode(true);
  781. webSettings.setUseWideViewPort(true);
  782. webSettings.setSupportZoom(false);
  783. webSettings.setAllowFileAccess(true);
  784. webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
  785. webSettings.setLoadsImagesAutomatically(true);
  786. webSettings.setDefaultTextEncodingName("utf-8");
  787. webView.setWebViewClient(new WebViewClient() {
  788. @Override
  789. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  790. try {
  791. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
  792. startActivity(intent);
  793. } catch (ActivityNotFoundException e) {
  794. e.printStackTrace();
  795. }
  796. return true;
  797. }
  798. @Override
  799. public void onPageFinished(WebView view, String url) {
  800. super.onPageFinished(view, url);
  801. }
  802. });
  803. webView.loadUrl("https://github.com/kongzue/DialogX");
  804. }
  805. })
  806. .show();
  807. }
  808. });
  809. btnCustomDialog.setOnClickListener(new View.OnClickListener() {
  810. @Override
  811. public void onClick(View v) {
  812. CustomDialog.show(new OnBindView<CustomDialog>(R.layout.layout_custom_dialog) {
  813. @Override
  814. public void onBind(final CustomDialog dialog, View v) {
  815. ImageView btnOk;
  816. btnOk = v.findViewById(R.id.btn_ok);
  817. btnOk.setOnClickListener(new View.OnClickListener() {
  818. @Override
  819. public void onClick(View v) {
  820. dialog.dismiss();
  821. }
  822. });
  823. }
  824. })
  825. .setMaskColor(getResources().getColor(R.color.black30));
  826. }
  827. });
  828. btnCustomDialogAlign.setOnClickListener(new View.OnClickListener() {
  829. @Override
  830. public void onClick(View v) {
  831. CustomDialog.show(new OnBindView<CustomDialog>(R.layout.layout_custom_dialog_align) {
  832. private TextView btnSelectPositive;
  833. @Override
  834. public void onBind(final CustomDialog dialog, View v) {
  835. btnSelectPositive = v.findViewById(R.id.btn_selectPositive);
  836. btnSelectPositive.setOnClickListener(new View.OnClickListener() {
  837. @Override
  838. public void onClick(View v) {
  839. PopTip.show("我知道了");
  840. dialog.dismiss();
  841. }
  842. });
  843. }
  844. })
  845. .setCancelable(false)
  846. .setMaskColor(getResources().getColor(R.color.black30))
  847. .setEnterAnimResId(R.anim.anim_custom_pop_enter)
  848. .setExitAnimResId(R.anim.anim_custom_pop_exit)
  849. .setAlignBaseViewGravity(btnCustomDialogAlign, Gravity.TOP)
  850. .setBaseViewMarginBottom(-dip2px(45))
  851. .show();
  852. }
  853. });
  854. btnPoptip.setOnClickListener(new View.OnClickListener() {
  855. @Override
  856. public void onClick(View v) {
  857. PopTip.show("这是一个提示");
  858. }
  859. });
  860. btnPoptipBigMessage.setOnClickListener(new View.OnClickListener() {
  861. @Override
  862. public void onClick(View v) {
  863. if (rdoIos.isChecked()) {
  864. PopTip.show(R.mipmap.img_air_pods_pro, "AirPods Pro 已连接").setTintIcon(false).showLong();
  865. } else {
  866. PopTip.show(R.mipmap.img_mail_line_white, "邮件已发送", "撤回").setButton(new OnDialogButtonClickListener<PopTip>() {
  867. @Override
  868. public boolean onClick(PopTip popTip, View v) {
  869. //点击“撤回”按钮回调
  870. toast("邮件已撤回");
  871. return false;
  872. }
  873. }).setTintIcon(true).showLong();
  874. }
  875. }
  876. });
  877. btnPoptipSuccess.setOnClickListener(new View.OnClickListener() {
  878. @Override
  879. public void onClick(View v) {
  880. PopTip.show("操作已完成").iconSuccess();
  881. }
  882. });
  883. btnPoptipWarning.setOnClickListener(new View.OnClickListener() {
  884. @Override
  885. public void onClick(View v) {
  886. PopTip.show("存储空间不足").setButton("立即清理", new OnDialogButtonClickListener<PopTip>() {
  887. @Override
  888. public boolean onClick(PopTip baseDialog, View v) {
  889. return false;
  890. }
  891. }).iconWarning();
  892. }
  893. });
  894. btnPoptipError.setOnClickListener(new View.OnClickListener() {
  895. @Override
  896. public void onClick(View v) {
  897. PopTip.show("无法连接网络").iconError();
  898. }
  899. });
  900. btnBottomSelectMenu.setOnClickListener(new View.OnClickListener() {
  901. @Override
  902. public void onClick(View v) {
  903. BottomMenu.show(singleSelectMenuText)
  904. .setMessage("这里是权限确认的文本说明,这是一个演示菜单")
  905. .setTitle("获得权限标题")
  906. .setOnMenuItemClickListener(new OnMenuItemSelectListener<BottomMenu>() {
  907. @Override
  908. public void onOneItemSelect(BottomMenu dialog, CharSequence text, int index, boolean select) {
  909. selectMenuIndex = index;
  910. }
  911. })
  912. .setCancelButton("确定", new OnDialogButtonClickListener<BottomDialog>() {
  913. @Override
  914. public boolean onClick(BottomDialog baseDialog, View v) {
  915. PopTip.show("已选择:" + singleSelectMenuText[selectMenuIndex]);
  916. return false;
  917. }
  918. })
  919. .setSelection(selectMenuIndex);
  920. }
  921. });
  922. btnBottomMultiSelectMenu.setOnClickListener(new View.OnClickListener() {
  923. @Override
  924. public void onClick(View v) {
  925. BottomMenu.show(multiSelectMenuText)
  926. .setMessage("这里是权限确认的文本说明,这是一个演示菜单")
  927. .setTitle("获得权限标题")
  928. .setOnMenuItemClickListener(new OnMenuItemSelectListener<BottomMenu>() {
  929. @Override
  930. public void onMultiItemSelect(BottomMenu dialog, CharSequence[] text, int[] index) {
  931. multiSelectMenuResultCache = "";
  932. for (CharSequence c : text) {
  933. multiSelectMenuResultCache = multiSelectMenuResultCache + " " + c;
  934. }
  935. selectMenuIndexArray = index;
  936. }
  937. })
  938. .setCancelButton("确定", new OnDialogButtonClickListener<BottomDialog>() {
  939. @Override
  940. public boolean onClick(BottomDialog baseDialog, View v) {
  941. PopTip.show("已选择:" + multiSelectMenuResultCache);
  942. return false;
  943. }
  944. })
  945. .setSelection(selectMenuIndexArray);
  946. }
  947. });
  948. btnBottomCustomRecycleView.setOnClickListener(new View.OnClickListener() {
  949. @Override
  950. public void onClick(View v) {
  951. BottomDialog.build()
  952. .setCustomView(new OnBindView<BottomDialog>(R.layout.layout_custom_recycleview) {
  953. @Override
  954. public void onBind(BottomDialog dialog, View v) {
  955. List<CustomRecycleViewAdapter.Data> fruitList = new ArrayList<>();
  956. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 1"));
  957. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 2"));
  958. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 3"));
  959. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 4"));
  960. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 5"));
  961. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 6"));
  962. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 7"));
  963. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 8"));
  964. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 9"));
  965. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 10"));
  966. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 11"));
  967. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 12"));
  968. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 13"));
  969. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 14"));
  970. RecyclerView recyclerView = (RecyclerView) v;
  971. LinearLayoutManager layoutManager = new LinearLayoutManager(me);
  972. recyclerView.setLayoutManager(layoutManager);
  973. CustomRecycleViewAdapter adapter = new CustomRecycleViewAdapter(fruitList);
  974. recyclerView.setAdapter(adapter);
  975. }
  976. })
  977. .show();
  978. }
  979. });
  980. btnPopnotification.setOnClickListener(new View.OnClickListener() {
  981. @Override
  982. public void onClick(View v) {
  983. notificationIndex++;
  984. PopNotification.show("这是一条消息 " + notificationIndex).showLong();
  985. }
  986. });
  987. btnPopnotificationBigMessage.setOnClickListener(new View.OnClickListener() {
  988. @Override
  989. public void onClick(View v) {
  990. Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.img_demo_avatar);
  991. notificationIndex++;
  992. PopNotification.show("这是一条消息 " + notificationIndex, "吃了没?\uD83E\uDD6A")
  993. .setIcon(icon)
  994. .setButton("回复", new OnDialogButtonClickListener<PopNotification>() {
  995. @Override
  996. public boolean onClick(PopNotification baseDialog, View v) {
  997. PopTip.show("点击回复按钮");
  998. return false;
  999. }
  1000. })
  1001. .showLong();
  1002. }
  1003. });
  1004. btnPopnotificationOverlay.setOnClickListener(new View.OnClickListener() {
  1005. @Override
  1006. public void onClick(View v) {
  1007. DialogX.globalHoverWindow = true;
  1008. //悬浮窗权限检查
  1009. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  1010. if (!Settings.canDrawOverlays(me)) {
  1011. Toast.makeText(me, "使用 DialogX.globalHoverWindow 必须开启悬浮窗权限", Toast.LENGTH_LONG).show();
  1012. Intent intent = new Intent();
  1013. intent.setAction(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
  1014. startActivity(intent);
  1015. return;
  1016. }
  1017. }
  1018. Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.img_demo_avatar);
  1019. notificationIndex++;
  1020. Toast.makeText(me, "会在1秒后显示悬浮窗!", Toast.LENGTH_LONG).show();
  1021. //跳转到桌面
  1022. Intent intent = new Intent(Intent.ACTION_MAIN);
  1023. intent.addCategory(Intent.CATEGORY_HOME);
  1024. intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
  1025. startActivity(intent);
  1026. //等待一秒后显示
  1027. new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
  1028. @Override
  1029. public void run() {
  1030. PopNotification.build()
  1031. .setDialogImplMode(DialogX.IMPL_MODE.WINDOW)
  1032. .setTitle("这是一条消息 " + notificationIndex)
  1033. .setIcon(icon)
  1034. .setButton("回复", new OnDialogButtonClickListener<PopNotification>() {
  1035. @Override
  1036. public boolean onClick(PopNotification baseDialog, View v) {
  1037. Intent intent = new Intent(me, MainActivity.class);
  1038. intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
  1039. startActivity(intent);
  1040. return false;
  1041. }
  1042. })
  1043. .showLong();
  1044. }
  1045. }, 1000);
  1046. }
  1047. });
  1048. }
  1049. int notificationIndex;
  1050. private void initFullScreenLoginDemo(final FullScreenDialog fullScreenDialog) {
  1051. btnCancel.setOnClickListener(new View.OnClickListener() {
  1052. @Override
  1053. public void onClick(View v) {
  1054. fullScreenDialog.dismiss();
  1055. }
  1056. });
  1057. btnCancel.setText("取消");
  1058. btnSubmit.setText("下一步");
  1059. btnLicense.setOnClickListener(new View.OnClickListener() {
  1060. @Override
  1061. public void onClick(View v) {
  1062. PopTip.show("点击用户服务条款");
  1063. }
  1064. });
  1065. btnSubmit.setOnClickListener(new View.OnClickListener() {
  1066. @Override
  1067. public void onClick(View v) {
  1068. if (isNull(editUserName.getText().toString().trim())) {
  1069. hideIME(null);
  1070. TipDialog.show("请输入账号", TipDialog.TYPE.WARNING);
  1071. return;
  1072. }
  1073. boxUserName.animate().x(-getDisplayWidth()).setDuration(300);
  1074. boxPassword.setX(getDisplayWidth());
  1075. boxPassword.setVisibility(View.VISIBLE);
  1076. boxPassword.animate().x(0).setDuration(300);
  1077. editPassword.setFocusable(true);
  1078. editPassword.requestFocus();
  1079. btnCancel.setText("上一步");
  1080. btnCancel.setOnClickListener(new View.OnClickListener() {
  1081. @Override
  1082. public void onClick(View v) {
  1083. boxUserName.animate().x(0).setDuration(300);
  1084. boxPassword.animate().x(getDisplayWidth()).setDuration(300);
  1085. editUserName.setFocusable(true);
  1086. editUserName.requestFocus();
  1087. initFullScreenLoginDemo(fullScreenDialog);
  1088. }
  1089. });
  1090. btnSubmit.setText("登录");
  1091. btnSubmit.setOnClickListener(new View.OnClickListener() {
  1092. @Override
  1093. public void onClick(View v) {
  1094. hideIME(null);
  1095. if (isNull(editPassword.getText().toString().trim())) {
  1096. TipDialog.show("请输入密码", TipDialog.TYPE.WARNING);
  1097. return;
  1098. }
  1099. WaitDialog.show("登录中...");
  1100. runOnMainDelayed(new Runnable() {
  1101. @Override
  1102. public void run() {
  1103. TipDialog.show("登录成功", TipDialog.TYPE.SUCCESS).setDialogLifecycleCallback(new DialogLifecycleCallback<WaitDialog>() {
  1104. @Override
  1105. public void onDismiss(WaitDialog dialog) {
  1106. fullScreenDialog.dismiss();
  1107. }
  1108. });
  1109. }
  1110. }, 2000);
  1111. }
  1112. });
  1113. }
  1114. });
  1115. }
  1116. @Override
  1117. public void onBackPressed() {
  1118. log("#MainActivity.onBackPressed");
  1119. super.onBackPressed();
  1120. }
  1121. public void showIME(EditText editText) {
  1122. if (editText == null) {
  1123. return;
  1124. }
  1125. editText.requestFocus();
  1126. editText.setFocusableInTouchMode(true);
  1127. InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
  1128. imm.showSoftInput(editText, InputMethodManager.RESULT_UNCHANGED_SHOWN);
  1129. }
  1130. @Override
  1131. public void onConfigurationChanged(@NonNull Configuration newConfig) {
  1132. super.onConfigurationChanged(newConfig);
  1133. refreshUIMode();
  1134. }
  1135. /**
  1136. * 刷新亮暗色模式界面变化
  1137. */
  1138. private void refreshUIMode() {
  1139. if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO) {
  1140. setDarkStatusBarTheme(true);
  1141. } else {
  1142. setDarkStatusBarTheme(false);
  1143. }
  1144. }
  1145. }