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