1 package net.osdn.gokigen.joggingtimer.recorddetail;
3 import android.content.Intent;
4 import android.database.Cursor;
5 import android.support.annotation.NonNull;
6 import android.support.wearable.activity.WearableActivity;
7 import android.util.Log;
9 import net.osdn.gokigen.joggingtimer.R;
10 import net.osdn.gokigen.joggingtimer.storage.ITimeEntryDatabase;
11 import net.osdn.gokigen.joggingtimer.storage.ITimeEntryDatabaseCallback;
12 import net.osdn.gokigen.joggingtimer.storage.TimeEntryDatabaseFactory;
13 import net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryData;
14 import net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryIndex;
15 import net.osdn.gokigen.joggingtimer.utilities.CreateModelData;
16 import net.osdn.gokigen.joggingtimer.utilities.CreateModelDataDialog;
17 import net.osdn.gokigen.joggingtimer.utilities.TimeStringConvert;
19 import static android.provider.BaseColumns._ID;
20 import static net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryIndex.EntryIndex.COLUMN_NAME_MEMO;
21 import static net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryIndex.EntryIndex.COLUMN_NAME_START_TIME;
22 import static net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryIndex.EntryIndex.COLUMN_NAME_TIME_DURATION;
23 import static net.osdn.gokigen.joggingtimer.storage.contract.TimeEntryIndex.EntryIndex.COLUMN_NAME_TITLE;
29 public class RecordDetailSetup implements ITimeEntryDatabaseCallback, IDetailEditor
31 private final String TAG = toString();
32 private final WearableActivity activity;
33 private final long indexId;
34 private final IDatabaseReadyNotify callback;
35 private final IRecordOperation operation;
36 private final CreateModelData.IEditedModelDataCallback editCallback;
37 private ITimeEntryDatabase database = null;
43 RecordDetailSetup(WearableActivity activity, long indexId, IDatabaseReadyNotify callback, IRecordOperation operation, CreateModelData.IEditedModelDataCallback editCallback)
45 this.activity = activity;
46 this.indexId = indexId;
47 this.callback = callback;
48 this.operation = operation;
49 this.editCallback = editCallback;
58 Log.v(TAG, "setup()");
59 database = new TimeEntryDatabaseFactory(activity, this).getEntryDatabase();
60 Thread thread = new Thread(new Runnable() {
82 public void prepareFinished(boolean isReady)
86 callback.databaseSetupFinished(false);
89 final IDetailEditor editor = this;
90 Thread thread = new Thread(new Runnable() {
97 operation.clearRecord();
98 Cursor cursor = database.getAllDetailData(indexId);
101 long previousLapTime = 0;
102 long morePreviousTime = 0;
103 while (cursor.moveToNext())
105 long dataId = cursor.getLong(cursor.getColumnIndex(_ID));
106 long indexId = cursor.getLong(cursor.getColumnIndex(TimeEntryData.EntryData.COLUMN_NAME_INDEX_ID));
107 long entryTime = cursor.getLong(cursor.getColumnIndex(TimeEntryData.EntryData.COLUMN_NAME_TIME_ENTRY));
108 int recordType = cursor.getInt(cursor.getColumnIndex(TimeEntryData.EntryData.COLUMN_NAME_RECORD_TYPE));
113 startTime = entryTime;
114 previousLapTime = entryTime;
115 morePreviousTime = entryTime;
119 long lapTime = entryTime - previousLapTime;
120 long overallTime = entryTime - startTime;
121 long differenceTime = (lapTime) - (previousLapTime - morePreviousTime);
122 operation.addRecord(new DetailRecord(indexId, dataId, recordType, index, lapTime, overallTime, differenceTime, editor));
123 morePreviousTime = previousLapTime;
124 previousLapTime = entryTime;
128 activity.runOnUiThread(new Runnable()
133 operation.dataSetChangeFinished();
142 callback.databaseSetupFinished(ret);
152 void setEditIndexData(@NonNull final String title, final int icon)
154 final EditIndexData data = new EditIndexData(title, icon);
155 Thread thread = new Thread(new Runnable() {
158 database.updateIndexData(indexId, data.getTitle(), data.getIcon());
159 callback.updatedIndexData(false);
169 EditIndexData getEditIndexData()
172 int iconId = R.drawable.ic_android_black_24dp;
175 Cursor cursor = database.getIndexdata(indexId);
176 while (cursor.moveToNext())
178 title = cursor.getString(cursor.getColumnIndex(TimeEntryIndex.EntryIndex.COLUMN_NAME_TITLE));
179 iconId = cursor.getInt(cursor.getColumnIndex(TimeEntryIndex.EntryIndex.COLUMN_NAME_ICON_ID));
181 return (new EditIndexData(title, iconId));
194 void setReferenceData()
196 Thread thread = new Thread(new Runnable() {
199 database.setReferenceIndexData(indexId);
200 callback.updatedIndexData(true);
211 public void dataEntryFinished(OperationType operationType, boolean result, long id, String title)
221 public void timeEntryFinished(OperationType operationType, boolean result, long indexId, long dataId)
227 public void modelDataEntryFinished(OperationType operationType, boolean result, long indexId, String title)
230 Log.v(TAG, "modelDataEntryFinished : " + result + " " + title + " " + indexId);
249 * IDetailEditor.editDetailData()
252 public void editDetailData(final long indexId, final long dataId, final int count, final long defaultMillis)
254 activity.runOnUiThread(new Runnable()
259 CreateModelDataDialog dialog2 = new CreateModelDataDialog(activity);
260 dialog2.show(false, activity.getString(R.string.information_modify_time), count, new CreateModelData(database, editCallback, null, indexId, dataId), defaultMillis);
268 public void updateDatabaseRecord(@NonNull RecordDetailAdapter adapter)
272 int count = adapter.getItemCount();
275 for (int index = 0; index < count; index++)
277 DetailRecord record = adapter.getRecord(index);
278 long id = record.getDataId();
279 long time = record.getTotalTime();
280 database.updateTimeEntryData(id, time);
294 public void shareTheData(final RecordDetailAdapter adapter)
296 Log.v(TAG, "shareTheData()");
297 if ((adapter == null) || (adapter.getItemCount() <= 0) || (activity == null))
302 shareDetailIntent(adapter);
310 private void shareDetailIntent(RecordDetailAdapter adapter)
313 int dataCount = adapter.getItemCount();
314 StringBuilder dataToExport = new StringBuilder("");
315 dataToExport.append("; ");
316 dataToExport.append(activity.getString(R.string.app_name));
317 dataToExport.append("\r\n");
320 Cursor cursor = database.getIndexdata(indexId);
321 while (cursor.moveToNext())
323 dataToExport.append("; ");
324 title = cursor.getString(cursor.getColumnIndex(COLUMN_NAME_TITLE));
325 dataToExport.append(title);
326 dataToExport.append(",");
327 dataToExport.append(TimeStringConvert.getTimeString(cursor.getLong(cursor.getColumnIndex(COLUMN_NAME_TIME_DURATION))));
328 dataToExport.append(",");
329 dataToExport.append(cursor.getLong(cursor.getColumnIndex(COLUMN_NAME_START_TIME)));
330 dataToExport.append(",");
331 dataToExport.append(cursor.getString(cursor.getColumnIndex(COLUMN_NAME_MEMO)));
332 dataToExport.append(",");
333 dataToExport.append("\r\n");
339 dataToExport.append("\r\n");
341 dataToExport.append("; \r\n");
342 dataToExport.append("; LapCount,LapTime,TotalTime,LapTime(ms),TotalTime(ms),;\r\n");
344 for (int index = 0; index < dataCount; index++)
348 DetailRecord record = adapter.getRecord(index);
349 dataToExport.append(record.getLapCount());
350 dataToExport.append(",");
351 dataToExport.append(record.getTitle());
352 dataToExport.append(",");
353 dataToExport.append(record.getOverallTime());
354 dataToExport.append(",");
355 dataToExport.append(record.getLapTime());
356 dataToExport.append(",");
357 dataToExport.append(record.getTotalTime());
358 dataToExport.append(",");
359 dataToExport.append(";");
364 dataToExport.append(";;\r\n");
367 dataToExport.append("\r\n");
370 // Intent発行(ACTION_SEND)
373 Intent sendIntent = new Intent(android.content.Intent.ACTION_SEND);
374 sendIntent.putExtra(Intent.EXTRA_SUBJECT, title);
375 sendIntent.setType("text/plain");
376 sendIntent.putExtra(Intent.EXTRA_TEXT, dataToExport.toString());
377 activity.startActivity(sendIntent);
379 Log.v(TAG, "<<< SEND INTENT >>> : " + title);
392 EditIndexData(String title, int icon)
413 interface IDatabaseReadyNotify
415 void databaseSetupFinished(boolean result);
416 void updatedIndexData(boolean isIconOnly);