OSDN Git Service

メイン画面の表示モード・基準値を設定するダイアログを表示するようにした。
authorMRSa <mrsa@myad.jp>
Wed, 6 Jul 2022 15:31:21 +0000 (00:31 +0900)
committerMRSa <mrsa@myad.jp>
Wed, 6 Jul 2022 15:31:21 +0000 (00:31 +0900)
17 files changed:
.idea/deploymentTargetDropDown.xml
.idea/misc.xml
wear/src/main/java/net/osdn/gokigen/joggingtimer/recorddetail/DetailActivity.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/stopwatch/ButtonClickListener.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/stopwatch/MainActivity.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/stopwatch/MyTimerCounter.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/stopwatch/WearableActivityController.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/storage/TimeEntryDatabase.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/utilities/SelectReferenceViewModeDialog.java [new file with mode: 0644]
wear/src/main/res/layout-notround/select_reference_dialog.xml [new file with mode: 0644]
wear/src/main/res/layout-round/select_reference_dialog.xml [new file with mode: 0644]
wear/src/main/res/values-ja/arrays.xml
wear/src/main/res/values-ja/strings.xml
wear/src/main/res/values-round/arrays.xml
wear/src/main/res/values-round/strings.xml
wear/src/main/res/values/arrays.xml
wear/src/main/res/values/strings.xml

index 5ee12ac..db4fa67 100644 (file)
@@ -1,17 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="deploymentTargetDropDown">
-    <runningDeviceTargetSelectedWithDropDown>
-      <Target>
-        <type value="RUNNING_DEVICE_TARGET" />
-        <deviceKey>
-          <Key>
-            <type value="VIRTUAL_DEVICE_PATH" />
-            <value value="C:\Users\MRSa\.android\avd\Android_Wear_Round_Chin_API_26.avd" />
-          </Key>
-        </deviceKey>
-      </Target>
-    </runningDeviceTargetSelectedWithDropDown>
     <targetSelectedWithDropDown>
       <Target>
         <type value="QUICK_BOOT_TARGET" />
index 1ddd44d..48f2367 100644 (file)
@@ -24,6 +24,7 @@
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-notround/column_list.xml" value="1.0904605263157894" />
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-notround/icon_list.xml" value="1.0904605263157894" />
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-notround/information_dialog.xml" value="1.0904605263157894" />
+        <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-notround/select_reference_dialog.xml" value="1.7394366197183098" />
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-notround/select_set_reference_dialog.xml" value="1.7570422535211268" />
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-notround/time_model_picker.xml" value="1.0904605263157894" />
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-round/activity_list.xml" value="0.9636627906976745" />
@@ -33,6 +34,7 @@
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-round/column_list.xml" value="0.9636627906976745" />
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-round/icon_list.xml" value="0.9636627906976745" />
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-round/information_dialog.xml" value="0.9636627906976745" />
+        <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-round/select_reference_dialog.xml" value="1.5502092050209204" />
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-round/select_set_reference_dialog.xml" value="1.5658995815899581" />
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/layout-round/time_model_picker.xml" value="0.9636627906976745" />
         <entry key="..\:/Users/MRSa/AndroidStudioProjects/JoggingTimer/wear/src/main/res/menu/selector_detail.xml" value="2.1392857142857142" />
index 14ca0e1..d9b8428 100644 (file)
@@ -300,7 +300,6 @@ public class DetailActivity extends AppCompatActivity implements RecordDetailSet
                     }
                 }
             });
-
             ret = true;
         }
         else if (itemId == R.id.menu_share_data)
index aaefec7..93f7bcb 100644 (file)
@@ -12,7 +12,7 @@ import net.osdn.gokigen.joggingtimer.R;
  *
  *
  */
-public class ButtonClickListener implements View.OnClickListener, View.OnLongClickListener, View.OnTouchListener, Parcelable
+public class  ButtonClickListener implements View.OnClickListener, View.OnLongClickListener, View.OnTouchListener, Parcelable
 {
     private final String TAG = toString();
     private IClickCallback callback = null;
index 139ae3d..dff2139 100644 (file)
@@ -1,8 +1,13 @@
 package net.osdn.gokigen.joggingtimer.stopwatch;
 
+import static net.osdn.gokigen.joggingtimer.utilities.SelectReferenceViewModeDialog.PREF_KEY_DISPLAY_LAPGRAPHIC;
+import static net.osdn.gokigen.joggingtimer.utilities.SelectReferenceViewModeDialog.PREF_KEY_REFERENCE_TIME_SELECTION;
+
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.graphics.Color;
 import android.os.Bundle;
+import android.preference.PreferenceManager;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.View;
@@ -12,12 +17,15 @@ import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import androidx.appcompat.app.AppCompatActivity;
+import androidx.fragment.app.FragmentManager;
 import androidx.wear.ambient.AmbientModeSupport;
 import androidx.wear.widget.BoxInsetLayout;
 
 import net.osdn.gokigen.joggingtimer.R;
 import net.osdn.gokigen.joggingtimer.recordlist.ListActivity;
 import net.osdn.gokigen.joggingtimer.stopwatch.graphview.LapTimeGraphView;
+import net.osdn.gokigen.joggingtimer.utilities.SelectReferenceViewModeDialog;
+import net.osdn.gokigen.joggingtimer.utilities.SetReferenceDialog;
 import net.osdn.gokigen.joggingtimer.utilities.TimeStringConvert;
 
 import java.text.SimpleDateFormat;
@@ -29,7 +37,7 @@ import java.util.Locale;
  *
  *
  */
-public class MainActivity extends AppCompatActivity implements IClickCallback, MyTimerTrigger.ITimeoutReceiver, MyTimerCounter.ICounterStatusNotify, AmbientModeSupport.AmbientCallbackProvider
+public class MainActivity extends AppCompatActivity implements IClickCallback, MyTimerTrigger.ITimeoutReceiver, MyTimerCounter.ICounterStatusNotify, AmbientModeSupport.AmbientCallbackProvider, SelectReferenceViewModeDialog.SelectReferenceCallback
 {
     private final String TAG = toString();
     private final IWearableActivityControl controller = new WearableActivityController();
@@ -38,6 +46,7 @@ public class MainActivity extends AppCompatActivity implements IClickCallback, M
     private boolean isLaptimeView = true;
     private boolean pendingStart = false;
     private int currentLapCount = 0;
+    private int currentReferenceId = 0;
     private ITimerStopTrigger stopTrigger = null;
 
     /**
@@ -98,6 +107,7 @@ public class MainActivity extends AppCompatActivity implements IClickCallback, M
             }
         }
         isLaptimeView = controller.getDisplayMode();
+        currentReferenceId = controller.getReferenceTimerSelection();
         //Log.v(TAG, "isLaptimeView " + isLaptimeView);
 
         controller.setupReferenceData();
@@ -453,11 +463,32 @@ public class MainActivity extends AppCompatActivity implements IClickCallback, M
     @Override
     public boolean pushedArea()
     {
-        isLaptimeView = !isLaptimeView;
-        controller.setDisplayMode(isLaptimeView);
-        Log.v(TAG, "pushedArea() : " + isLaptimeView);
-        changeGraphicView(isLaptimeView);
-        updateTimerLabel();
+        try
+        {
+            // 基準値の設定ダイアログを表示する
+            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+            final boolean viewMode = preferences.getBoolean(PREF_KEY_DISPLAY_LAPGRAPHIC, false);
+            final int selectionId = preferences.getInt(PREF_KEY_REFERENCE_TIME_SELECTION, 0);
+            final SelectReferenceViewModeDialog.SelectReferenceCallback callback = this;
+
+            this.runOnUiThread(() -> {
+                try
+                {
+                    // 基準値&表示モード設定ダイアログを表示する
+                    SelectReferenceViewModeDialog dialog = SelectReferenceViewModeDialog.newInstance(getString(R.string.select_reference_title), " ", viewMode, selectionId, callback);
+                    FragmentManager manager = getSupportFragmentManager();
+                    dialog.show(manager, "dialog");
+                }
+                catch (Exception e)
+                {
+                    e.printStackTrace();
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
         return (true);
     }
 
@@ -761,4 +792,28 @@ public class MainActivity extends AppCompatActivity implements IClickCallback, M
             }
         });
     }
+
+    @Override
+    public void selectedReferenceViewMode(int referenceId, int viewMode)
+    {
+        isLaptimeView = (viewMode != 0);
+        currentReferenceId = referenceId;
+
+        controller.setDisplayMode(isLaptimeView);
+        controller.setReferenceTimerSelection(currentReferenceId);
+        controller.setupReferenceData();
+
+        Log.v(TAG, "pushedArea() : " + isLaptimeView + " REF: " + currentReferenceId);
+
+        runOnUiThread(() -> {
+            // ラップタイム表示状態の更新
+            reloadLapTimeList(true);
+
+            // 表示ビューの切り替え
+            changeGraphicView(isLaptimeView);
+
+            // 表示のボタン状態を変更
+            updateTimerLabel();
+        });
+    }
 }
index 65fa850..169ddb9 100644 (file)
@@ -242,7 +242,7 @@ public class MyTimerCounter implements ITimerCounter, IDatabaseReloadCallback
                     referenceTimeA = new ArrayList<>(timelist);
                     size = referenceTimeA.size();
                 }
-                if (referenceTimeId == 1)
+                else if (referenceTimeId == 1)
                 {
                     referenceTimeB = null;
                     referenceTimeB = new ArrayList<>(timelist);
index 752d959..a918566 100644 (file)
@@ -26,6 +26,9 @@ import java.util.ArrayList;
 
 import static android.content.Context.VIBRATOR_SERVICE;
 
+import static net.osdn.gokigen.joggingtimer.utilities.SelectReferenceViewModeDialog.PREF_KEY_DISPLAY_LAPGRAPHIC;
+import static net.osdn.gokigen.joggingtimer.utilities.SelectReferenceViewModeDialog.PREF_KEY_REFERENCE_TIME_SELECTION;
+
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.core.app.ActivityCompat;
 import androidx.core.content.ContextCompat;
@@ -40,8 +43,6 @@ class WearableActivityController implements IWearableActivityControl, ITimeEntry
     private final String TAG = toString();
     private final String PREF_KEY_TIMER_STARTED = "TMR_START";
     private final String PREF_KEY_TIMER_INDEXID = "TMR_INDEX";
-    private final String PREF_KEY_DISPLAY_LAPGRAPHIC = "DISP_LAPGRPH";
-    private final String PREF_KEY_REFERENCE_TIME_SELECTION = "REF_TIME_SEL";
 
     private SharedPreferences preferences = null;
     private final ButtonClickListener clickListener = new ButtonClickListener();
index 7c935b0..e0705f7 100644 (file)
@@ -335,7 +335,8 @@ class TimeEntryDatabase implements ITimeEntryDatabase
          if (id == 0)
          {
              return (REFERENCE_ICON_ID_A);
-         } else if (id == 1)
+         }
+         else if (id == 1)
          {
              return (REFERENCE_ICON_ID_B);
          }
diff --git a/wear/src/main/java/net/osdn/gokigen/joggingtimer/utilities/SelectReferenceViewModeDialog.java b/wear/src/main/java/net/osdn/gokigen/joggingtimer/utilities/SelectReferenceViewModeDialog.java
new file mode 100644 (file)
index 0000000..48ead16
--- /dev/null
@@ -0,0 +1,175 @@
+package net.osdn.gokigen.joggingtimer.utilities;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Spinner;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.DialogFragment;
+
+import net.osdn.gokigen.joggingtimer.R;
+
+
+public class SelectReferenceViewModeDialog extends DialogFragment
+{
+    private final String TAG = toString();
+    public static final String PREF_KEY_DISPLAY_LAPGRAPHIC = "DISP_LAPGRPH";
+    public static final String PREF_KEY_REFERENCE_TIME_SELECTION = "REF_TIME_SEL";
+
+    int selectedId = 0;
+    int selectedMode = 0;
+    String title = "";
+    String message = "";
+    SelectReferenceViewModeDialog.SelectReferenceCallback callback = null;
+    Dialog myDialog = null;
+
+    public static SelectReferenceViewModeDialog newInstance(String title, String message, boolean viewMode, int referenceId, @NonNull SelectReferenceViewModeDialog.SelectReferenceCallback callback)
+    {
+        SelectReferenceViewModeDialog instance = new SelectReferenceViewModeDialog();
+        instance.prepare(callback, viewMode, referenceId, title, message);
+
+        // パラメータはBundleにまとめておく
+        Bundle arguments = new Bundle();
+        arguments.putString("title", title);
+        arguments.putString("message", message);
+        instance.setArguments(arguments);
+
+        return (instance);
+    }
+
+    /**
+     *
+     *
+     */
+    private void prepare(SelectReferenceViewModeDialog.SelectReferenceCallback callback, boolean viewMode, int referenceId, String title, String message)
+    {
+        this.callback = callback;
+        this.title = title;
+        this.message = message;
+        selectedMode = (viewMode) ? 1 : 0;
+        selectedId = referenceId;
+    }
+
+    /**
+     *
+     *
+     */
+    @Override
+    public @NonNull Dialog onCreateDialog(Bundle savedInstanceState)
+    {
+        String title = this.title;
+        String message = this.message;
+        if (savedInstanceState != null)
+        {
+            title = savedInstanceState.getString("title");
+            message = savedInstanceState.getString("message");
+        }
+        Activity activity = getActivity();
+        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity);
+        LayoutInflater inflater = activity.getLayoutInflater();
+        final View alertView = inflater.inflate(R.layout.select_reference_dialog, null, false);
+        alertDialog.setView(alertView);
+
+
+        final String[] viewObjects = activity.getResources().getStringArray(R.array.show_laptime_array);
+        final Spinner spinner0 = alertView.findViewById(R.id.show_laptime_mode);
+        ArrayAdapter<String> arrayAdapter0 = new ArrayAdapter<>(activity, android.R.layout.simple_list_item_1, viewObjects);
+        // selectedMode = 0;
+        try
+        {
+            spinner0.setAdapter(arrayAdapter0);
+            spinner0.setSelection(selectedMode);
+            spinner0.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+                @Override
+                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+                    Log.v(TAG, "onItemSelected : " + position + " (" + id + ")");
+                    selectedMode = position;
+                }
+
+                @Override
+                public void onNothingSelected(AdapterView<?> parent) {
+                    Log.v(TAG, "onNothingSelected");
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+
+        final String[] objects = activity.getResources().getStringArray(R.array.reference_selection_array);
+        final Spinner spinner = alertView.findViewById(R.id.spinner_select_reference);
+        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(activity, android.R.layout.simple_list_item_1, objects);
+        // selectedId = 0;
+        try
+        {
+            spinner.setAdapter(arrayAdapter);
+            spinner.setSelection(selectedId);
+            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+                @Override
+                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+                    Log.v(TAG, "onItemSelected : " + position + " (" + id + ")");
+                    selectedId = position;
+                }
+
+                @Override
+                public void onNothingSelected(AdapterView<?> parent) {
+                    Log.v(TAG, "onNothingSelected");
+                }
+            });
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+
+        alertDialog.setTitle(title);
+        alertDialog.setIcon(android.R.drawable.ic_dialog_alert);
+        alertDialog.setCancelable(true);
+
+        String positiveLabel = activity.getString(R.string.dialog_positive_execute);
+        String negativeLabel = activity.getString(R.string.dialog_negative_cancel);
+
+        // ボタンを設定する(実行ボタン)
+        alertDialog.setPositiveButton(positiveLabel,
+                (dialog, which) -> {
+                    Log.v(TAG, "ConfirmationDialog::OK " + selectedId + " " + selectedMode);
+                    if (callback != null)
+                    {
+                        callback.selectedReferenceViewMode(selectedId, selectedMode);
+                    }
+                    dialog.dismiss();
+                });
+
+        // ボタンを設定する (キャンセルボタン)
+        alertDialog.setNegativeButton(negativeLabel,
+                (dialog, which) -> dialog.cancel());
+
+        myDialog = alertDialog.create();
+        return (myDialog);
+    }
+
+    @Override
+    public void onPause()
+    {
+        super.onPause();
+        Log.v(TAG, "AlertDialog::onPause()");
+        if (myDialog != null)
+        {
+            myDialog.cancel();
+        }
+    }
+
+    // コールバックインタフェース
+    public interface SelectReferenceCallback
+    {
+        void selectedReferenceViewMode(int referenceId, int viewMode); // OKを選択したとき
+    }
+}
diff --git a/wear/src/main/res/layout-notround/select_reference_dialog.xml b/wear/src/main/res/layout-notround/select_reference_dialog.xml
new file mode 100644 (file)
index 0000000..ae0fddb
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.wear.widget.BoxInsetLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/list_drawer_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:nestedScrollingEnabled="true"
+    android:paddingStart="@dimen/list_start_padding"
+    android:paddingEnd="@dimen/list_end_padding"
+    >
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        >
+        <LinearLayout
+            android:id="@+id/layout_select_reference"
+            android:orientation="vertical"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:padding="2dp"
+            >
+            <Spinner
+                android:id="@+id/show_laptime_mode"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/blank"
+                android:visibility="visible" />
+            <Spinner
+                android:id="@+id/spinner_select_reference"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/blank"
+                android:visibility="visible" />
+        </LinearLayout>
+    </ScrollView>
+</androidx.wear.widget.BoxInsetLayout>
diff --git a/wear/src/main/res/layout-round/select_reference_dialog.xml b/wear/src/main/res/layout-round/select_reference_dialog.xml
new file mode 100644 (file)
index 0000000..ae0fddb
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.wear.widget.BoxInsetLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/list_drawer_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:nestedScrollingEnabled="true"
+    android:paddingStart="@dimen/list_start_padding"
+    android:paddingEnd="@dimen/list_end_padding"
+    >
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        >
+        <LinearLayout
+            android:id="@+id/layout_select_reference"
+            android:orientation="vertical"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:padding="2dp"
+            >
+            <Spinner
+                android:id="@+id/show_laptime_mode"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/blank"
+                android:visibility="visible" />
+            <Spinner
+                android:id="@+id/spinner_select_reference"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/blank"
+                android:visibility="visible" />
+        </LinearLayout>
+    </ScrollView>
+</androidx.wear.widget.BoxInsetLayout>
index 26b0f13..0fcf2ed 100644 (file)
         <item>B</item>
         <item>C</item>
     </string-array>
+    <string-array name="show_laptime_array">
+        <item>List</item>
+        <item>Graphic</item>
+    </string-array>
 </resources>
index a3e9480..51292a0 100644 (file)
@@ -26,4 +26,5 @@
     <string name="time_picker_second_separator"> </string>
     <string name="information_time_picker">LAPと総時間を入力</string>
     <string name="information_modify_time">目標ラップタイムを設定</string>
+    <string name="select_reference_title">表示/基準 設定</string>
 </resources>
\ No newline at end of file
index d4ef283..571f964 100644 (file)
         <item>B</item>
         <item>C</item>
     </string-array>
+    <string-array name="show_laptime_array">
+        <item>List</item>
+        <item>Graphic</item>
+    </string-array>
 </resources>
\ No newline at end of file
index 9a5cc42..568b000 100644 (file)
@@ -24,4 +24,5 @@
     <string name="time_picker_second_separator"> </string>
     <string name="information_time_picker">Set LAP and total Time</string>
     <string name="information_modify_time">Set Target LAP Time</string>
+    <string name="select_reference_title">Set Mode/Ref.</string>
 </resources>
index 26b0f13..0fcf2ed 100644 (file)
         <item>B</item>
         <item>C</item>
     </string-array>
+    <string-array name="show_laptime_array">
+        <item>List</item>
+        <item>Graphic</item>
+    </string-array>
 </resources>
index 8d92b52..1f5eafe 100644 (file)
@@ -26,4 +26,5 @@
     <string name="time_picker_second_separator"> </string>
     <string name="information_time_picker">Set LAP and total Time</string>
     <string name="information_modify_time">Set Target LAP Time</string>
+    <string name="select_reference_title">Set Mode/Ref.</string>
 </resources>