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