OSDN Git Service

roundおよびchinの表示レイアウトを見直した。
[gokigen/JoggingTimer.git] / wear / src / main / java / net / osdn / gokigen / joggingtimer / recordlist / ListActivity.java
1 package net.osdn.gokigen.joggingtimer.recordlist;
2
3 import android.app.FragmentManager;
4 import android.content.Intent;
5 import android.os.Bundle;
6 import android.support.annotation.NonNull;
7 import android.support.v7.widget.DividerItemDecoration;
8 import android.support.wear.widget.WearableLinearLayoutManager;
9 import android.support.wear.widget.drawer.WearableNavigationDrawerView;
10 import android.support.wearable.activity.WearableActivity;
11 import android.support.wear.widget.WearableRecyclerView;
12 import android.util.Log;
13 import android.widget.Toast;
14
15 import net.osdn.gokigen.joggingtimer.R;
16 import net.osdn.gokigen.joggingtimer.recorddetail.DetailActivity;
17 import net.osdn.gokigen.joggingtimer.storage.ITimeEntryDatabase;
18 import net.osdn.gokigen.joggingtimer.utilities.ConfirmationDialog;
19 import net.osdn.gokigen.joggingtimer.utilities.CreateModelData;
20 import net.osdn.gokigen.joggingtimer.utilities.CreateModelDataDialog;
21
22 /**
23  *
24  *
25  */
26 public class ListActivity extends WearableActivity implements IDetailLauncher, RecordSummarySetup.IDatabaseReadyNotify, CreateModelData.ICreatedModelDataCallback, ListSelectionMenuAdapter.ISelectedMenu
27 {
28     private final String TAG = toString();
29     private RecordSummaryAdapter summaryAdapter = null;
30     private RecordSummarySetup setupper = null;
31
32     /**
33      *
34      */
35     @Override
36     protected void onCreate(Bundle savedInstanceState)
37     {
38         super.onCreate(savedInstanceState);
39         Log.v(TAG, "onCreate()");
40
41         setContentView(R.layout.activity_list);
42
43         // Enables Always-on
44         setAmbientEnabled();
45
46         try
47         {
48             WearableNavigationDrawerView naviView = findViewById(R.id.list_top_navigation_drawer);
49             ListSelectionMenuAdapter menuAdapter = new ListSelectionMenuAdapter(this, this);
50             naviView.setAdapter(menuAdapter);
51             naviView.addOnItemSelectedListener(menuAdapter);
52
53
54             WearableRecyclerView view = findViewById(R.id.recycler_list_view);
55             summaryAdapter = new RecordSummaryAdapter();
56             WearableLinearLayoutManager layoutManager = new WearableLinearLayoutManager(this);
57
58             //view.setCircularScrollingGestureEnabled(getResources().getConfiguration().isScreenRound());
59             view.setCircularScrollingGestureEnabled(false);
60
61             DividerItemDecoration dividerDecoration = new DividerItemDecoration(view.getContext(), layoutManager.getOrientation());
62
63             view.addItemDecoration(dividerDecoration);
64             view.setLayoutManager(layoutManager);
65             view.setAdapter(summaryAdapter);
66
67         }
68         catch (Exception e)
69         {
70             e.printStackTrace();
71             summaryAdapter = null;
72         }
73     }
74
75     /**
76      *
77      */
78     @Override
79     protected void onSaveInstanceState(Bundle outState)
80     {
81         super.onSaveInstanceState(outState);
82     }
83
84     /**
85      *
86      */
87     @Override
88     protected void onRestoreInstanceState(Bundle savedInstanceState)
89     {
90         super.onRestoreInstanceState(savedInstanceState);
91     }
92
93     /**
94      *
95      */
96     @Override
97     protected void onResume()
98     {
99         super.onResume();
100         Log.v(TAG, "onResume()");
101         try
102         {
103             setupper = new RecordSummarySetup(this, this, this, summaryAdapter, this);
104             setupper.setup();
105         }
106         catch (Exception e)
107         {
108             e.printStackTrace();
109         }
110
111     }
112
113     /**
114      *
115      */
116     @Override
117     protected void onPause()
118     {
119         super.onPause();
120         Log.v(TAG, "onPause()");
121         try
122         {
123             if (setupper != null)
124             {
125                 setupper.closeDatabase();
126                 setupper = null;
127             }
128         }
129         catch (Exception e)
130         {
131             e.printStackTrace();
132         }
133         System.gc();
134     }
135
136     /**
137      *
138      *
139      */
140     @Override
141     public void onStart()
142     {
143         super.onStart();
144         Log.v(TAG, "onStart()");
145     }
146
147     /**
148      *
149      *
150      */
151     @Override
152     public void onStop()
153     {
154         super.onStop();
155         Log.v(TAG, "onStop()");
156     }
157
158     /**
159      *
160      *
161      */
162     @Override
163     public void onEnterAmbient(Bundle ambientDetails)
164     {
165         super.onEnterAmbient(ambientDetails);
166         Log.v(TAG, "onEnterAmbient()");
167     }
168
169     /**
170      *
171      *
172      */
173     @Override
174     public void onExitAmbient()
175     {
176         super.onExitAmbient();
177         Log.v(TAG, "onExitAmbient()");
178     }
179
180     /**
181      *
182      *
183      */
184     @Override
185     public void onUpdateAmbient()
186     {
187         super.onUpdateAmbient();
188         Log.v(TAG, "onUpdateAmbient()");
189     }
190
191     /**
192      *
193      *
194      */
195     @Override
196     public void launchDetail(long recordId)
197     {
198         Log.v(TAG, "launchDetail() id:" + recordId);
199         try
200         {
201             Intent intent = new Intent(this, DetailActivity.class);
202             intent.putExtra(DetailActivity.INTENT_EXTRA_DATA_ID, recordId);
203             startActivity(intent);
204         }
205         catch (Exception e)
206         {
207             e.printStackTrace();
208         }
209     }
210
211     /**
212      *
213      *
214      */
215     private void itemSelected(int itemId)
216     {
217         String toastMessage = "";
218         switch (itemId)
219         {
220             case R.id.menu_create_model:
221                 // モデルデータの作成
222                 CreateModelDataDialog dialog2 = CreateModelDataDialog.newInstance(true, getString(R.string.information_time_picker), 0, setupper.getCreateModelDataCallback(ITimeEntryDatabase.DONT_USE_ID, ITimeEntryDatabase.DONT_USE_ID), 0);
223                 dialog2.show(getFragmentManager(), "dialog2");
224                 break;
225
226
227             default:
228                 // 何もしない
229                 break;
230         }
231         try
232         {
233             if (toastMessage.length() > 0)
234             {
235                 Toast toast = Toast.makeText(getApplicationContext(), toastMessage, Toast.LENGTH_SHORT);
236                 toast.show();
237             }
238         }
239         catch (Exception e)
240         {
241             e.printStackTrace();
242         }
243     }
244
245     /**
246      *
247      *
248      */
249     @Override
250     public void deleteRecord(@NonNull DataRecord targetRecord)
251     {
252         try
253         {
254             final int positionId = targetRecord.getPositionId();
255             final String title = targetRecord.getTitle();
256
257             Log.v(TAG, "deleteRecord() : " + title);
258
259             String message = getString(R.string.dialog_message_delete) + " (" + title + ")";
260             ConfirmationDialog dialog = ConfirmationDialog.newInstance(getString(R.string.dialog_title_delete), message,  new ConfirmationDialog.Callback() {
261                 @Override
262                 public void confirm()
263                 {
264                     Log.v(TAG, "Delete Record Execute [" + title + "]" + " pos:" + positionId);
265                     if (summaryAdapter != null)
266                     {
267                         final long indexId = summaryAdapter.removeItem(positionId);
268                         try
269                         {
270                             Thread thread = new Thread(new Runnable()
271                             {
272                                 @Override
273                                 public void run()
274                                 {
275                                     if (indexId >= 0)
276                                     {
277                                         setupper.deleteTimeEntryData(indexId);
278                                     }
279                                 }
280                             });
281                             thread.start();
282                         }
283                         catch (Exception e)
284                         {
285                             e.printStackTrace();
286                         }
287                     }
288                 }
289             });
290             FragmentManager manager = getFragmentManager();
291             String tag = "dialog";
292             if (manager != null)
293             {
294                 dialog.show(manager, tag);
295             }
296         }
297         catch (Exception e)
298         {
299             e.printStackTrace();
300         }
301     }
302
303     /**
304      *
305      *
306      */
307     @Override
308     public void databaseSetupFinished(boolean result)
309     {
310         Log.v(TAG, "databaseSetupFinished() : " + result);
311     }
312
313     /**
314      *
315      *
316      */
317     @Override
318     public void selectedMenu(int itemId)
319     {
320         itemSelected(itemId);
321     }
322
323     /**
324      *
325      *
326      */
327     @Override
328     public void createdModelData(long indexId)
329     {
330         // データの登録
331         setupper.setIndexData(indexId);
332
333         // 一覧の更新
334         runOnUiThread(new Runnable()
335         {
336             @Override
337             public void run()
338             {
339                 if (summaryAdapter != null)
340                 {
341                     int count = summaryAdapter.getItemCount();
342                     summaryAdapter.notifyItemChanged(count - 1);
343                     summaryAdapter.notifyDataSetChanged();
344                 }
345
346                 // Toastで作成を通知する
347                 Toast toast = Toast.makeText(getApplicationContext(), getString(R.string.created_model_data), Toast.LENGTH_SHORT);
348                 toast.show();
349             }
350         });
351     }
352 }