1b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson/* 2fd544b56e462c0e871441bcd48797e022f61d8efIsaac Katzenelson * Copyright (C) 2012 The Android Open Source Project 3b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * 4b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * Licensed under the Apache License, Version 2.0 (the "License"); 5b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * you may not use this file except in compliance with the License. 6b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * You may obtain a copy of the License at 7b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * 8b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * http://www.apache.org/licenses/LICENSE-2.0 9b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * 10b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * Unless required by applicable law or agreed to in writing, software 11b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * distributed under the License is distributed on an "AS IS" BASIS, 12b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * See the License for the specific language governing permissions and 14b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson * limitations under the License. 15b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson */ 16b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 17b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelsonpackage com.android.deskclock.timer; 18b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 19b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelsonimport android.content.Context; 20b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelsonimport android.util.AttributeSet; 21b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelsonimport android.view.LayoutInflater; 22e55413e93d36454df7dd1de3380083244d7a8675Robyn Coultasimport android.view.ViewGroup; 23d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.widget.ImageView; 24b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelsonimport android.widget.LinearLayout; 25b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 26b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelsonimport com.android.deskclock.CircleTimerView; 27b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelsonimport com.android.deskclock.R; 28b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 29b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 30b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelsonpublic class TimerListItem extends LinearLayout { 31b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 32fd544b56e462c0e871441bcd48797e022f61d8efIsaac Katzenelson CountingTimerView mTimerText; 33b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson CircleTimerView mCircleView; 34d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang ImageView mResetAddButton; 35b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 36b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson long mTimerLength; 37b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 38b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson public TimerListItem(Context context) { 39b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson this(context, null); 40b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 41b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 42b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson public TimerListItem(Context context, AttributeSet attrs) { 43b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson super(context, attrs); 44b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 45b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 46b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson @Override 47b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson protected void onFinishInflate() { 48b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson super.onFinishInflate(); 49d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mTimerText = (CountingTimerView) findViewById(R.id.timer_time_text); 50d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mCircleView = (CircleTimerView) findViewById(R.id.timer_time); 51d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mResetAddButton = (ImageView) findViewById(R.id.reset_add); 52b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson mCircleView.setTimerMode(true); 53b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 54b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 5526fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein public void set(long timerLength, long timeLeft, boolean drawRed) { 56b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson if (mCircleView == null) { 57d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mCircleView = (CircleTimerView) findViewById(R.id.timer_time); 58b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson mCircleView.setTimerMode(true); 59b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 60b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson mTimerLength = timerLength; 61b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson mCircleView.setIntervalTime(mTimerLength); 6226fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein mCircleView.setPassedTime(timerLength - timeLeft, drawRed); 63d1489b661770a119da0b39c07a1b4a5a47dac5daItzhak Katzenelson invalidate(); 64b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 65b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 66b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson public void start() { 67d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mResetAddButton.setImageResource(R.drawable.ic_plusone); 68d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mResetAddButton.setContentDescription(getResources().getString(R.string.timer_plus_one)); 69b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson mCircleView.startIntervalAnimation(); 7080eafdf26fc496ffa112b9eb1b44d7b80333c80arachelzhang mTimerText.setTimeStrTextColor(false, true); 7100cb5981c984bc13aa2f6af510a9dd9a784f2af0Sam Blitzstein mTimerText.showTime(true); 721a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas mCircleView.setVisibility(VISIBLE); 73b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 74b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 75b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson public void pause() { 76d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mResetAddButton.setImageResource(R.drawable.ic_reset); 77d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mResetAddButton.setContentDescription(getResources().getString(R.string.timer_reset)); 78b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson mCircleView.pauseIntervalAnimation(); 7980eafdf26fc496ffa112b9eb1b44d7b80333c80arachelzhang mTimerText.setTimeStrTextColor(false, true); 80e55413e93d36454df7dd1de3380083244d7a8675Robyn Coultas mTimerText.showTime(true); 81e55413e93d36454df7dd1de3380083244d7a8675Robyn Coultas mCircleView.setVisibility(VISIBLE); 82b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 83b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 84b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson public void stop() { 85b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson mCircleView.stopIntervalAnimation(); 8680eafdf26fc496ffa112b9eb1b44d7b80333c80arachelzhang mTimerText.setTimeStrTextColor(false, true); 8700cb5981c984bc13aa2f6af510a9dd9a784f2af0Sam Blitzstein mTimerText.showTime(true); 881a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas mCircleView.setVisibility(VISIBLE); 891a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas } 901a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas 911a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas public void timesUp() { 921a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas mCircleView.abortIntervalAnimation(); 9380eafdf26fc496ffa112b9eb1b44d7b80333c80arachelzhang mTimerText.setTimeStrTextColor(true, true); 941a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas } 951a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas 961a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas public void done() { 971a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas mCircleView.stopIntervalAnimation(); 981a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas mCircleView.setVisibility(VISIBLE); 991a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas mCircleView.invalidate(); 10080eafdf26fc496ffa112b9eb1b44d7b80333c80arachelzhang mTimerText.setTimeStrTextColor(true, false); 101b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 102b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 103b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson public void setLength(long timerLength) { 104b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson mTimerLength = timerLength; 105b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson mCircleView.setIntervalTime(mTimerLength); 106d1489b661770a119da0b39c07a1b4a5a47dac5daItzhak Katzenelson mCircleView.invalidate(); 107b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 108b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson 1091a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas public void setTextBlink(boolean blink) { 11000cb5981c984bc13aa2f6af510a9dd9a784f2af0Sam Blitzstein mTimerText.showTime(!blink); 1111a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas } 1121a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas 1131a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas public void setCircleBlink(boolean blink) { 1141a1b54d6fe0c9e4f478a9e96f3cb6b49f72720edRobyn Coultas mCircleView.setVisibility(blink ? INVISIBLE : VISIBLE); 11526fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein } 11626fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein 117d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang public void setResetAddButton(boolean isRunning, OnClickListener listener) { 118d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang if (mResetAddButton == null) { 119d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mResetAddButton = (ImageView) findViewById(R.id.reset_add); 120d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang } 121d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mResetAddButton.setImageResource(isRunning ? R.drawable.ic_plusone : 122d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang R.drawable.ic_reset); 123d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mResetAddButton.setContentDescription(getResources().getString( 124d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang isRunning ? R.string.timer_plus_one : R.string.timer_reset)); 125d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mResetAddButton.setOnClickListener(listener); 126d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang } 127d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang 12826fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein public void setTime(long time, boolean forceUpdate) { 129b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson if (mTimerText == null) { 130d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang mTimerText = (CountingTimerView) findViewById(R.id.timer_time_text); 131b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 13226fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein mTimerText.setTime(time, false, forceUpdate); 133b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson } 134b29cd6c4f734e236a500f41d046105020b73513aIsaac Katzenelson} 135