1b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson/*
2b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson * Copyright (C) 2008 The Android Open Source Project
3b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson *
4b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson * Licensed under the Apache License, Version 2.0 (the "License");
5b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson * you may not use this file except in compliance with the License.
6b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson * You may obtain a copy of the License at
7b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson *
8b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson *      http://www.apache.org/licenses/LICENSE-2.0
9b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson *
10b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson * Unless required by applicable law or agreed to in writing, software
11b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson * distributed under the License is distributed on an "AS IS" BASIS,
12b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson * See the License for the specific language governing permissions and
14b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson * limitations under the License.
15b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson */
16b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
17b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelsonpackage com.android.deskclock;
18b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
193a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoroimport android.animation.Animator;
203a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoroimport android.animation.AnimatorListenerAdapter;
21b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelsonimport android.content.Context;
22749b3b31aa96a520784ce92262c99644de9d01fcRobyn Coultasimport android.content.res.Configuration;
23912542db3876aa3eee68a6d0cdee7d39ea233bf1Budi Kusmiantoroimport android.graphics.Color;
245084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultasimport android.os.Bundle;
25b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelsonimport android.util.AttributeSet;
26b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelsonimport android.view.LayoutInflater;
27b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelsonimport android.view.View;
28b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelsonimport android.widget.Button;
294ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelsonimport android.widget.ImageButton;
30b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelsonimport android.widget.LinearLayout;
31b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
3243474e446f4fd103b0f609d1be75c4825adb8b58Isaac Katzenelsonimport com.android.deskclock.timer.TimerView;
3343474e446f4fd103b0f609d1be75c4825adb8b58Isaac Katzenelson
34b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
35c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzsteinpublic class TimerSetupView extends LinearLayout implements Button.OnClickListener,
36c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        Button.OnLongClickListener{
37b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
38683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    protected int mInputSize = 5;
39b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
40683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    protected final Button mNumbers [] = new Button [10];
41683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    protected int mInput [] = new int [mInputSize];
42683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    protected int mInputPointer = -1;
43683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    protected Button mLeft, mRight;
44d83613a9aa4fd1088cf08ea01a5d6534ed5f20a7rachelzhang    protected ImageButton mStart;
45683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    protected ImageButton mDelete;
46683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    protected TimerView mEnteredTime;
47d83613a9aa4fd1088cf08ea01a5d6534ed5f20a7rachelzhang    protected View mDivider;
48683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    protected final Context mContext;
49b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
503a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    private final AnimatorListenerAdapter mHideFabAnimatorListener = new AnimatorListenerAdapter() {
513a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        @Override
523a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        public void onAnimationEnd(Animator animation) {
533a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro            if (mStart != null) {
541d7356386ee17946aa68b82917ef83588e219d00rachelzhang                mStart.setScaleX(1.0f);
551d7356386ee17946aa68b82917ef83588e219d00rachelzhang                mStart.setScaleY(1.0f);
563a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro                mStart.setVisibility(View.INVISIBLE);
573a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro            }
583a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        }
593a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    };
603a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro
613a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    private final AnimatorListenerAdapter mShowFabAnimatorListener = new AnimatorListenerAdapter() {
623a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        @Override
633a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        public void onAnimationStart(Animator animation) {
643a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro            if (mStart != null) {
653a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro                mStart.setVisibility(View.VISIBLE);
663a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro            }
673a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        }
683a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    };
693a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro
70b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    public TimerSetupView(Context context) {
71b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        this(context, null);
72b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    }
73b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
74b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    public TimerSetupView(Context context, AttributeSet attrs) {
75b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        super(context, attrs);
76b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mContext = context;
77b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        LayoutInflater layoutInflater =
78b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson                (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
7956be6dac87bd9735cef70da1b39ce8c9d89148f0Robyn Coultas        layoutInflater.inflate(R.layout.time_setup_view, this);
80b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    }
81b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
82b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    @Override
83b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    protected void onFinishInflate() {
84b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        super.onFinishInflate();
85b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
86b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        View v1 = findViewById(R.id.first);
87b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        View v2 = findViewById(R.id.second);
88b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        View v3 = findViewById(R.id.third);
89b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        View v4 = findViewById(R.id.fourth);
90b3b120a990057c4ce6a92fafcc20c8cb6207cf80rachelzhang
914ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson        mEnteredTime = (TimerView)findViewById(R.id.timer_time_text);
924ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson        mDelete = (ImageButton)findViewById(R.id.delete);
934ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson        mDelete.setOnClickListener(this);
94c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        mDelete.setOnLongClickListener(this);
95d83613a9aa4fd1088cf08ea01a5d6534ed5f20a7rachelzhang        mDivider = findViewById(R.id.divider);
96b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
97b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mNumbers[1] = (Button)v1.findViewById(R.id.key_left);
98b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mNumbers[2] = (Button)v1.findViewById(R.id.key_middle);
99b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mNumbers[3] = (Button)v1.findViewById(R.id.key_right);
100b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
101b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mNumbers[4] = (Button)v2.findViewById(R.id.key_left);
102b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mNumbers[5] = (Button)v2.findViewById(R.id.key_middle);
103b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mNumbers[6] = (Button)v2.findViewById(R.id.key_right);
104b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
105b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mNumbers[7] = (Button)v3.findViewById(R.id.key_left);
106b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mNumbers[8] = (Button)v3.findViewById(R.id.key_middle);
107b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mNumbers[9] = (Button)v3.findViewById(R.id.key_right);
108b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
109b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mLeft = (Button)v4.findViewById(R.id.key_left);
110b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mNumbers[0] = (Button)v4.findViewById(R.id.key_middle);
111b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mRight = (Button)v4.findViewById(R.id.key_right);
11226fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein        setLeftRightEnabled(false);
113b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
114b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        for (int i = 0; i < 10; i++) {
115b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson            mNumbers[i].setOnClickListener(this);
116912542db3876aa3eee68a6d0cdee7d39ea233bf1Budi Kusmiantoro            mNumbers[i].setText(String.format("%d", i));
117912542db3876aa3eee68a6d0cdee7d39ea233bf1Budi Kusmiantoro            mNumbers[i].setTextColor(Color.WHITE);
118912542db3876aa3eee68a6d0cdee7d39ea233bf1Budi Kusmiantoro            mNumbers[i].setTag(R.id.numbers_key, new Integer(i));
119b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        }
120b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        updateTime();
121b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    }
122b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
123d83613a9aa4fd1088cf08ea01a5d6534ed5f20a7rachelzhang    public void registerStartButton(ImageButton start) {
124c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        mStart = start;
1253a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        initializeStartButtonVisibility();
126c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein    }
127c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein
1283a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    private void initializeStartButtonVisibility() {
129c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        if (mStart != null) {
1303a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro            mStart.setVisibility(isInputHasValue() ? View.VISIBLE : View.INVISIBLE);
131c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        }
132c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein    }
133c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein
1343a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    private void updateStartButton() {
1353a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        setFabButtonVisibility(isInputHasValue() /* show or hide */);
1363a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    }
1373a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro
138d83613a9aa4fd1088cf08ea01a5d6534ed5f20a7rachelzhang    public void updateDeleteButtonAndDivider() {
1393a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        final boolean enabled = isInputHasValue();
140c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        if (mDelete != null) {
141c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein            mDelete.setEnabled(enabled);
14269a4b4f2810100f19e997b4e539f1b0e56b0afb5rachelzhang            mDivider.setBackgroundResource(enabled ? R.color.hot_pink : R.color.dialog_gray);
143c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        }
144c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein    }
145b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
1463a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    private boolean isInputHasValue() {
1473a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        return mInputPointer != -1;
1483a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    }
1493a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro
1503a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    private void setFabButtonVisibility(boolean show) {
1513a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        final int finalVisibility = show ? View.VISIBLE : View.INVISIBLE;
1523a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        if (mStart == null || mStart.getVisibility() == finalVisibility) {
1533a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro            // Fab is not initialized yet or already shown/hidden
1543a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro            return;
1553a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        }
1563a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro
157d2ac32f6d0975877feb60acb76de8b4b1f794d4bJustin Klaassen        final Animator scaleAnimator = AnimatorUtils.getScaleAnimator(
158d2ac32f6d0975877feb60acb76de8b4b1f794d4bJustin Klaassen                mStart, show ? 0.0f : 1.0f, show ? 1.0f : 0.0f);
159d2ac32f6d0975877feb60acb76de8b4b1f794d4bJustin Klaassen        scaleAnimator.setDuration(AnimatorUtils.ANIM_DURATION_SHORT);
160d2ac32f6d0975877feb60acb76de8b4b1f794d4bJustin Klaassen        scaleAnimator.addListener(show ? mShowFabAnimatorListener : mHideFabAnimatorListener);
161d2ac32f6d0975877feb60acb76de8b4b1f794d4bJustin Klaassen        scaleAnimator.start();
1623a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro    }
1633a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro
164b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    @Override
165b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    public void onClick(View v) {
166683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson        doOnClick(v);
167c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        updateStartButton();
168d83613a9aa4fd1088cf08ea01a5d6534ed5f20a7rachelzhang        updateDeleteButtonAndDivider();
169683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    }
170683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson
171683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    protected void doOnClick(View v) {
172b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
173b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        Integer val = (Integer) v.getTag(R.id.numbers_key);
174b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        // A number was pressed
175b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        if (val != null) {
176b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson            // pressing "0" as the first digit does nothing
177b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson            if (mInputPointer == -1 && val == 0) {
178b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson                return;
179b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson            }
180683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson            if (mInputPointer < mInputSize - 1) {
1814ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson                for (int i = mInputPointer; i >= 0; i--) {
1824ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson                    mInput[i+1] = mInput[i];
1834ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson                }
184b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson                mInputPointer++;
1854ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson                mInput [0] = val;
186b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson                updateTime();
187b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson            }
188b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson            return;
189b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        }
190b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
191b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        // other keys
1924ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson        if (v == mDelete) {
1934ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson            if (mInputPointer >= 0) {
1944ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson                for (int i = 0; i < mInputPointer; i++) {
1954ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson                    mInput[i] = mInput[i + 1];
196b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson                }
1974ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson                mInput[mInputPointer] = 0;
1984ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson                mInputPointer--;
1994ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson                updateTime();
2004ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson            }
201b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        }
202b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    }
203b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
204c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein    @Override
205c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein    public boolean onLongClick(View v) {
206c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        if (v == mDelete) {
207c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein            reset();
208c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein            updateStartButton();
209d83613a9aa4fd1088cf08ea01a5d6534ed5f20a7rachelzhang            updateDeleteButtonAndDivider();
210c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein            return true;
211c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        }
212c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein        return false;
213c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein    }
214c5679e9c0bb95b68d6909f6a5a6a59f6f59dec1aSam Blitzstein
215683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson    protected void updateTime() {
21656be6dac87bd9735cef70da1b39ce8c9d89148f0Robyn Coultas        mEnteredTime.setTime(mInput[4], mInput[3], mInput[2],
2172307cc404a412bb4067240fb295c4c9142dbbc87Isaac Katzenelson                mInput[1] * 10 + mInput[0]);
218b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    }
219b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson
220b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    public void reset() {
221683b5100b411fe9a747b9a194bf75caa714073c4Isaac Katzenelson        for (int i = 0; i < mInputSize; i ++) {
222b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson            mInput[i] = 0;
223b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        }
224b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        mInputPointer = -1;
225b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson        updateTime();
226b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson    }
2274ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson
2284ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson    public int getTime() {
2294ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson        return mInput[4] * 3600 + mInput[3] * 600 + mInput[2] * 60 + mInput[1] * 10 + mInput[0];
2304ad5b75cd1c5ec94b2122f10f2f02137e1c0e9b2Isaac Katzenelson    }
23126fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein
2325084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas    public void saveEntryState(Bundle outState, String key) {
2335084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas        outState.putIntArray(key, mInput);
2345084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas    }
2355084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas
2365084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas    public void restoreEntryState(Bundle inState, String key) {
2375084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas        int[] input = inState.getIntArray(key);
2385084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas        if (input != null && mInputSize == input.length) {
2395084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas            for (int i = 0; i < mInputSize; i++) {
2405084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas                mInput[i] = input[i];
2415084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas                if (mInput[i] != 0) {
2425084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas                    mInputPointer = i;
2435084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas                }
2445084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas            }
2455084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas            updateTime();
2465084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas        }
2473a087e9c93639fdb069ea7f2083ed7bd6f76aa9aBudi Kusmiantoro        initializeStartButtonVisibility();
2485084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas    }
2495084e1c0e2a99e084e0c20d176085257d0b129b9Robyn Coultas
25026fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein    protected void setLeftRightEnabled(boolean enabled) {
25126fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein        mLeft.setEnabled(enabled);
25226fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein        mRight.setEnabled(enabled);
253d05e44ef00a18d57875036aaa9a090df3b566b42Isaac Katzenelson        if (!enabled) {
254d05e44ef00a18d57875036aaa9a090df3b566b42Isaac Katzenelson            mLeft.setContentDescription(null);
255d05e44ef00a18d57875036aaa9a090df3b566b42Isaac Katzenelson            mRight.setContentDescription(null);
256d05e44ef00a18d57875036aaa9a090df3b566b42Isaac Katzenelson        }
25726fd3d012330e5abf4f6452e811938374004d0d8Sam Blitzstein    }
258b94027194a2da12ed354465b9186fa452c0bd8f3Isaac Katzenelson}
259