kmmkの雑種系日記

学習まとめです。

kotlinでPassword生成アプリ作成してみる

はじめに

パスワードを毎回考えるのが面倒だったので、簡易なアプリを作成しました。 サービス名とパスワードを紐づけることができます。

f:id:makoo5:20190724164859p:plain

後々、sqliteなどでローカルに保存できるように適応させていく予定です!

コード

めちゃ未熟ですが、よくなる方法。悪い点などがあればご指摘いただければ幸いです!

github.com

MainActivity.kt

class MainActivity : AppCompatActivity(){

    val UpcaseList = "ABCDEFGHIJKLMNOPQRSTUVWYZ"
    val DowncaseList = "abcdefghijklmnopqrstuvwyz"
    val NumberList = "0123456789"

    var passwordList = ""
    var password = ""



    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val serviceEdit:EditText = findViewById(R.id.serviceEdit)
        val UpcaseCheckBox:CheckBox = findViewById(R.id.UpcaseCheckBox)
        val DowncaseCheckBox:CheckBox = findViewById(R.id.DowncaseCheckBox)
        val numberCheckBox:CheckBox = findViewById(R.id.NumberCheckBox)
        val generateButton:Button = findViewById(R.id.generateButton)

        generateButton.setOnClickListener {

            if(serviceEdit.text.toString() == ""){
                serviceEdit.error = "サービス名を入力してください"
            }else{
                VerifyCheckbox(UpcaseCheckBox, DowncaseCheckBox, NumberCheckBox)
                createPassword()

                Log.d("xdfghjkl",password)

                val intent = Intent(this,ShowPasswordActivity::class.java)
                intent.putExtra("PASSWORD",password)
                intent.putExtra("SERVICE",serviceEdit.text.toString())
                startActivity(intent)
            }
        }
    }

    //Checkboxの状態確認
    fun VerifyCheckbox(UpcaseCheckBox:CheckBox,DowncaseCheckBox:CheckBox,NumberCheckBox:CheckBox){

        initPass()

        if(UpcaseCheckBox.isChecked == true) {
            passwordList += UpcaseList
        }
        if(DowncaseCheckBox.isChecked == true){
            passwordList += DowncaseList
        }
        if(NumberCheckBox.isChecked == true){
            passwordList += NumberList
        }

    }

    //ボタン押下時のCheckBoxの初期化
    fun initPass(){
        password = ""
        passwordList = ""
    }


    fun createPassword(){

        //8文字パスワードの生成
        for(i in 0..8){
            var randomIndex = Random.nextInt(passwordList.length)
            password += passwordList[randomIndex]
        }

    }

}

気にした点

  1. いいコードがわからないですが、oncreate内がごちゃごちゃになりすぎるのはダメかな?と思って、出来るだけメソッドとして切り出してみました。

詰まった点

xmlファイルとActivityクラスを別々に作成したので、追加で保存したクラスをManifestファイルに書き忘れて、intentで遷移できんなかった。。

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        //ここから追記
        <activity android:name=".ShowPasswordActivity">
        </activity>
  //ここまで

    </application>

まだ、単純なものしか作れないのでもっと作っていく!