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; 226b9508b70d9bb11590f96ef4ff6d5dfc703ac868Isaac Katzenelsonimport android.widget.ImageButton; 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); 7663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 7763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 7863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson public void stop() { 7963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView.stopIntervalAnimation(); 8022ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mTimerText.redTimeStr(false, true); 81386d8b05069c95899149c4b18542fc18c3761314Sam Blitzstein mTimerText.showTime(true); 8222ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.setVisibility(VISIBLE); 8322ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas } 8422ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas 8522ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas public void timesUp() { 8622ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.abortIntervalAnimation(); 8722ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mTimerText.redTimeStr(true, true); 8822ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas } 8922ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas 9022ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas public void done() { 9122ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.stopIntervalAnimation(); 9222ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.setVisibility(VISIBLE); 9322ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.invalidate(); 9422ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mTimerText.redTimeStr(true, false); 9563211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 9663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 9763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson public void setLength(long timerLength) { 9863211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mTimerLength = timerLength; 9963211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson mCircleView.setIntervalTime(mTimerLength); 100860de0e94f5588369985063127512dc2270cd7deItzhak Katzenelson mCircleView.invalidate(); 10163211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 10263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson 10322ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas public void setTextBlink(boolean blink) { 104386d8b05069c95899149c4b18542fc18c3761314Sam Blitzstein mTimerText.showTime(!blink); 10522ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas } 10622ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas 10722ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas public void setCircleBlink(boolean blink) { 10822ad7c9ea127b06ee0dc0cb809b59bab33afbf42Robyn Coultas mCircleView.setVisibility(blink ? INVISIBLE : VISIBLE); 109644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson } 110644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson 111644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson public void setTime(long time, boolean forceUpdate) { 11263211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson if (mTimerText == null) { 1134243fb005ecf4810eb2a1adc28df73abf431f178Isaac Katzenelson mTimerText = (CountingTimerView)findViewById(R.id.timer_time_text); 11463211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 115644a5d887d7033e669ac362a8ed6e79197d13c72Itzhak Katzenelson mTimerText.setTime(time, false, forceUpdate); 11663211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson } 1172bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson 1182bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson // Used by animator to animate the size of a timer 1192bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson @SuppressWarnings("unused") 1202bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson public void setAnimatedHeight(int height) { 1212bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson getLayoutParams().height = height; 1222bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson requestLayout(); 1232bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson } 1242bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson 1252bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson 1262bf39f770633f87dd5cd669b0a373298956fd6d6Isaac Katzenelson 12763211efa1565b5dc171938740ba183302d0e46f3Isaac Katzenelson} 128