OSDN Git Service

b09cbaef51909c173b60f053199f7f983d90c24c
[gokigen/JoggingTimer.git] / wear / src / main / java / net / osdn / gokigen / joggingtimer / utilities / CreateModelDataDialog.java
1 package net.osdn.gokigen.joggingtimer.utilities;
2
3 import android.app.AlertDialog;
4 import android.content.DialogInterface;
5 import android.support.wearable.activity.WearableActivity;
6 import android.util.Log;
7 import android.view.ContextThemeWrapper;
8 import android.view.LayoutInflater;
9 import android.view.View;
10 import android.widget.NumberPicker;
11 import android.widget.TextView;
12
13
14 import net.osdn.gokigen.joggingtimer.R;
15
16
17 /**
18  *
19  *
20  */
21 public class CreateModelDataDialog
22 {
23     private final String TAG = toString();
24     private final WearableActivity activity;
25
26     public CreateModelDataDialog(WearableActivity activity)
27     {
28         this.activity = activity;
29     }
30
31     /**
32      *
33      * @param callback  結果をコールバック
34      */
35     public void show(final boolean isLap, String title, final int lapCount, final Callback callback, final long defaultValue)
36     {
37         Log.v(TAG, "show " + "def. : " + defaultValue);
38
39         // 確認ダイアログの生成
40         final AlertDialog.Builder alertDialog = new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.wear2_dialog_theme));
41
42         // Get the layout inflater
43         LayoutInflater inflater = activity.getLayoutInflater();
44         final View alertView = inflater.inflate(R.layout.time_model_picker, null, false);
45         alertDialog.setView(alertView);
46
47         final TextView titleText = alertView.findViewById(R.id.information_picker);
48         final TextView lapStartText = alertView.findViewById(R.id.lap_start);
49         final TextView lapEndText = alertView.findViewById(R.id.lap_end);
50         final NumberPicker lap = alertView.findViewById(R.id.number_picker_lap_count);
51         final NumberPicker hour = alertView.findViewById(R.id.number_picker_hours);
52         final NumberPicker minute = alertView.findViewById(R.id.number_picker_minutes);
53         final NumberPicker second = alertView.findViewById(R.id.number_picker_seconds);
54
55         try
56         {
57             if (title != null)
58             {
59                 titleText.setText(title);
60             }
61             if (isLap)
62             {
63                 lap.setVisibility(View.VISIBLE);
64                 lapStartText.setVisibility(View.VISIBLE);
65                 lapEndText.setVisibility(View.VISIBLE);
66                 lap.setMinValue(1);
67                 lap.setMaxValue(99);
68             }
69             else
70             {
71                 lap.setValue(lapCount);
72                 lap.setVisibility(View.GONE);
73                 lapStartText.setVisibility(View.GONE);
74                 lapEndText.setVisibility(View.GONE);
75             }
76
77             hour.setMinValue(0);
78             hour.setMaxValue(72);
79             minute.setMinValue(0);
80             minute.setMaxValue(59);
81             second.setMinValue(0);
82             second.setMaxValue(59);
83             second.setValue((int) (defaultValue / 1000) % 60);
84             minute.setValue((int) ((defaultValue / (1000 * 60)) % 60));
85             hour.setValue((int) ((defaultValue / (1000 * 60 * 60)) % 24));
86         }
87         catch (Exception e)
88         {
89             e.printStackTrace();
90         }
91
92         alertDialog.setCancelable(true);
93
94         // ボタンを設定する(実行ボタン)
95         alertDialog.setPositiveButton(activity.getString(R.string.dialog_positive_execute),
96                 new DialogInterface.OnClickListener() {
97                     public void onClick(DialogInterface dialog, int which)
98                     {
99                         try
100                         {
101                             Log.v(TAG, "ENTRY [" + lap.getValue() + "] " + hour.getValue() + ":" + minute.getValue() + ":" + second.getValue());
102                             int lapC = (isLap) ? lap.getValue() : lapCount;
103                             long newMillis = (hour.getValue() * 60 * 60 * 1000) + (minute.getValue() * 60 * 1000) + (second.getValue() * 1000);
104                             callback.dataCreated(isLap, lapC, defaultValue, newMillis);
105                         }
106                         catch (Exception e)
107                         {
108                             e.printStackTrace();
109                             callback.dataCreateCancelled();
110                         }
111                         dialog.dismiss();
112                     }
113                 });
114
115         // ボタンを設定する (キャンセルボタン)
116         alertDialog.setNegativeButton(activity.getString(R.string.dialog_negative_cancel),
117                 new DialogInterface.OnClickListener() {
118                     public void onClick(DialogInterface dialog, int which)
119                     {
120                         callback.dataCreateCancelled();
121                         dialog.cancel();
122                     }
123                 });
124
125         // 確認ダイアログを表示する
126         alertDialog.show();
127     }
128
129     // コールバックインタフェース
130     public interface Callback
131     {
132         void dataCreated(boolean isLap, int lap, long previousValue, long newValue); // OKを選択したとき
133         void dataCreateCancelled();  // キャンセルしたとき
134     }
135 }