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. */ 39 public TimerItemFragment() {} 40 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 50 public void onCreate(Bundle savedInstanceState) { 51 super.onCreate(savedInstanceState); 52 53 mTimerId = getArguments().getInt(KEY_TIMER_ID); 54 } 55 56 @Override 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 */ 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 87 int getTimerId() { 88 return mTimerId; 89 } 90 91 Timer getTimer() { 92 return DataModel.getDataModel().getTimer(getTimerId()); 93 } 94 95 private final class ResetAddListener implements View.OnClickListener { 96 @Override 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 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 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 }