163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson/*
263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson * Copyright (C) 2012 The Android Open Source Project
363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson *
463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson * Licensed under the Apache License, Version 2.0 (the "License");
563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson * you may not use this file except in compliance with the License.
663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson * You may obtain a copy of the License at
763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson *
863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson *      http://www.apache.org/licenses/LICENSE-2.0
963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson *
1063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson * Unless required by applicable law or agreed to in writing, software
1163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson * distributed under the License is distributed on an "AS IS" BASIS,
1263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson * See the License for the specific language governing permissions and
1463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson * limitations under the License.
1563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson */
1663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
1763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonpackage com.android.deskclock.timer;
1863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
19d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultasimport android.content.Context;
2063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.content.SharedPreferences;
2163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.os.Parcel;
2263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.os.Parcelable;
2363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.util.Log;
2463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.view.View;
2563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
26d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultasimport com.android.deskclock.R;
27a65d3eb00d543735305221f86ce630c8650e65e2Isaac Katzenelsonimport com.android.deskclock.Utils;
28a65d3eb00d543735305221f86ce630c8650e65e2Isaac Katzenelson
2963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport java.util.ArrayList;
302e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultasimport java.util.Collections;
312e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultasimport java.util.Comparator;
3263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport java.util.HashSet;
33f67abfd4e9d546732d67d0b3afe57921e34b7dcdIsaac Katzenelsonimport java.util.Iterator;
3463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport java.util.Set;
3563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
3663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonpublic class TimerObj implements Parcelable {
3763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
3863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    private static final String TAG = "TimerObj";
39860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson    // Max timer length is 9 hours + 99 minutes + 9 seconds
40b2e25c2811320be6f719d3dfe9931cdc06212759Isaac Katzenelson    public static final long MAX_TIMER_LENGTH = (9 * 3600 + 99 * 60  + 99) * 1000;
41b2e25c2811320be6f719d3dfe9931cdc06212759Isaac Katzenelson    public static final long MINUTE_IN_MILLIS = 60 * 1000;
4263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
4363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public int mTimerId;             // Unique id
4463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public long mStartTime;          // With mTimeLeft , used to calculate the correct time
4563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public long mTimeLeft;           // in the timer.
46860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson    public long mOriginalLength;     // length set at start of timer and by +1 min after times up
47860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson    public long mSetupLength;        // length set at start of timer
4863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public View mView;
4963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public int mState;
501ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson    public String mLabel;
5104d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson    public boolean mDeleteAfterUse;
5263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
5363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public static final int STATE_RUNNING = 1;
5463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public static final int STATE_STOPPED = 2;
5563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public static final int STATE_TIMESUP = 3;
5663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public static final int STATE_DONE = 4;
5763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public static final int STATE_RESTART = 5;
58504ed1aa7d11c7667d089af4bccbf18b255b36d5Isaac Katzenelson    public static final int STATE_DELETED = 6;
5963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
6063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    private static final String PREF_TIMER_ID = "timer_id_";
6163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    private static final String PREF_START_TIME  = "timer_start_time_";
6263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    private static final String PREF_TIME_LEFT = "timer_time_left_";
6363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    private static final String PREF_ORIGINAL_TIME = "timer_original_timet_";
64860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson    private static final String PREF_SETUP_TIME = "timer_setup_timet_";
6563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    private static final String PREF_STATE = "timer_state_";
661ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson    private static final String PREF_LABEL = "timer_label_";
6704d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson    private static final String PREF_DELETE_AFTER_USE = "delete_after_use_";
6863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
6963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    private static final String PREF_TIMERS_LIST = "timers_list";
7063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
7163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public static final Parcelable.Creator<TimerObj> CREATOR = new Parcelable.Creator<TimerObj>() {
7263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        @Override
7363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        public TimerObj createFromParcel(Parcel p) {
7463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            return new TimerObj(p);
7563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        }
7663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
7763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        @Override
7863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        public TimerObj[] newArray(int size) {
7963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            return new TimerObj[size];
8063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        }
8163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    };
8263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
8363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public void writeToSharedPref(SharedPreferences prefs) {
8463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        SharedPreferences.Editor editor = prefs.edit();
8563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        String key = PREF_TIMER_ID + Integer.toString(mTimerId);
8663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        String id = Integer.toString(mTimerId);
8763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.putInt (key, mTimerId);
8863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_START_TIME + id;
8963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.putLong (key, mStartTime);
9063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_TIME_LEFT + id;
9163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.putLong (key, mTimeLeft);
9263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_ORIGINAL_TIME + id;
9363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.putLong (key, mOriginalLength);
94860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson        key = PREF_SETUP_TIME + id;
95860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson        editor.putLong (key, mSetupLength);
9663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_STATE + id;
9763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.putInt (key, mState);
9863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        Set <String> timersList = prefs.getStringSet(PREF_TIMERS_LIST, new HashSet<String>());
9963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        timersList.add(id);
10063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.putStringSet(PREF_TIMERS_LIST, timersList);
1011ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        key = PREF_LABEL + id;
1021ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        editor.putString(key, mLabel);
10304d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        key = PREF_DELETE_AFTER_USE + id;
10404d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        editor.putBoolean(key, mDeleteAfterUse);
10563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.apply();
10663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
10763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
10863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
10963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public void readFromSharedPref(SharedPreferences prefs) {
11063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        String id = Integer.toString(mTimerId);
11163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        String key = PREF_START_TIME + id;
11263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        mStartTime = prefs.getLong(key, 0);
11363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_TIME_LEFT + id;
11463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        mTimeLeft = prefs.getLong(key, 0);
11563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_ORIGINAL_TIME + id;
11663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        mOriginalLength = prefs.getLong(key, 0);
117860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson        key = PREF_SETUP_TIME + id;
118860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson        mSetupLength = prefs.getLong(key, 0);
11963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_STATE + id;
12063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        mState = prefs.getInt(key, 0);
1211ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        key = PREF_LABEL + id;
1221ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        mLabel = prefs.getString(key, "");
12304d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        key = PREF_DELETE_AFTER_USE + id;
12404d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        mDeleteAfterUse = prefs.getBoolean(key, false);
12563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
12663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
12763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public void deleteFromSharedPref(SharedPreferences prefs) {
12863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        SharedPreferences.Editor editor = prefs.edit();
12963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        String key = PREF_TIMER_ID + Integer.toString(mTimerId);
13063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        String id = Integer.toString(mTimerId);
13163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.remove (key);
13263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_START_TIME + id;
13363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.remove (key);
13463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_TIME_LEFT + id;
13563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.remove (key);
13663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_ORIGINAL_TIME + id;
13763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.remove (key);
13804d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        key = PREF_SETUP_TIME + id;
13904d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        editor.remove (key);
14063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        key = PREF_STATE + id;
14163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.remove (key);
14263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        Set <String> timersList = prefs.getStringSet(PREF_TIMERS_LIST, new HashSet<String>());
14363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        timersList.remove(id);
14463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.putStringSet(PREF_TIMERS_LIST, timersList);
1451ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        key = PREF_LABEL + id;
1461ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        editor.remove(key);
14704d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        key = PREF_DELETE_AFTER_USE + id;
14804d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        editor.remove(key);
14963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        editor.commit();
15063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        //dumpTimersFromSharedPrefs(prefs);
15163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
15263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
15363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
15463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    @Override
15563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public int describeContents() {
15663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        return 0;
15763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
15863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
15963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    @Override
16063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public void writeToParcel(Parcel dest, int flags) {
16163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        dest.writeInt(mTimerId);
16263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        dest.writeLong(mStartTime);
16363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        dest.writeLong(mTimeLeft);
16463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        dest.writeLong(mOriginalLength);
165860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson        dest.writeLong(mSetupLength);
166871d7d00b561dc0e100c5ac7f79542d20ae9578dIsaac Katzenelson        dest.writeInt(mState);
1671ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        dest.writeString(mLabel);
16863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
16963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
17063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public TimerObj(Parcel p) {
17163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        mTimerId = p.readInt();
17263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        mStartTime = p.readLong();
17363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        mTimeLeft = p.readLong();
17463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        mOriginalLength = p.readLong();
175860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson        mSetupLength = p.readLong();
176871d7d00b561dc0e100c5ac7f79542d20ae9578dIsaac Katzenelson        mState = p.readInt();
1771ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        mLabel = p.readString();
17863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
17963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
18063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public TimerObj() {
18104d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        this(0);
18263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
18363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
18463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public TimerObj(long timerLength) {
18563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson      init(timerLength);
18663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
18763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
18804d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson    public TimerObj(long length, String label) {
18904d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        this(length);
19004d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson        mLabel = label != null ? label : "";
19104d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson    }
19204d0eaaf489d08c56104d9b71d0d2edecb4e27a5Isaac Katzenelson
19363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    private void init (long length) {
194d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas        /* TODO: mTimerId must avoid StopwatchService.NOTIFICATION_ID,
195d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas         * TimerReceiver.IN_USE_NOTIFICATION_ID, and alarm ID's (which seem to be 1, 2, ..)
196d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas         */
197a65d3eb00d543735305221f86ce630c8650e65e2Isaac Katzenelson        mTimerId = (int) Utils.getTimeNow();
198a65d3eb00d543735305221f86ce630c8650e65e2Isaac Katzenelson        mStartTime = Utils.getTimeNow();
199860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson        mTimeLeft = mOriginalLength = mSetupLength = length;
2001ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        mLabel = "";
20163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
20263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
203644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson    public long updateTimeLeft(boolean forceUpdate) {
204644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson        if (isTicking() || forceUpdate) {
205a65d3eb00d543735305221f86ce630c8650e65e2Isaac Katzenelson            long millis = Utils.getTimeNow();
206644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson            mTimeLeft = mOriginalLength - (millis - mStartTime);
207644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson        }
20863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        return mTimeLeft;
20963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
21063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
211d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas    public String getLabelOrDefault(Context context) {
212d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas        return (mLabel == null || mLabel.length() == 0) ? context.getString(
213d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas                R.string.timer_notification_label)
214d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas                : mLabel;
215d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas    }
216d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas
2171ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson    public boolean isTicking() {
2181ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        return mState == STATE_RUNNING || mState == STATE_TIMESUP;
2191ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson    }
2201ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson
2211ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson    public boolean isInUse() {
2221ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson        return mState == STATE_RUNNING || mState == STATE_STOPPED;
2231ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson    }
2241ce69abc1f8bea2d7903f24ee32fec42cee83634Itzhak Katzenelson
225860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson    public void addTime(long time) {
226a65d3eb00d543735305221f86ce630c8650e65e2Isaac Katzenelson        mTimeLeft = mOriginalLength - (Utils.getTimeNow() - mStartTime);
227860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson        if (mTimeLeft < MAX_TIMER_LENGTH - time) {
2287d44b054055c9491570a58f14f2ae5b5e077c05aSam Blitzstein                mOriginalLength += time;
229860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson        }
230860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson    }
231860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson
232d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas    public boolean getDeleteAfterUse() {
233d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas        return mDeleteAfterUse;
234d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas    }
235d5202b46aaf96b1d217cedba645f28aa1fee04c6Robyn Coultas
236871d7d00b561dc0e100c5ac7f79542d20ae9578dIsaac Katzenelson    public long getTimesupTime() {
237871d7d00b561dc0e100c5ac7f79542d20ae9578dIsaac Katzenelson        return mStartTime + mOriginalLength;
238871d7d00b561dc0e100c5ac7f79542d20ae9578dIsaac Katzenelson    }
239871d7d00b561dc0e100c5ac7f79542d20ae9578dIsaac Katzenelson
240871d7d00b561dc0e100c5ac7f79542d20ae9578dIsaac Katzenelson
24163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public static void getTimersFromSharedPrefs(
24263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            SharedPreferences prefs, ArrayList<TimerObj> timers) {
24363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        Object[] timerStrings =
24463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                prefs.getStringSet(PREF_TIMERS_LIST, new HashSet<String>()).toArray();
24563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        if (timerStrings.length > 0) {
24663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            for (int i = 0; i < timerStrings.length; i++) {
24763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                TimerObj t = new TimerObj();
24863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                t.mTimerId = Integer.parseInt((String)timerStrings[i]);
24963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                t.readFromSharedPref(prefs);
25063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                timers.add(t);
25163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            }
2522e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultas            Collections.sort(timers, new Comparator<TimerObj>() {
2532e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultas                @Override
2542e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultas                public int compare(TimerObj timerObj1, TimerObj timerObj2) {
2552e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultas                   return timerObj2.mTimerId - timerObj1.mTimerId;
2562e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultas                }
2572e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultas            });
25863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        }
25963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
26063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
2612e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultas    public static void getTimersFromSharedPrefs(
2622e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultas            SharedPreferences prefs, ArrayList<TimerObj> timers, int match) {
2632e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultas        Object[] timerStrings = prefs.getStringSet(PREF_TIMERS_LIST, new HashSet<String>())
2642e553c28069f8b2f53821cb9ede7bd395060006bRobyn Coultas                .toArray();
265647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas        if (timerStrings.length > 0) {
266647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas            for (int i = 0; i < timerStrings.length; i++) {
267647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas                TimerObj t = new TimerObj();
268647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas                t.mTimerId = Integer.parseInt((String) timerStrings[i]);
269647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas                t.readFromSharedPref(prefs);
270647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas                if (t.mState == match) {
271647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas                    timers.add(t);
272647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas                }
273647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas            }
274647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas        }
275647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas    }
276647353dd437f8c075aa96f3b98efb84442e8b7bfRobyn Coultas
27763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public static void putTimersInSharedPrefs(
27863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            SharedPreferences prefs, ArrayList<TimerObj> timers) {
27963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        if (timers.size() > 0) {
28063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            for (int i = 0; i < timers.size(); i++) {
28163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                TimerObj t = timers.get(i);
28263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                timers.get(i).writeToSharedPref(prefs);
28363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            }
28463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        }
28563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
28663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
28763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    public static void dumpTimersFromSharedPrefs(
28863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            SharedPreferences prefs) {
28963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        Object[] timerStrings =
29063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                prefs.getStringSet(PREF_TIMERS_LIST, new HashSet<String>()).toArray();
29163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        Log.v(TAG,"--------------------- timers list in shared prefs");
29263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        if (timerStrings.length > 0) {
29363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            for (int i = 0; i < timerStrings.length; i++) {
29463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                int id = Integer.parseInt((String)timerStrings[i]);
29563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson                Log.v(TAG,"---------------------timer  " + (i + 1) + ": id - " + id);
29663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson            }
29763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson        }
29863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson    }
29963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
300f40eb1debfba95dcf4a916e7e9e604cc5021de41Isaac Katzenelson    public static void resetTimersInSharedPrefs(SharedPreferences prefs) {
301f67abfd4e9d546732d67d0b3afe57921e34b7dcdIsaac Katzenelson        ArrayList<TimerObj> timers = new  ArrayList<TimerObj>();
302f67abfd4e9d546732d67d0b3afe57921e34b7dcdIsaac Katzenelson        getTimersFromSharedPrefs(prefs, timers);
303f67abfd4e9d546732d67d0b3afe57921e34b7dcdIsaac Katzenelson        Iterator<TimerObj> i = timers.iterator();
304f67abfd4e9d546732d67d0b3afe57921e34b7dcdIsaac Katzenelson        while(i.hasNext()) {
305f40eb1debfba95dcf4a916e7e9e604cc5021de41Isaac Katzenelson            TimerObj t = i.next();
306f40eb1debfba95dcf4a916e7e9e604cc5021de41Isaac Katzenelson            t.mState = TimerObj.STATE_RESTART;
307f40eb1debfba95dcf4a916e7e9e604cc5021de41Isaac Katzenelson            t.mTimeLeft = t. mOriginalLength = t.mSetupLength;
308f40eb1debfba95dcf4a916e7e9e604cc5021de41Isaac Katzenelson            t.writeToSharedPref(prefs);
309f67abfd4e9d546732d67d0b3afe57921e34b7dcdIsaac Katzenelson        }
310f67abfd4e9d546732d67d0b3afe57921e34b7dcdIsaac Katzenelson    }
31163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson
31263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson}
313