1 package net.osdn.gokigen.joggingtimer.recorddetail;
3 import android.os.Bundle;
4 import android.support.v7.widget.DividerItemDecoration;
5 import android.support.wear.widget.WearableLinearLayoutManager;
6 import android.support.wear.widget.WearableRecyclerView;
7 import android.support.wear.widget.drawer.WearableActionDrawerView;
8 import android.support.wearable.activity.WearableActivity;
9 import android.util.Log;
10 import android.view.MenuItem;
11 import android.widget.Toast;
13 import net.osdn.gokigen.joggingtimer.R;
14 import net.osdn.gokigen.joggingtimer.storage.ITimeEntryDatabase;
15 import net.osdn.gokigen.joggingtimer.utilities.CreateModelData;
16 import net.osdn.gokigen.joggingtimer.utilities.CreateModelDataDialog;
17 import net.osdn.gokigen.joggingtimer.utilities.DataEditDialog;
24 public class DetailActivity extends WearableActivity implements RecordDetailSetup.IDatabaseReadyNotify, MenuItem.OnMenuItemClickListener, DataEditDialog.Callback, CreateModelData.IEditedModelDataCallback
26 private final String TAG = toString();
27 public static final String INTENT_EXTRA_DATA_ID = "Detail.dataId";
29 private RecordDetailAdapter detailAdapter = null;
30 private RecordDetailSetup setupper = null;
32 private WearableActionDrawerView actionDrawerView = null;
38 protected void onCreate(Bundle savedInstanceState)
40 super.onCreate(savedInstanceState);
41 Log.v(TAG, "onCreate()");
43 setContentView(R.layout.activity_detail);
50 WearableRecyclerView view = findViewById(R.id.recycler_detail_view);
51 detailAdapter = new RecordDetailAdapter();
52 WearableLinearLayoutManager layoutManager = new WearableLinearLayoutManager(this);
54 view.setCircularScrollingGestureEnabled(getResources().getConfiguration().isScreenRound());
56 DividerItemDecoration dividerDecoration = new DividerItemDecoration(view.getContext(), layoutManager.getOrientation());
58 view.addItemDecoration(dividerDecoration);
59 view.setLayoutManager(layoutManager);
60 view.setAdapter(detailAdapter);
68 // Bottom Action Drawer
69 actionDrawerView = findViewById(R.id.bottom_action_drawer);
70 actionDrawerView.getController().peekDrawer();
71 actionDrawerView.setOnMenuItemClickListener(this);
79 protected void onSaveInstanceState(Bundle outState)
81 super.onSaveInstanceState(outState);
88 protected void onRestoreInstanceState(Bundle savedInstanceState)
90 super.onRestoreInstanceState(savedInstanceState);
97 protected void onResume()
100 Log.v(TAG, "onResume() ");
107 protected void onPause()
110 Log.v(TAG, "onPause()");
118 public void onStart()
123 long indexId = getIntent().getLongExtra(INTENT_EXTRA_DATA_ID, -1);
124 Log.v(TAG, "onResume() " + indexId);
126 setupper = new RecordDetailSetup(this, indexId, this, detailAdapter, this);
143 Log.v(TAG, "onStop()");
147 if (setupper != null)
149 setupper.closeDatabase();
165 public void onEnterAmbient(Bundle ambientDetails)
167 super.onEnterAmbient(ambientDetails);
168 Log.v(TAG, "onEnterAmbient()");
176 public void onExitAmbient()
178 super.onExitAmbient();
179 Log.v(TAG, "onExitAmbient()");
187 public void onUpdateAmbient()
189 super.onUpdateAmbient();
190 Log.v(TAG, "onUpdateAmbient()");
198 public void databaseSetupFinished(boolean result)
200 Log.v(TAG, "databaseSetupFinished() : " + result);
208 public void updatedIndexData(final boolean isIconOnly)
210 Log.v(TAG, "selectedReferenceData() : " + isIconOnly);
211 runOnUiThread(new Runnable() {
219 title = getString(R.string.action_set_reference);
223 title = getString(R.string.action_edited_data);
225 Toast toast = Toast.makeText(getApplicationContext(), title, Toast.LENGTH_SHORT);
241 public boolean onMenuItemClick(MenuItem item)
243 Log.v(TAG, "onMenuItemClick(): " + item);
246 final int itemId = item.getItemId();
247 String toastMessage = "";
250 case R.id.menu_edit_title:
252 DataEditDialog dialog = new DataEditDialog(this);
253 dialog.show(R.drawable.ic_android_black_24dp, "", this);
256 case R.id.menu_create_model:
257 CreateModelDataDialog dialog2 = new CreateModelDataDialog(this);
258 dialog2.show(true, getString(R.string.information_time_picker), 0, setupper.getCreateModelDataCallback(ITimeEntryDatabase.DONT_USE_ID, ITimeEntryDatabase.DONT_USE_ID), 0);
261 case R.id.menu_set_reference:
263 setupper.setReferenceData();
273 actionDrawerView.getController().closeDrawer();
275 if (toastMessage.length() > 0)
277 Toast toast = Toast.makeText(getApplicationContext(), toastMessage, Toast.LENGTH_SHORT);
294 public void dataEdited(int iconId, String title)
296 Log.v(TAG, "iconId : " + iconId + " title : '"+ title +"'");
298 setupper.setIndexData(title, iconId);
299 WearableRecyclerView view = findViewById(R.id.recycler_detail_view);
300 view.postInvalidate();
311 private void updateScreen()
315 WearableRecyclerView view = findViewById(R.id.recycler_detail_view);
316 view.postInvalidate();
328 public void cancelled()
337 public void editedModelData(long indexId, long detailId, int lapCount, long prevTime, long newTime)
339 Log.v(TAG, "editedModelData() " + indexId + " " + detailId + " " + lapCount + " (" + prevTime + " -> " + newTime + ")");
340 if (detailAdapter == null)
345 long diffTime = newTime - prevTime;
346 int count = detailAdapter.getItemCount();
350 long modTime = diffTime * (-1) / (count - 1);
351 for (int index = 1; index <= count; index++)
353 DetailRecord record = detailAdapter.getRecord(index - 1);
354 if (lapCount == index)
356 totalTime = record.addModifiedTime(diffTime, totalTime);
360 totalTime = record.addModifiedTime(modTime, totalTime);
363 detailAdapter.notifyItemChanged(index - 1);
367 Thread thread = new Thread(new Runnable()
372 if (setupper != null)
374 setupper.updateDatabaseRecord(detailAdapter);
385 detailAdapter.notifyDataSetChanged();