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