am_dot_com

DDM 2022-11-23

Nov 23rd, 2022 (edited)
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.41 KB | None | 0 0
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- nav_menu.xml -->
  3. <menu
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. xmlns:app="http://schemas.android.com/apk/res-auto">
  6. <item
  7. app:showAsAction="always"
  8. android:title="menu"
  9. >
  10. <menu>
  11. <item
  12. android:icon="@drawable/ic_baseline_file_download_off_24"
  13. android:id="@+id/idMenuItemLoad"
  14. android:title="@string/strMenuItemLoad"/>
  15. <item
  16. android:icon="@drawable/ic_baseline_save_24"
  17. android:id="@+id/idMenuItemSave"
  18. android:title="@string/strMenuItemSave"/>
  19. <item
  20. android:id="@+id/idMenuItemGoSettings"
  21. android:title="@string/strMenuItemGoSettings"
  22. />
  23.  
  24. <item
  25. android:id="@+id/idMenuItemQuitApp"
  26. android:title="@string/strMenuItemQuitApp"
  27. />
  28.  
  29. <item
  30. android:icon="@drawable/ic_baseline_clear_24"
  31. android:id="@+id/idMenuItemClear"
  32. android:title="@string/strMenuItemClear"/>
  33. </menu>
  34. </item>
  35. </menu>
  36. *****************************************************
  37. //PassGen.java
  38. package com.joythis.android.passwordsgenerator;
  39.  
  40. import androidx.annotation.NonNull;
  41. import androidx.appcompat.app.AppCompatActivity;
  42.  
  43. import android.app.Activity;
  44. import android.content.Context;
  45. import android.content.Intent;
  46. import android.content.SharedPreferences;
  47. import android.os.Bundle;
  48. import android.view.Menu;
  49. import android.view.MenuInflater;
  50. import android.view.MenuItem;
  51. import android.view.View;
  52. import android.widget.ArrayAdapter;
  53. import android.widget.Button;
  54. import android.widget.ListView;
  55. import android.widget.TextView;
  56. import android.widget.Toast;
  57.  
  58. import java.util.ArrayList;
  59. import java.util.HashSet;
  60. import java.util.Set;
  61.  
  62. public class PassGen extends AppCompatActivity {
  63.  
  64. public final static String PASSWORDS_DB = "PWDS.DB";
  65.  
  66. public final static String SETTINGS_DB = "SETTINGS.DB";
  67. public final static String KEY_BCL = "KEY_BCL";
  68. public final static String KEY_BSL = "KEY_BSL";
  69. public final static String KEY_BDigits = "KEY_BD";
  70. public final static String KEY_SS = "KEY_SS";
  71. public final static String KEY_SIZE = "KEY_SIZE";
  72.  
  73. public final static int DEFAULT_SIZE = 16;
  74. public final static boolean DEFAULT_BCL = true;
  75. public final static boolean DEFAULT_BSL = true;
  76. public final static boolean DEFAULT_BDigits = true;
  77. //public final static String DEFAULT_SS = "???";
  78.  
  79. Context mContext;
  80. Activity mSelfActivity;
  81. SharedPreferences mSp;
  82.  
  83. TextView mTvCurrentSettings;
  84.  
  85. Button mBtnGenPass;
  86. ListView mLvPasswords; //visualização
  87. ArrayAdapter<String> mAd; //intermediação
  88. ArrayList<String> mPwds; //dados
  89.  
  90. View.OnClickListener mClickHandler =
  91. new View.OnClickListener() {
  92. @Override
  93. public void onClick(View v) {
  94. String p =
  95. AmRandomTools.randomPassword(
  96. miSize,
  97. mbCL,
  98. mbSL,
  99. mbDigits,
  100. mSpecialSymbols
  101. );
  102. if(p.length()>0) {
  103. mPwds.add(0, p);
  104. mAd.notifyDataSetChanged();
  105. }
  106. else{
  107. Toast t = Toast.makeText(
  108. mSelfActivity,
  109. "Must accept at least 1 type of symbols.",
  110. Toast.LENGTH_LONG
  111. );
  112. t.show();
  113. }
  114. }//onClick
  115. };//OnClickListener
  116.  
  117. @Override
  118. protected void onCreate(Bundle savedInstanceState) {
  119. super.onCreate(savedInstanceState);
  120. //setContentView(R.layout.activity_pass_gen);
  121. setContentView(R.layout.rl_pass_gen_v1);
  122.  
  123. init();
  124. }//onCreate
  125.  
  126. void init(){
  127. //1 - assocs
  128. mSelfActivity = this;
  129. mContext = this;
  130. mTvCurrentSettings = findViewById(R.id.idTvCurrentSettings);
  131.  
  132. mSp = this.getSharedPreferences(
  133. SETTINGS_DB,
  134. MODE_PRIVATE
  135. );
  136.  
  137. mSpPwds = this.getSharedPreferences(
  138. PASSWORDS_DB,
  139. MODE_PRIVATE
  140. );
  141.  
  142.  
  143. mBtnGenPass = findViewById(
  144. R.id.idBtnGenPass
  145. );
  146. mLvPasswords = findViewById(
  147. R.id.idLvPasswords
  148. );
  149.  
  150. //2 behaviors
  151. if(mBtnGenPass!=null)
  152. mBtnGenPass.setOnClickListener
  153. (mClickHandler);
  154.  
  155. if(mLvPasswords!=null){
  156. mPwds = new ArrayList<String>();
  157. mAd = new ArrayAdapter<String>(
  158. mContext,
  159. android.R.layout.simple_list_item_1,
  160. mPwds
  161. );
  162. mLvPasswords.setAdapter(mAd);
  163. }
  164.  
  165. //3
  166. loadSettingsFromSP();
  167. }//init
  168.  
  169. int miSize;
  170. boolean mbCL, mbSL, mbDigits;
  171. String mSpecialSymbols;
  172. public void loadSettingsFromSP(){
  173. if (mSp!=null){
  174. // leitura
  175. miSize = mSp.getInt(KEY_SIZE, DEFAULT_SIZE);
  176. mbCL = mSp.getBoolean(KEY_BCL, DEFAULT_BCL);
  177. mbSL = mSp.getBoolean(KEY_BSL, DEFAULT_BSL);
  178. mbDigits = mSp.getBoolean(KEY_BDigits, DEFAULT_BDigits);
  179. mSpecialSymbols = mSp.getString(KEY_SS, getString(R.string.strSSDefault));
  180.  
  181. String strDashboard =
  182. String.format(
  183. "size:%d CL:%s SL:%s D:%s SS:%s",
  184. miSize,
  185. mbCL ? "YES" : "NO",
  186. mbSL ? "YES" : "NO",
  187. mbDigits ? "YES" : "NO",
  188. mSpecialSymbols
  189. );
  190. mTvCurrentSettings.setText(strDashboard);
  191. }
  192. }//loadSettingsFromSP
  193.  
  194. @Override
  195. public boolean onCreateOptionsMenu(Menu pMenu) {
  196. MenuInflater minf = this.getMenuInflater();
  197.  
  198. minf.inflate(
  199. R.menu.nav_menu,
  200. pMenu
  201. );
  202.  
  203. return super.onCreateOptionsMenu(pMenu);
  204. }//onCreateOptionsMenu
  205.  
  206. // menu items' behavior
  207. @Override
  208. public boolean onOptionsItemSelected(@NonNull MenuItem item) {
  209. switch(item.getItemId()){
  210. case R.id.idMenuItemLoad:
  211. actionLoad();
  212. break;
  213. case R.id.idMenuItemSave:
  214. actionSave();
  215. break;
  216. case R.id.idMenuItemClear:
  217. actionClear();
  218. break;
  219.  
  220. case R.id.idMenuItemGoSettings:
  221. actionGoSettings();
  222. break;
  223. case R.id.idMenuItemQuitApp:
  224. actionQuitApp();
  225. break;
  226. }//switch
  227.  
  228. return super.onOptionsItemSelected(item);
  229. }//onOptionsItemSelected
  230.  
  231. void actionGoSettings(){
  232. Intent goSettings = new Intent(
  233. PassGen.this,
  234. PassSettings.class
  235. );
  236. if(goSettings!=null){
  237. startActivity(goSettings);
  238. }//if
  239. }//actionGoSettings
  240.  
  241. void actionQuitApp(){
  242. Intent quit = new Intent(Intent.ACTION_MAIN);
  243. if (quit!=null){
  244. quit.addCategory(Intent.CATEGORY_HOME);
  245. quit.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  246. startActivity(quit);
  247. this.finish();
  248. }
  249. }//actionQuitApp
  250.  
  251. /*
  252. MANUTENÇÃO DE ESTADO
  253. */
  254.  
  255. /*
  256. O que não quisermos perder
  257. da visualização na interface
  258. deve ser preservado agora
  259. */
  260. public final static String KEY_PWDS = "KEY_PWDS";
  261. @Override
  262. protected void onSaveInstanceState(@NonNull Bundle outState) {
  263. // escrever na Bundle, em chave adequada
  264. // a lista das passwords
  265. if(outState!=null) {
  266. outState.putStringArrayList(
  267. KEY_PWDS,
  268. mPwds
  269. );
  270. }//if
  271. super.onSaveInstanceState(outState);
  272. }//onSaveInstanceState
  273.  
  274. SharedPreferences mSpPwds;
  275.  
  276. int limparTodasAsPasswordsEmSP(){
  277. SharedPreferences.Editor ed = mSpPwds.edit();
  278. if(ed!=null){
  279. int iQuantasDestruidas = mPwds.size();
  280. mPwds.clear(); //limpa em RAM
  281. Set<String> vazio = new HashSet<>();
  282. ed.putStringSet(KEY_PWDS, vazio); //limpa em memória não-volátil
  283. ed.commit();
  284. mAd.notifyDataSetChanged();
  285. return iQuantasDestruidas;
  286. }
  287. return 0;
  288. }//limparTodasAsPasswordsEmSP
  289.  
  290. int gravarTodasAsPasswordsEmSP(){
  291. SharedPreferences.Editor ed = mSpPwds.edit();
  292. if (ed!=null){
  293. Set<String> stringSetPwds =
  294. new HashSet<>();
  295. stringSetPwds.addAll(mPwds);
  296. ed.putStringSet(
  297. KEY_PWDS,
  298. stringSetPwds
  299. );
  300. ed.commit();
  301. return stringSetPwds.size(); //2022-11-23
  302. }//if ok SharedPreferences
  303. return 0;
  304. }//gravarTodasAsPasswordsEmSP
  305.  
  306. int recuperarTodasAsPasswordsDeSP(){
  307. if(mSpPwds!=null){
  308. Set<String> stringSetPwds =
  309. mSpPwds.getStringSet(KEY_PWDS, null);
  310. mPwds.clear();
  311. mPwds.addAll(stringSetPwds);
  312. mAd.notifyDataSetChanged();
  313. return stringSetPwds.size();
  314. }
  315. return 0;
  316. }//recuperarTodasAsPasswordsDeSP
  317.  
  318. /*
  319. automaticamente chamado para recuperar
  320. dados preservados pelo sistema nalguma Bundle
  321. */
  322. @Override
  323. protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
  324. if(savedInstanceState!=null){
  325. boolean bKeyPwdsExists =
  326. savedInstanceState.containsKey(KEY_PWDS);
  327. if(bKeyPwdsExists){
  328. ArrayList<String> al =
  329. savedInstanceState.getStringArrayList(
  330. KEY_PWDS
  331. );
  332. //mPwds = al;
  333. if(al!=null && al.size()>0){
  334. mPwds.clear();
  335. mPwds.addAll(al);
  336. /*
  337. for(String p : al){
  338. mPwds.add(p);
  339. }
  340. */
  341. }
  342. mAd.notifyDataSetChanged();
  343. }//if
  344. }
  345. super.onRestoreInstanceState(savedInstanceState);
  346. }
  347.  
  348. void actionLoad(){
  349. int iQuantas = recuperarTodasAsPasswordsDeSP();
  350. String strMsg = String.format(
  351. "%d password(s) loaded",
  352. iQuantas
  353. );
  354. Toast t = Toast.makeText(
  355. this,
  356. strMsg,
  357. Toast.LENGTH_LONG
  358. );
  359. t.show();
  360. }//actionLoad
  361.  
  362. void actionSave(){
  363. int iQuantas = gravarTodasAsPasswordsEmSP();
  364. String strMsg = String.format(
  365. "%d passwords saved",
  366. iQuantas
  367. );
  368. Toast t = Toast.makeText(
  369. this,
  370. strMsg,
  371. Toast.LENGTH_LONG
  372. );
  373. t.show();
  374. }//actionSave
  375.  
  376. void actionClear(){
  377. int iQuantas = limparTodasAsPasswordsEmSP();
  378. String strMsg = String.format(
  379. "%d passwords cleared.",
  380. iQuantas
  381. );
  382. Toast t = Toast.makeText(
  383. this,
  384. strMsg,
  385. Toast.LENGTH_LONG
  386. );
  387. t.show();
  388. }//actionClear
  389. }//PassGen
  390.  
Advertisement
Add Comment
Please, Sign In to add comment