163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson/* 24243fb005ecf4810eb2a1adc28df73abf431f178Isaac 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 1963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.content.Context; 2063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.util.AttributeSet; 2163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.view.LayoutInflater; 22a0bd6355c8f9f7f3009315661d219c231622044dRobyn Coultasimport android.view.ViewGroup; 2363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport android.widget.LinearLayout; 2463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 2563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport com.android.deskclock.CircleTimerView; 2663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonimport com.android.deskclock.R; 2763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 2863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 2963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelsonpublic class TimerListItem extends LinearLayout { 3063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 314243fb005ecf4810eb2a1adc28df73abf431f178Isaac Katzenelson CountingTimerView mTimerText; 3263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson CircleTimerView mCircleView; 3363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 3463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson long mTimerLength; 3563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 3663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson public TimerListItem(Context context) { 3763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson this(context, null); 3863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 3963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 4063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson public TimerListItem(Context context, AttributeSet attrs) { 4163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson super(context, attrs); 4263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson LayoutInflater layoutInflater = 4363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 4463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson layoutInflater.inflate(R.layout.timer_list_item, this); 4563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 4663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 4763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson @Override 4863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson protected void onFinishInflate() { 4963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson super.onFinishInflate(); 504243fb005ecf4810eb2a1adc28df73abf431f178Isaac Katzenelson mTimerText = (CountingTimerView)findViewById(R.id.timer_time_text); 5163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView = (CircleTimerView)findViewById(R.id.timer_time); 5263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView.setTimerMode(true); 5363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 5463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 55644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson public void set(long timerLength, long timeLeft, boolean drawRed) { 5663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson if (mCircleView == null) { 5763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView = (CircleTimerView)findViewById(R.id.timer_time); 5863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView.setTimerMode(true); 5963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 6063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mTimerLength = timerLength; 6163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView.setIntervalTime(mTimerLength); 62644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson mCircleView.setPassedTime(timerLength - timeLeft, drawRed); 63860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson invalidate(); 6463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 6563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 6663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson public void start() { 6763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView.startIntervalAnimation(); 6822ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mTimerText.redTimeStr(false, true); 69386d8b05069c95899149c4b18542fc18c3761314Sam Blitzstein mTimerText.showTime(true); 7022ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.setVisibility(VISIBLE); 7163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 7263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 7363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson public void pause() { 7463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView.pauseIntervalAnimation(); 7522ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mTimerText.redTimeStr(false, true); 76a0bd6355c8f9f7f3009315661d219c231622044dRobyn Coultas mTimerText.showTime(true); 77a0bd6355c8f9f7f3009315661d219c231622044dRobyn Coultas mCircleView.setVisibility(VISIBLE); 7863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 7963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 8063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson public void stop() { 8163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView.stopIntervalAnimation(); 8222ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mTimerText.redTimeStr(false, true); 83386d8b05069c95899149c4b18542fc18c3761314Sam Blitzstein mTimerText.showTime(true); 8422ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.setVisibility(VISIBLE); 8522ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas } 8622ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas 8722ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas public void timesUp() { 8822ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.abortIntervalAnimation(); 8922ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mTimerText.redTimeStr(true, true); 9022ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas } 9122ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas 9222ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas public void done() { 9322ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.stopIntervalAnimation(); 9422ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.setVisibility(VISIBLE); 9522ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.invalidate(); 9622ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mTimerText.redTimeStr(true, false); 9763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 9863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 9963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson public void setLength(long timerLength) { 10063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mTimerLength = timerLength; 10163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView.setIntervalTime(mTimerLength); 102860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson mCircleView.invalidate(); 10363211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 10463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 10522ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas public void setTextBlink(boolean blink) { 106386d8b05069c95899149c4b18542fc18c3761314Sam Blitzstein mTimerText.showTime(!blink); 10722ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas } 10822ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas 10922ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas public void setCircleBlink(boolean blink) { 11022ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.setVisibility(blink ? INVISIBLE : VISIBLE); 111644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson } 112644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson 113644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson public void setTime(long time, boolean forceUpdate) { 11463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson if (mTimerText == null) { 1154243fb005ecf4810eb2a1adc28df73abf431f178Isaac Katzenelson mTimerText = (CountingTimerView)findViewById(R.id.timer_time_text); 11663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 117644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson mTimerText.setTime(time, false, forceUpdate); 11863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 1192bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson 1202bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson // Used by animator to animate the size of a timer 1212bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson @SuppressWarnings("unused") 1222bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson public void setAnimatedHeight(int height) { 123a0bd6355c8f9f7f3009315661d219c231622044dRobyn Coultas ViewGroup.LayoutParams layoutParams = getLayoutParams(); 124a0bd6355c8f9f7f3009315661d219c231622044dRobyn Coultas if (layoutParams != null) { 125a0bd6355c8f9f7f3009315661d219c231622044dRobyn Coultas layoutParams.height = height; 126a0bd6355c8f9f7f3009315661d219c231622044dRobyn Coultas requestLayout(); 127a0bd6355c8f9f7f3009315661d219c231622044dRobyn Coultas } 1282bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson } 1292bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson 13063211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson} 131