• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.deskclock.timer;
18 
19 import android.app.Fragment;
20 import android.app.FragmentTransaction;
21 import android.os.Bundle;
22 import android.view.LayoutInflater;
23 import android.view.View;
24 import android.view.ViewGroup;
25 
26 import com.android.deskclock.LabelDialogFragment;
27 import com.android.deskclock.R;
28 import com.android.deskclock.data.DataModel;
29 import com.android.deskclock.data.Timer;
30 import com.android.deskclock.events.Events;
31 
32 public class TimerItemFragment extends Fragment {
33 
34     private static final String KEY_TIMER_ID = "KEY_TIMER_ID";
35     private int mTimerId;
36 
37     /** The public no-arg constructor required by all fragments. */
TimerItemFragment()38     public TimerItemFragment() {}
39 
newInstance(Timer timer)40     public static TimerItemFragment newInstance(Timer timer) {
41         final TimerItemFragment fragment = new TimerItemFragment();
42         final Bundle args = new Bundle();
43         args.putInt(KEY_TIMER_ID, timer.getId());
44         fragment.setArguments(args);
45         return fragment;
46     }
47 
48     @Override
onCreate(Bundle savedInstanceState)49     public void onCreate(Bundle savedInstanceState) {
50         super.onCreate(savedInstanceState);
51 
52         mTimerId = getArguments().getInt(KEY_TIMER_ID);
53     }
54 
55     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)56     public View onCreateView(LayoutInflater inflater, ViewGroup container,
57             Bundle savedInstanceState) {
58         final TimerItem view = (TimerItem) inflater.inflate(R.layout.timer_item, container, false);
59         view.findViewById(R.id.reset_add).setOnClickListener(new ResetAddListener());
60         view.findViewById(R.id.timer_label).setOnClickListener(new EditLabelListener());
61         view.update(getTimer());
62 
63         return view;
64     }
65 
66     /**
67      * @return {@code true} iff the timer is in a state that requires continuous updates
68      */
updateTime()69     boolean updateTime() {
70         final TimerItem view = (TimerItem) getView();
71         if (view != null) {
72             final Timer timer = getTimer();
73             view.update(timer);
74             return !timer.isReset();
75         }
76 
77         return false;
78     }
79 
getTimerId()80     int getTimerId() {
81         return mTimerId;
82     }
83 
getTimer()84     Timer getTimer() {
85         return DataModel.getDataModel().getTimer(getTimerId());
86     }
87 
88     private class ResetAddListener implements View.OnClickListener {
89         @Override
onClick(View v)90         public void onClick(View v) {
91             final Timer timer = getTimer();
92             if (timer.isPaused()) {
93                 DataModel.getDataModel().resetOrDeleteTimer(timer, R.string.label_deskclock);
94             } else if (timer.isRunning() || timer.isExpired()) {
95                 DataModel.getDataModel().addTimerMinute(timer);
96                 Events.sendTimerEvent(R.string.action_add_minute, R.string.label_deskclock);
97             }
98         }
99     }
100 
101     private class EditLabelListener implements View.OnClickListener {
102 
103         private static final String TAG = "label_dialog";
104 
105         @Override
onClick(View v)106         public void onClick(View v) {
107             final FragmentTransaction ft = getFragmentManager().beginTransaction();
108             final Fragment existingFragment = getFragmentManager().findFragmentByTag(TAG);
109             if (existingFragment != null) {
110                 ft.remove(existingFragment);
111             }
112             ft.addToBackStack(null);
113             LabelDialogFragment.newInstance(getTimer()).show(ft, TAG);
114         }
115     }
116 }