• 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.content.Context;
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.data.TimerStringFormatter;
31 import com.android.deskclock.events.Events;
32 
33 public class TimerItemFragment extends Fragment {
34 
35     private static final String KEY_TIMER_ID = "KEY_TIMER_ID";
36     private int mTimerId;
37 
38     /** The public no-arg constructor required by all fragments. */
TimerItemFragment()39     public TimerItemFragment() {}
40 
newInstance(Timer timer)41     public static TimerItemFragment newInstance(Timer timer) {
42         final TimerItemFragment fragment = new TimerItemFragment();
43         final Bundle args = new Bundle();
44         args.putInt(KEY_TIMER_ID, timer.getId());
45         fragment.setArguments(args);
46         return fragment;
47     }
48 
49     @Override
onCreate(Bundle savedInstanceState)50     public void onCreate(Bundle savedInstanceState) {
51         super.onCreate(savedInstanceState);
52 
53         mTimerId = getArguments().getInt(KEY_TIMER_ID);
54     }
55 
56     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)57     public View onCreateView(LayoutInflater inflater, ViewGroup container,
58             Bundle savedInstanceState) {
59         final Timer timer = getTimer();
60         if (timer == null) {
61             return null;
62         }
63 
64         final TimerItem view = (TimerItem) inflater.inflate(R.layout.timer_item, container, false);
65         view.findViewById(R.id.reset_add).setOnClickListener(new ResetAddListener());
66         view.findViewById(R.id.timer_label).setOnClickListener(new EditLabelListener());
67         view.findViewById(R.id.timer_time_text).setOnClickListener(new TimeTextListener());
68         view.update(timer);
69 
70         return view;
71     }
72 
73     /**
74      * @return {@code true} iff the timer is in a state that requires continuous updates
75      */
updateTime()76     boolean updateTime() {
77         final TimerItem view = (TimerItem) getView();
78         if (view != null) {
79             final Timer timer = getTimer();
80             view.update(timer);
81             return !timer.isReset();
82         }
83 
84         return false;
85     }
86 
getTimerId()87     int getTimerId() {
88         return mTimerId;
89     }
90 
getTimer()91     Timer getTimer() {
92         return DataModel.getDataModel().getTimer(getTimerId());
93     }
94 
95     private final class ResetAddListener implements View.OnClickListener {
96         @Override
onClick(View v)97         public void onClick(View v) {
98             final Timer timer = getTimer();
99             if (timer.isPaused()) {
100                 DataModel.getDataModel().resetOrDeleteTimer(timer, R.string.label_deskclock);
101             } else if (timer.isRunning() || timer.isExpired() || timer.isMissed()) {
102                 DataModel.getDataModel().addTimerMinute(timer);
103                 Events.sendTimerEvent(R.string.action_add_minute, R.string.label_deskclock);
104 
105                 final Context context = v.getContext();
106                 // Must use getTimer() because old timer is no longer accurate.
107                 final long currentTime = getTimer().getRemainingTime();
108                 if (currentTime > 0) {
109                     v.announceForAccessibility(TimerStringFormatter.formatString(
110                             context, R.string.timer_accessibility_one_minute_added, currentTime,
111                             true));
112                 }
113             }
114         }
115     }
116 
117     private final class EditLabelListener implements View.OnClickListener {
118         @Override
onClick(View v)119         public void onClick(View v) {
120             final LabelDialogFragment fragment = LabelDialogFragment.newInstance(getTimer());
121             LabelDialogFragment.show(getFragmentManager(), fragment);
122         }
123     }
124 
125     private final class TimeTextListener implements View.OnClickListener {
126         @Override
onClick(View view)127         public void onClick(View view) {
128             final Timer clickedTimer = getTimer();
129             if (clickedTimer.isPaused() || clickedTimer.isReset()) {
130                 DataModel.getDataModel().startTimer(clickedTimer);
131             } else if (clickedTimer.isRunning()) {
132                 DataModel.getDataModel().pauseTimer(clickedTimer);
133             }
134         }
135     }
136 }