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