【Android】初心者がJavaでタイマーアプリを作ってみた

ゴールデンウィークで暇な時間ができたので、JavaとAndroidについて勉強してアプリを作ってみました。
作ったのはタイマーアプリです。すごい簡単なものですが、JavaとAndroidを１から勉強したのでなかなか大変でした。
自分で入力した時間をカウントしてくれるというものですが、秒数でしか指定できません。
微妙な出来ですがとりあえず備忘録としておきます。

- 仕様
 - 時間を自分で設定できる
 - STARTボタンでカウント開始
 - STOPボタンでカウントストップ
 - カウント終了をバイブレーションで通知

- 環境
 - windows10
 - androidstudio3.6.3
 - Java8

- ファイル
 - MainActivity.java
 - activity_main.xml
 
以下、コードです。

```java:MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Vibrator;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final String START_MESSAGE = "START";
        final String STOP_MESSAGE = "STOP";
        final String FINISH_MESSAGE = "カウント終了";
        Button StartButton = findViewById(R.id.StartButton);
        Button StopButton = findViewById(R.id.StopButton);
        final EditText editTime = findViewById(R.id.editTime);
        final CountDownTimer[] cdt = new CountDownTimer[1];

        // スタートボタンイベントリスナー
        StartButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // スタートトースト
                Toast toast = Toast.makeText(MainActivity.this, START_MESSAGE, Toast.LENGTH_SHORT);
                toast.show();

                // 入力時間取得
                int inputTime = Integer.parseInt(String.valueOf(editTime.getText()));

                // カウントダウンタイマー
                cdt[0] = new CountDownTimer( inputTime*1000, 1000) {
                    @Override
                    public void onTick(long millisUntilFinished) {
                        editTime.setText(Long.toString(millisUntilFinished/1000));
                    }

                    @Override
                    public void onFinish() {

                        //バイブレーション
                        Vibrator v = (Vibrator) getSystemService(VIBRATOR_SERVICE);
                        v.vibrate(new long[]{1000, 1000, 1000, 1000, 1000, 1000}, -1);

                        // 終了トースト
                        Toast toast = Toast.makeText(MainActivity.this, finish_message, Toast.LENGTH_SHORT);
                        toast.show();

                        // カウントを0に設定
                        editTime.setText("0");
                    }
                }.start();
            }
        });

        // ストップボタンイベントリスナー
        StopButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // ストップトースト
                Toast toast = Toast.makeText(MainActivity.this, STOP_MESSAGE, Toast.LENGTH_SHORT);
                toast.show();

                // カウントダウンタイマー停止
                cdt[0].cancel();
            }
        });
    }
}
```

```xml:activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/editTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:ems="10"
        android:gravity="center"
        android:hint="タイマーセット"
        android:inputType="time"
        android:textSize="30sp" />

    <Button
        android:id="@+id/StartButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="START" />

    <Button
        android:id="@+id/StopButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="STOP" />

</LinearLayout>
```