am_dot_com

DDM 20211109

Nov 9th, 2021 (edited)
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.10 KB | None | 0 0
  1. package com.joythis.android.passwordgenerator;
  2.  
  3. import androidx.annotation.NonNull;
  4. import androidx.appcompat.app.AppCompatActivity;
  5.  
  6. import android.content.Context;
  7. import android.os.Bundle;
  8. import android.util.Log;
  9. import android.view.Menu;
  10. import android.view.MenuInflater;
  11. import android.view.MenuItem;
  12. import android.view.View;
  13. import android.widget.ArrayAdapter;
  14. import android.widget.Button;
  15. import android.widget.CheckBox;
  16. import android.widget.EditText;
  17. import android.widget.ListView;
  18. import android.widget.SeekBar;
  19.  
  20. import java.io.File;
  21. import java.io.FileInputStream;
  22. import java.io.FileOutputStream;
  23. import java.io.InputStreamReader;
  24. import java.io.OutputStreamWriter;
  25. import java.nio.charset.StandardCharsets;
  26. import java.util.ArrayList;
  27.  
  28. public class MainActivity extends AppCompatActivity {
  29.     //data members
  30.     CheckBox mCbAZ, mCbaz, mCbDigits;
  31.     EditText mEtSS; //for the Special Symbols
  32.     SeekBar mSbLength; //for the password length / size
  33.     Button mBtnGenPass;
  34.     ListView mLvPasswords;
  35.     ArrayList<String> mAlPasswords;
  36.     ArrayAdapter<String> mAd;
  37.  
  38.     Context mContext;
  39.     AmUtil mUtil;
  40.  
  41.     public final static String PASSWORDS_FILE = "PASS3.TXT";
  42.  
  43.     void writePasswordsToPIS(){
  44.         String strAllPasswords="";
  45.         for (String p : mAlPasswords)
  46.             strAllPasswords=p+"\n"+strAllPasswords;
  47.         this.mUtil.writeToFileInPIS(
  48.             PASSWORDS_FILE,
  49.             strAllPasswords,
  50.             MODE_PRIVATE
  51.         );
  52.     }//writePasswordsToPIS
  53.  
  54.     void readPasswordsFromPIS(){
  55.         String strPasswords =
  56.             this.mUtil.readFromFileInPIS(PASSWORDS_FILE);
  57.         if (!strPasswords.isEmpty()){
  58.             String[] ps = strPasswords.split("\n");
  59.             mAlPasswords.clear();
  60.             for (String p : ps){
  61.                 mAlPasswords.add(0, p);
  62.             }//for
  63.             mAd.notifyDataSetChanged();
  64.         }//if
  65.     }//readPasswordsFromPIS
  66.  
  67.     SeekBar.OnSeekBarChangeListener mSbHandler =
  68.         new SeekBar.OnSeekBarChangeListener() {
  69.             //auto-called whenever the progress value changes
  70.             //idea: put a new TextView in the layout to display this value
  71.             @Override
  72.             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
  73.                 //TODO
  74.             }
  75.  
  76.             //auto-called when the "progress drag" starts
  77.             @Override
  78.             public void onStartTrackingTouch(SeekBar seekBar) {
  79.             }
  80.  
  81.             //auto-called when the user frees the progress handler
  82.             @Override
  83.             public void onStopTrackingTouch(SeekBar seekBar) {
  84.                 int iProgress = mSbLength.getProgress();
  85.                 String strProgress = String.valueOf(iProgress);
  86.                 String strMsg =
  87.                     "Length "+strProgress+" picked.";
  88.                 mUtil.fb(strMsg);
  89.             }
  90.         };//mSbHandler
  91.  
  92.     View.OnClickListener mClickHandler = new View.OnClickListener() {
  93.         @Override
  94.         public void onClick(View v) {
  95.             String[] aParts={};
  96.             switch(v.getId()){
  97.                 case R.id.idBtnGenPass:
  98.                     String strUser = mEtSS.getText().toString().trim();
  99.                     if (!strUser.isEmpty()){
  100.                        aParts = strUser.split(" ");
  101.                     }//if
  102.                     String strPassword = AmUtil.genPassword(
  103.                         mSbLength.getProgress(),
  104.                         mCbaz.isChecked(),
  105.                         mCbAZ.isChecked(),
  106.                         mCbDigits.isChecked(),
  107.                         aParts
  108.                     );
  109.                     mAlPasswords.add(0, strPassword);
  110.                     mAd.notifyDataSetChanged();
  111.  
  112.                     //new pass, new write
  113.                     writePasswordsToPIS();
  114.                     break;
  115.             }//switch
  116.         }//onClick
  117.     };//mClickHandler
  118.  
  119.     @Override
  120.     protected void onCreate(Bundle savedInstanceState) {
  121.         super.onCreate(savedInstanceState);
  122.         setContentView(R.layout.rl_pass_gen_v1);
  123.  
  124.         init(savedInstanceState);
  125.     }//onCreate
  126.  
  127.     void init (Bundle pB){
  128.         //bindings
  129.         mContext = this;
  130.         //mContext = MainActivity.this;
  131.         mUtil = new AmUtil(this);
  132.  
  133.         mCbaz = findViewById(R.id.idCbaz);
  134.         mCbAZ = findViewById(R.id.idCbAZ);
  135.         mCbDigits = findViewById(R.id.idCbDigits);
  136.         mEtSS = findViewById(R.id.idEtSS);
  137.         mSbLength = findViewById(R.id.idSbLength);
  138.         mBtnGenPass = findViewById(R.id.idBtnGenPass);
  139.         mLvPasswords = findViewById(R.id.idLvPasswords);
  140.  
  141.         if (mLvPasswords!=null){
  142.             //data source + adapter
  143.             mAlPasswords = new ArrayList<>();
  144.             mAd = new ArrayAdapter<>(
  145.                 mContext,
  146.                 android.R.layout.simple_list_item_1,
  147.                 mAlPasswords
  148.             );
  149.             mLvPasswords.setAdapter(mAd);
  150.  
  151.             readPasswordsFromPIS();
  152.         }//if (ListView pattern)
  153.  
  154.         //behaviors
  155.         mBtnGenPass.setOnClickListener(mClickHandler);
  156.         //testing();
  157.         mSbLength.setOnSeekBarChangeListener(mSbHandler);
  158.  
  159.  
  160.     }//init
  161.  
  162.     void testing(){
  163.         String strTest_az = "";
  164.         String strTest_AZ = "";
  165.         String strTest_Digits = "";
  166.         String strTest_SS = "";
  167.         //" exemplo ".trim() --> "exemplo"
  168.         String strUserSS = mEtSS.getText().toString().trim();
  169.         //"A B C".split(" ") ---> ["A", "B", "C"]
  170.         String[] aUserSS = strUserSS.split(" ");
  171.         for(int idx=0; idx<30; idx++) {
  172.             strTest_az += AmUtil.random_az() + " ";
  173.             strTest_AZ += AmUtil.random_AZ() + " ";
  174.             strTest_Digits += AmUtil.random_09() + " ";
  175.             strTest_SS += AmUtil.randomSpecialSymbol(
  176.                 aUserSS
  177.             ) + " ";
  178.         }//for
  179.         mAlPasswords.add(strTest_az);
  180.         mAlPasswords.add(strTest_AZ);
  181.         mAlPasswords.add(strTest_Digits);
  182.         mAlPasswords.add(strTest_SS);
  183.  
  184.         mAd.notifyDataSetChanged();
  185.     }//testing
  186.  
  187.     /*
  188.     @Override
  189.     protected void onSaveInstanceState(
  190.         @NonNull Bundle outState
  191.     ) {
  192.         super.onSaveInstanceState(outState);
  193.  
  194.         if (outState!=null){
  195.             //ask what is to be preserved
  196.             //the passwords (the data that are to be displayed in the ListView)
  197.             //mAlPasswords //this is data member to be saved
  198.             outState.putStringArrayList(
  199.                 "passwords",
  200.                 mAlPasswords
  201.             );
  202.             outState.putInt("year", 2021);
  203.         }//if
  204.     }//onSaveInstanceState
  205.  
  206.     @Override
  207.     protected void onRestoreInstanceState(
  208.         @NonNull Bundle savedInstanceState
  209.     ){
  210.         super.onRestoreInstanceState(savedInstanceState);
  211.         if (savedInstanceState!=null){
  212.             boolean bKeyPasswordsExists =
  213.                 savedInstanceState.containsKey("passwords");
  214.             boolean bKeyYearExists =
  215.                 savedInstanceState.containsKey("year");
  216.             if (bKeyYearExists){
  217.                 int iRecoveredYear =
  218.                     savedInstanceState.getInt("year");
  219.                 //comment on release-version
  220.                 mUtil.fb("Recoved year "+
  221.                     String.valueOf(iRecoveredYear)
  222.                 );
  223.             }
  224.             if (bKeyPasswordsExists){
  225.                 ArrayList<String> alRec =
  226.                 //the reference / the address CHANGES
  227.                 //BAD IDEA => will break Adapters
  228.                 //mAlPasswords =
  229.                     savedInstanceState.getStringArrayList(
  230.                         "passwords"
  231.                     );
  232.  
  233.                 if (alRec!=null && alRec.size()>0){
  234.                     //keeping the address
  235.                     mAlPasswords.clear(); //cleans the content
  236.                     for (String s : alRec){
  237.                         mAlPasswords.add(s);
  238.                     }//for
  239.                     mAd.notifyDataSetChanged();
  240.                 }//if
  241.             }//if the necessary keys are available
  242.         }//if
  243.     }//onRestoreInstanceState
  244.  
  245.      */
  246.  
  247.     /*
  248.     #3
  249.     binds the menu resource (XML) to the Activity (Java)
  250.      */
  251.     @Override
  252.     public boolean onCreateOptionsMenu(Menu menu) {
  253.         MenuInflater minf = this.getMenuInflater();
  254.         if (minf!=null){
  255.             minf.inflate(
  256.                 R.menu.my_menu,
  257.                 menu
  258.             );
  259.         }//if
  260.  
  261.         return super.onCreateOptionsMenu(menu);
  262.     }//onCreateOptionsMenu
  263.  
  264.     //#4
  265.     @Override
  266.     public boolean onOptionsItemSelected(@NonNull MenuItem item) {
  267.         switch(item.getItemId()){
  268.             case R.id.idMiResetFile:
  269.                 this.mUtil.fb("Resetting passwords");
  270.                 boolean bOK =
  271.                     this.mUtil.resetFileInPIS(PASSWORDS_FILE);
  272.                 if (bOK){
  273.                     mAlPasswords.clear();
  274.                     mAd.notifyDataSetChanged();
  275.                 }
  276.         }//switch
  277.         return super.onOptionsItemSelected(item);
  278.     }//onOptionsItemSelected
  279. }//MainActivity
Add Comment
Please, Sign In to add comment