1 package net.osdn.gokigen.joggingtimer.recorddetail;
3 import android.app.FragmentManager;
4 import android.os.Bundle;
5 import android.support.wearable.activity.WearableActivity;
6 import android.util.Log;
7 import android.view.MenuItem;
8 import android.widget.Toast;
10 import androidx.recyclerview.widget.DividerItemDecoration;
11 import androidx.wear.widget.WearableLinearLayoutManager;
12 import androidx.wear.widget.WearableRecyclerView;
13 import androidx.wear.widget.drawer.WearableActionDrawerView;
14 import androidx.wear.widget.drawer.WearableNavigationDrawerView;
16 import net.osdn.gokigen.joggingtimer.R;
17 import net.osdn.gokigen.joggingtimer.utilities.CreateModelData;
18 import net.osdn.gokigen.joggingtimer.utilities.DataEditDialog;
25 public class DetailActivity extends WearableActivity implements RecordDetailSetup.IDatabaseReadyNotify, MenuItem.OnMenuItemClickListener, DataEditDialog.Callback, CreateModelData.IEditedModelDataCallback, DetailSelectionMenuAdapter.ISelectedMenu
27 private final String TAG = toString();
28 public static final String INTENT_EXTRA_DATA_ID = "Detail.dataId";
30 private RecordDetailAdapter detailAdapter = null;
31 private RecordDetailSetup setupper = null;
33 private WearableActionDrawerView actionDrawerView = null;
39 protected void onCreate(Bundle savedInstanceState)
41 super.onCreate(savedInstanceState);
42 Log.v(TAG, "onCreate()");
44 setContentView(R.layout.activity_detail);
51 WearableNavigationDrawerView naviView = findViewById(R.id.top_navigation_drawer);
52 DetailSelectionMenuAdapter menuAdapter = new DetailSelectionMenuAdapter(this, this);
53 naviView.setAdapter(menuAdapter);
54 naviView.addOnItemSelectedListener(menuAdapter);
56 WearableRecyclerView view = findViewById(R.id.recycler_detail_view);
57 detailAdapter = new RecordDetailAdapter();
58 WearableLinearLayoutManager layoutManager = new WearableLinearLayoutManager(this);
60 //view.setCircularScrollingGestureEnabled(getResources().getConfiguration().isScreenRound());
61 view.setCircularScrollingGestureEnabled(false);
63 DividerItemDecoration dividerDecoration = new DividerItemDecoration(view.getContext(), layoutManager.getOrientation());
65 view.addItemDecoration(dividerDecoration);
66 view.setLayoutManager(layoutManager);
67 view.setAdapter(detailAdapter);
75 // Bottom Action Drawer
76 actionDrawerView = findViewById(R.id.bottom_action_drawer);
77 actionDrawerView.getController().peekDrawer();
78 actionDrawerView.setOnMenuItemClickListener(this);
86 protected void onSaveInstanceState(Bundle outState)
88 super.onSaveInstanceState(outState);
95 protected void onRestoreInstanceState(Bundle savedInstanceState)
97 super.onRestoreInstanceState(savedInstanceState);
104 protected void onResume()
107 Log.v(TAG, "onResume() ");
114 protected void onPause()
117 Log.v(TAG, "onPause()");
125 public void onStart()
130 long indexId = getIntent().getLongExtra(INTENT_EXTRA_DATA_ID, -1);
131 Log.v(TAG, "onResume() " + indexId);
133 setupper = new RecordDetailSetup(this, indexId, this, detailAdapter, this);
150 Log.v(TAG, "onStop()");
154 if (setupper != null)
156 setupper.closeDatabase();
172 public void onEnterAmbient(Bundle ambientDetails)
174 super.onEnterAmbient(ambientDetails);
175 Log.v(TAG, "onEnterAmbient()");
183 public void onExitAmbient()
185 super.onExitAmbient();
186 Log.v(TAG, "onExitAmbient()");
194 public void onUpdateAmbient()
196 super.onUpdateAmbient();
197 Log.v(TAG, "onUpdateAmbient()");
205 public void databaseSetupFinished(boolean result)
207 Log.v(TAG, "databaseSetupFinished() : " + result);
215 public void updatedIndexData(final boolean isIconOnly)
217 Log.v(TAG, "selectedReferenceData() : " + isIconOnly);
218 runOnUiThread(new Runnable() {
226 title = getString(R.string.action_set_reference);
230 title = getString(R.string.action_edited_data);
232 Toast toast = Toast.makeText(getApplicationContext(), title, Toast.LENGTH_SHORT);
248 public boolean onMenuItemClick(MenuItem item)
250 Log.v(TAG, "onMenuItemClick(): " + item);
252 final int itemId = item.getItemId();
255 actionDrawerView.getController().closeDrawer();
261 return (itemSelected(itemId));
264 private boolean itemSelected(int itemId)
267 String toastMessage = "";
270 case R.id.menu_edit_title:
273 int iconId = R.drawable.ic_android_black_24dp;
274 RecordDetailSetup.EditIndexData data = setupper.getEditIndexData();
277 iconId = data.getIcon();
278 title = data.getTitle();
280 DataEditDialog dialog = DataEditDialog.newInstance(iconId, title, this);
281 FragmentManager manager = getFragmentManager();
282 String tag = "dialog";
285 dialog.show(manager, tag);
290 case R.id.menu_set_reference:
292 setupper.setReferenceData();
296 case R.id.menu_share_data:
298 setupper.shareTheData(detailAdapter);
308 if (toastMessage.length() > 0)
310 Toast toast = Toast.makeText(getApplicationContext(), toastMessage, Toast.LENGTH_SHORT);
327 public void dataEdited(int iconId, String title)
329 Log.v(TAG, "iconId : " + iconId + " title : '"+ title +"'");
331 setupper.setEditIndexData(title, iconId);
332 WearableRecyclerView view = findViewById(R.id.recycler_detail_view);
333 view.postInvalidate();
344 private void updateScreen()
348 WearableRecyclerView view = findViewById(R.id.recycler_detail_view);
349 view.postInvalidate();
361 public void cancelled()
370 public void editedModelData(long indexId, long detailId, int lapCount, long prevTime, long newTime)
372 Log.v(TAG, "editedModelData() " + indexId + " " + detailId + " " + lapCount + " (" + prevTime + " -> " + newTime + ")");
373 if (detailAdapter == null)
378 long diffTime = newTime - prevTime;
379 int count = detailAdapter.getItemCount();
383 long modTime = diffTime * (-1) / (count - 1);
384 for (int index = 1; index <= count; index++)
386 DetailRecord record = detailAdapter.getRecord(index - 1);
387 if (lapCount == index)
389 totalTime = record.addModifiedTime(diffTime, totalTime);
393 totalTime = record.addModifiedTime(modTime, totalTime);
395 detailAdapter.notifyItemChanged(index - 1);
399 Thread thread = new Thread(new Runnable()
404 if (setupper != null)
406 setupper.updateDatabaseRecord(detailAdapter);
417 detailAdapter.notifyDataSetChanged();
421 public void selectedMenu(int itemId)
423 itemSelected(itemId);