OSDN Git Service

基準データの作成ロジックを搭載。
authorMRSa <mrsa@myad.jp>
Fri, 30 Mar 2018 18:07:06 +0000 (03:07 +0900)
committerMRSa <mrsa@myad.jp>
Fri, 30 Mar 2018 18:07:06 +0000 (03:07 +0900)
12 files changed:
wear/src/main/java/net/osdn/gokigen/joggingtimer/recorddetail/DetailActivity.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/recorddetail/DetailHolder.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/recorddetail/DetailRecord.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/recorddetail/RecordDetailAdapter.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/recorddetail/RecordDetailSetup.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/recordlist/RecordSummarySetup.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/stopwatch/WearableActivityController.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/storage/ITimeEntryDatabase.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/storage/ITimeEntryDatabaseCallback.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/storage/TimeEntryDatabase.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/utilities/CreateModelData.java
wear/src/main/java/net/osdn/gokigen/joggingtimer/utilities/CreateModelDataDialog.java

index b8621be..864165f 100644 (file)
@@ -11,7 +11,6 @@ import android.view.MenuItem;
 import android.widget.Toast;
 
 import net.osdn.gokigen.joggingtimer.R;
-import net.osdn.gokigen.joggingtimer.utilities.CreateModelData;
 import net.osdn.gokigen.joggingtimer.utilities.CreateModelDataDialog;
 import net.osdn.gokigen.joggingtimer.utilities.DataEditDialog;
 
@@ -249,7 +248,7 @@ public class DetailActivity extends WearableActivity implements RecordDetailSetu
                 break;
             case R.id.menu_create_model:
                 CreateModelDataDialog dialog2 = new CreateModelDataDialog(this);
-                dialog2.show(R.drawable.ic_android_black_24dp, getString(R.string.information_time_picker), new CreateModelData());
+                dialog2.show(true, getString(R.string.information_time_picker), setupper.getCreateModelDataCallback(), 0);
                 break;
 
             case R.id.menu_set_reference:
index 565920e..6e64daa 100644 (file)
@@ -1,8 +1,8 @@
 package net.osdn.gokigen.joggingtimer.recorddetail;
 
+import android.support.annotation.NonNull;
 import android.support.v7.widget.RecyclerView;
 import android.view.View;
-import android.widget.ImageView;
 import android.widget.TextView;
 
 import net.osdn.gokigen.joggingtimer.R;
@@ -10,11 +10,11 @@ import net.osdn.gokigen.joggingtimer.R;
 class DetailHolder  extends RecyclerView.ViewHolder
 {
     private final View itemView;
-    private TextView lapView = null;
-    private TextView mainText = null;
-    private TextView subText = null;
+    private TextView lapView;
+    private TextView mainText;
+    private TextView subText;
 
-    DetailHolder(View itemView)
+    DetailHolder(@NonNull View itemView)
     {
         super(itemView);
         lapView = itemView.findViewById(R.id.detail_lap_count);
index 00c369a..b12d83b 100644 (file)
@@ -7,20 +7,22 @@ import android.view.View;
  *
  *
  */
-public class DetailRecord implements View.OnClickListener
+public class DetailRecord implements View.OnClickListener, View.OnLongClickListener
 {
     private final String TAG = toString();
     private final long dataId;
-    private String lapCount = "";
-    private String title = "";
-    private String detail = "";
+    private final int recordType;
+    private String lapCount;
+    private String title;
+    private String detail;
 
     /**
      *
      */
-    DetailRecord(long dataId, String lapCount, String title, String detail)
+    DetailRecord(long dataId, int recordType, String lapCount, String title, String detail)
     {
         this.dataId = dataId;
+        this.recordType = recordType;
         this.lapCount = lapCount;
         this.title = title;
         this.detail = detail;
@@ -47,4 +49,12 @@ public class DetailRecord implements View.OnClickListener
         Log.v(TAG, "Clicked : [" + dataId + "] (" + lapCount + ") " + title + " " + detail);
 
     }
+
+    @Override
+    public boolean onLongClick(View v)
+    {
+        Log.v(TAG, "LONG Clicked : [" + dataId + "] (" + lapCount + ") " + title + " " + detail + " TYPE : " + recordType);
+
+        return (false);
+    }
 }
index d67a27e..4bc8efb 100644 (file)
@@ -17,7 +17,7 @@ import java.util.List;
  */
 public class RecordDetailAdapter  extends RecyclerView.Adapter<DetailHolder>  implements IRecordOperation
 {
-    private List<DetailRecord> list = null;
+    private List<DetailRecord> list;
 
     /**
      *
index 0b8bf35..48df96d 100644 (file)
@@ -8,11 +8,11 @@ import net.osdn.gokigen.joggingtimer.storage.ITimeEntryDatabase;
 import net.osdn.gokigen.joggingtimer.storage.ITimeEntryDatabaseCallback;
 import net.osdn.gokigen.joggingtimer.storage.TimeEntryDatabaseFactory;
 import net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryData;
-import net.osdn.gokigen.joggingtimer.utilities.IconIdProvider;
+import net.osdn.gokigen.joggingtimer.utilities.CreateModelData;
+import net.osdn.gokigen.joggingtimer.utilities.CreateModelDataDialog;
 import net.osdn.gokigen.joggingtimer.utilities.TimeStringConvert;
 
 import static android.provider.BaseColumns._ID;
-import static net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryData.EntryData.COLUMN_NAME_ICON_ID;
 
 /**
  *
@@ -93,6 +93,7 @@ public class RecordDetailSetup  implements ITimeEntryDatabaseCallback
                     {
                         long dataId = cursor.getLong(cursor.getColumnIndex(_ID));
                         long entryTime = cursor.getLong(cursor.getColumnIndex(TimeEntryData.EntryData.COLUMN_NAME_TIME_ENTRY));
+                        int recordType = cursor.getInt(cursor.getColumnIndex(TimeEntryData.EntryData.COLUMN_NAME_RECORD_TYPE));
 
                         if (index == 0)
                         {
@@ -109,7 +110,7 @@ public class RecordDetailSetup  implements ITimeEntryDatabaseCallback
                             String lapCount = " " + index;
                             String lapTimeString = TimeStringConvert.getTimeString(lapTime).toString();
                             String overallTimeString = TimeStringConvert.getTimeString(overallTime).toString() + " (" + TimeStringConvert.getDiffTimeString(differenceTime).toString() +") ";
-                            operation.addRecord(new DetailRecord(dataId, lapCount, lapTimeString, overallTimeString));
+                            operation.addRecord(new DetailRecord(dataId, recordType, lapCount, lapTimeString, overallTimeString));
                             morePreviousTime = previousLapTime;
                             previousLapTime = entryTime;
                         }
@@ -187,6 +188,13 @@ public class RecordDetailSetup  implements ITimeEntryDatabaseCallback
         //
     }
 
+    @Override
+    public void modelDataEntryFinished(OperationType operationType, boolean result, long indexId, String title)
+    {
+        //
+        Log.v(TAG, "modelDataEntryFinished : " + result + " " + title + " " + indexId);
+    }
+
     /**
      *
      */
@@ -205,6 +213,14 @@ public class RecordDetailSetup  implements ITimeEntryDatabaseCallback
     /**
      *
      */
+    CreateModelDataDialog.Callback getCreateModelDataCallback()
+    {
+        return (new CreateModelData(database));
+    }
+
+    /**
+     *
+     */
     interface IDatabaseReadyNotify
     {
         void databaseSetupFinished(boolean result);
index 7bf843b..5ae239f 100644 (file)
@@ -117,6 +117,12 @@ class RecordSummarySetup implements ITimeEntryDatabaseCallback
         //
     }
 
+    @Override
+    public void modelDataEntryFinished(OperationType operationType, boolean result, long indexId, String title)
+    {
+        //
+    }
+
     /**
      *
      */
index 5864015..dbbc56a 100644 (file)
@@ -390,6 +390,12 @@ class WearableActivityController implements IWearableActivityControl, ITimeEntry
     }
 
     @Override
+    public void modelDataEntryFinished(OperationType operationType, boolean result, long indexId, String title)
+    {
+        //
+    }
+
+    @Override
     public void dataEntryFinished(OperationType operationType, boolean result, long id, String title)
     {
         Log.v(TAG, "database dataEntryFinished() : " + result + "  [" + id + "] " + title);
index 91a6bae..eb84a7a 100644 (file)
@@ -22,4 +22,7 @@ public interface ITimeEntryDatabase
     void createIndexData(String title, String memo, int icon, long startTime);
     void appendTimeData(long indexId, long lapTime);
     void finishTimeData(long indexId, long startTime, long endTime);
+
+    void createTimeEntryModelData(int lap, int hour, int minute, int second, String memo);
+
 }
index 53cd201..6c1f9c9 100644 (file)
@@ -6,7 +6,8 @@ package net.osdn.gokigen.joggingtimer.storage;
  */
 public interface ITimeEntryDatabaseCallback
 {
-    enum OperationType {
+    enum OperationType
+    {
         CREATED,
         APPENDED,
         FINISHED,
@@ -17,4 +18,6 @@ public interface ITimeEntryDatabaseCallback
     void dataEntryFinished(OperationType operationType, boolean result, long id, String title);
     void timeEntryFinished(OperationType operationType, boolean result, long indexId, long dataId);
 
+    void modelDataEntryFinished(OperationType operationType, boolean result, long indexId, String title);
+
 }
index 2986f09..645c295 100644 (file)
@@ -9,6 +9,7 @@ import android.util.Log;
 
 import net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryData;
 import net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryIndex;
+import net.osdn.gokigen.joggingtimer.utilities.TimeStringConvert;
 
 import static android.provider.BaseColumns._ID;
 
@@ -23,7 +24,10 @@ class TimeEntryDatabase implements ITimeEntryDatabase
     private final TimeEntryDataOpenHelper dbHelper;
     private final ITimeEntryDatabaseCallback callback;
     private static final int REFERENCE_ICON_ID = 2;
+    private static final int MODEL_DATA_ICON_ID = 4;
     private static final int DEFAULT_ICON_ID = 0;
+    private static final long DEFAULT_RECORD_TYPE = 0;
+    private static final long EDITABLE_RECORD_TYPE = 1;
     private SQLiteDatabase db = null;
     //private SQLiteDatabase writeDb = null;
     //private SQLiteDatabase readDb = null;
@@ -153,7 +157,13 @@ class TimeEntryDatabase implements ITimeEntryDatabase
     @Override
     public void createIndexData(String title, String memo, int icon, long startTime)
     {
-        Log.v(TAG, "createIndexData() [" + title +"] " + memo + " " + icon + " " + startTime);
+        long indexId = createIndexDataImpl(true, title, memo, icon, startTime, 0);
+        Log.v(TAG, "createIndexData() [" + title +"] " + memo + " " + icon + " " + startTime + " idx: " + indexId);
+    }
+
+    private long createIndexDataImpl(boolean isCallback, String title, String memo, int icon, long startTime, long duration)
+    {
+        long indexId = -1;
         try
         {
             boolean ret = false;
@@ -162,39 +172,38 @@ class TimeEntryDatabase implements ITimeEntryDatabase
             valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_MEMO, memo);
             valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID, icon);
             valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_START_TIME, startTime);
-            valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_TIME_DURATION, 0);
-            long indexId = db.insert(TimeEntryIndex.EntryIndex.TABLE_NAME, null, valuesIndex);
+            valuesIndex.put(TimeEntryIndex.EntryIndex.COLUMN_NAME_TIME_DURATION, duration);
+            indexId = db.insert(TimeEntryIndex.EntryIndex.TABLE_NAME, null, valuesIndex);
             if (indexId != -1)
             {
                 ret = true;
             }
-            callback.dataEntryFinished(ITimeEntryDatabaseCallback.OperationType.CREATED, ret, indexId, title);
-
-            ContentValues valuesData = new ContentValues();
-            valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_INDEX_ID, indexId);
-            valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_TIME_ENTRY, startTime);
-            valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_OTHER_ID, 0);
-            valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_GPS_ID, 0);
-            valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_MEMO_ID, 0);
-            valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_ICON_ID, 0);
-            valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_RECORD_TYPE, 0);
-            long dataId = db.insert(TimeEntryData.EntryData.TABLE_NAME, null, valuesData);
-            if (dataId != -1)
+            if (isCallback)
             {
-                ret = true;
+                callback.dataEntryFinished(ITimeEntryDatabaseCallback.OperationType.CREATED, ret, indexId, title);
             }
-            callback.timeEntryFinished(ITimeEntryDatabaseCallback.OperationType.APPENDED, ret, indexId, dataId);
         }
         catch (Exception e)
         {
             e.printStackTrace();
         }
+        appendTimeDataImpl(true, indexId, startTime, DEFAULT_RECORD_TYPE);
+        return (indexId);
     }
 
     @Override
     public void appendTimeData(long indexId, long lapTime)
     {
         Log.v(TAG, "appendTimeData()  " +  lapTime);
+        appendTimeDataImpl(true, indexId, lapTime, DEFAULT_RECORD_TYPE);
+    }
+
+    /**
+     *
+     *
+     */
+    private void appendTimeDataImpl(boolean isCallback, long indexId, long lapTime, long recordType)
+    {
         try
         {
             boolean ret = false;
@@ -205,20 +214,28 @@ class TimeEntryDatabase implements ITimeEntryDatabase
             valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_GPS_ID, 0);
             valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_MEMO_ID, 0);
             valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_ICON_ID, 0);
-            valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_RECORD_TYPE, 0);
+            valuesData.put(TimeEntryData.EntryData.COLUMN_NAME_RECORD_TYPE, recordType);
             long dataId = db.insert(TimeEntryData.EntryData.TABLE_NAME, null, valuesData);
             if (dataId != -1)
             {
                 ret = true;
             }
-            callback.timeEntryFinished(ITimeEntryDatabaseCallback.OperationType.APPENDED, ret, indexId, dataId);
+            if (isCallback)
+            {
+                callback.timeEntryFinished(ITimeEntryDatabaseCallback.OperationType.APPENDED, ret, indexId, dataId);
+            }
         }
         catch (Exception e)
         {
             e.printStackTrace();
         }
+
     }
 
+    /**
+     *
+     *
+     */
     @Override
     public void finishTimeData(long indexId, long startTime, long endTime)
     {
@@ -247,6 +264,37 @@ class TimeEntryDatabase implements ITimeEntryDatabase
         }
     }
 
+    /**
+     *
+     *
+     */
+    @Override
+    public void createTimeEntryModelData(int lap, int hour, int minute, int second, @NonNull String memo)
+    {
+        long totalTime = (hour * (1000 * 60 * 60)) + (minute * (1000 * 60)) + second;
+        long diffTime = totalTime / (long) lap;
+        String title = " " + lap + " LAPs Model";
+        Log.v(TAG, "ENTRY : '" + lap + " " + title + "' mills : " + "(" + diffTime + ") " + memo);
+
+        try
+        {
+            long lapTime = 0;
+            long indexId = createIndexDataImpl(false, title, memo, MODEL_DATA_ICON_ID, lapTime, totalTime);
+            for (int index = 0; index < lap; index++)
+            {
+                lapTime = lapTime + diffTime;
+                appendTimeDataImpl(false, indexId, lapTime, EDITABLE_RECORD_TYPE);
+            }
+            callback.modelDataEntryFinished(ITimeEntryDatabaseCallback.OperationType.FINISHED, true, indexId, title);
+            return;
+       }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        callback.modelDataEntryFinished(ITimeEntryDatabaseCallback.OperationType.FINISHED, false, -1, title);
+    }
+
 /*
     public boolean prepareToRead()
     {
index 4920c60..bde24fb 100644 (file)
@@ -2,26 +2,51 @@ package net.osdn.gokigen.joggingtimer.utilities;
 
 import android.util.Log;
 
+import net.osdn.gokigen.joggingtimer.storage.ITimeEntryDatabase;
+
 public class CreateModelData implements CreateModelDataDialog.Callback
 {
     private final String TAG = toString();
+    private final ITimeEntryDatabase database;
 
-
-    public CreateModelData()
+    public CreateModelData(ITimeEntryDatabase database)
     {
+        this.database = database;
 
     }
 
     @Override
-    public void dataCrated(int lap, int hour, int minute, int second)
+    public void dataCreated(final int lap, final int hour, final int minute, final int second)
     {
-        Log.v(TAG, "dataCrated()");
-
+        try
+        {
+            Thread thread = new Thread(new Runnable()
+            {
+                @Override
+                public void run()
+                {
+                    try
+                    {
+                        database.createTimeEntryModelData(lap, hour, minute, second, "");
+                    }
+                    catch (Exception e)
+                    {
+                        e.printStackTrace();
+                    }
+                }
+            });
+            thread.start();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
     }
 
     @Override
     public void dataCreateCancelled()
     {
+        Log.v(TAG, "dataCreateCancelled()");
 
     }
 }
index 97bd487..a6f864a 100644 (file)
@@ -1,21 +1,13 @@
 package net.osdn.gokigen.joggingtimer.utilities;
 
 import android.app.AlertDialog;
-import android.content.Context;
 import android.content.DialogInterface;
-import android.content.res.TypedArray;
-import android.support.annotation.NonNull;
 import android.support.wearable.activity.WearableActivity;
 import android.util.Log;
 import android.view.ContextThemeWrapper;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
-import android.widget.EditText;
 import android.widget.NumberPicker;
-import android.widget.Spinner;
 import android.widget.TextView;
 
 
@@ -38,11 +30,12 @@ public class CreateModelDataDialog
 
     /**
      *
-     * @param iconResId  アイコンリソース
      * @param callback  結果をコールバック
      */
-    public void show(int iconResId, String title, final Callback callback)
+    public void show(boolean isLap, String title, final Callback callback, long defaultValue)
     {
+        Log.v(TAG, "show " + "def. : " + defaultValue);
+
         // 確認ダイアログの生成
         final AlertDialog.Builder alertDialog = new AlertDialog.Builder(new ContextThemeWrapper(activity, R.style.wear2_dialog_theme));
 
@@ -52,15 +45,32 @@ public class CreateModelDataDialog
         alertDialog.setView(alertView);
 
         final TextView titleText = alertView.findViewById(R.id.information_picker);
+        final TextView lapStartText = alertView.findViewById(R.id.lap_start);
+        final TextView lapEndText = alertView.findViewById(R.id.lap_end);
         final NumberPicker lap = alertView.findViewById(R.id.number_picker_lap_count);
         final NumberPicker hour = alertView.findViewById(R.id.number_picker_hours);
         final NumberPicker minute = alertView.findViewById(R.id.number_picker_minutes);
         final NumberPicker second = alertView.findViewById(R.id.number_picker_seconds);
         try
         {
-            //titleText.setText(title);
-            lap.setMinValue(1);
-            lap.setMaxValue(99);
+            if (title != null)
+            {
+                titleText.setText(title);
+            }
+            if (isLap)
+            {
+                lap.setVisibility(View.VISIBLE);
+                lapStartText.setVisibility(View.VISIBLE);
+                lapEndText.setVisibility(View.VISIBLE);
+                lap.setMinValue(1);
+                lap.setMaxValue(99);
+            }
+            else
+            {
+                lap.setVisibility(View.GONE);
+                lapStartText.setVisibility(View.GONE);
+                lapEndText.setVisibility(View.GONE);
+            }
             hour.setMinValue(0);
             hour.setMaxValue(72);
             minute.setMinValue(0);
@@ -73,8 +83,6 @@ public class CreateModelDataDialog
             e.printStackTrace();
         }
 
-        //alertDialog.setIcon(iconResId);
-        //alertDialog.setMessage(activity.getString(R.string.information_time_picker));
         alertDialog.setCancelable(true);
 
         // ボタンを設定する(実行ボタン)
@@ -85,7 +93,7 @@ public class CreateModelDataDialog
                         try
                         {
                             Log.v(TAG, "ENTRY [" + lap.getValue() + "] " + hour.getValue() + ":" + minute.getValue() + ":" + second.getValue());
-                            callback.dataCrated(lap.getValue(), hour.getValue(), minute.getValue(), second.getValue());
+                            callback.dataCreated(lap.getValue(), hour.getValue(), minute.getValue(), second.getValue());
                             //callback.dataCreateCancelled();
                         }
                         catch (Exception e)
@@ -114,7 +122,7 @@ public class CreateModelDataDialog
     // コールバックインタフェース
     public interface Callback
     {
-        void dataCrated(int lap, int hour, int minute, int second); // OKを選択したとき
+        void dataCreated(int lap, int hour, int minute, int second); // OKを選択したとき
         void dataCreateCancelled();  // キャンセルしたとき
     }
 }