Home | History | Annotate | Download | only in timer
      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 }