1d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang/*
2d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang * Copyright (C) 2014 The Android Open Source Project
3d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang *
4d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang * Licensed under the Apache License, Version 2.0 (the "License");
5d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang * you may not use this file except in compliance with the License.
6d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang * You may obtain a copy of the License at
7d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang *
8d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang *      http://www.apache.org/licenses/LICENSE-2.0
9d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang *
10d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang * Unless required by applicable law or agreed to in writing, software
11d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang * distributed under the License is distributed on an "AS IS" BASIS,
12d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang * See the License for the specific language governing permissions and
14d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang * limitations under the License.
15d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang */
16d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
17d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangpackage com.android.deskclock.timer;
18d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
19d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.app.Activity;
20d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.app.Fragment;
21d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.app.FragmentTransaction;
22d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.content.Context;
23d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.os.Bundle;
24d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.text.TextUtils;
25d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.view.LayoutInflater;
26d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.view.View;
27d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.view.View.OnClickListener;
28d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.view.ViewGroup;
29d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.widget.FrameLayout;
30d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport android.widget.TextView;
31d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
32d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport com.android.deskclock.CircleButtonsLayout;
33d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport com.android.deskclock.DeskClock;
34d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport com.android.deskclock.DeskClock.OnTapListener;
35d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport com.android.deskclock.LabelDialogFragment;
36d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangimport com.android.deskclock.R;
37d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
38d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhangpublic class TimerItemFragment extends Fragment {
39d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    private static final String TAG = "TimerItemFragment_tag";
40d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    private TimerObj mTimerObj;
41d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
42d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    public TimerItemFragment() {
43d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    }
44d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
45d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    public static TimerItemFragment newInstance(TimerObj timerObj) {
46d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final TimerItemFragment fragment = new TimerItemFragment();
47d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final Bundle args = new Bundle();
48d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        args.putParcelable(TAG, timerObj);
49d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        fragment.setArguments(args);
50d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        return fragment;
51d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    }
52d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
53d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    @Override
54d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    public void onCreate(Bundle savedInstanceState) {
55d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        super.onCreate(savedInstanceState);
56d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final Bundle bundle = getArguments();
57d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        if (bundle != null) {
58d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            mTimerObj = (TimerObj) bundle.getParcelable(TAG);
59d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        }
60d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    }
61d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
62d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    @Override
63d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    public View onCreateView(LayoutInflater inflater, ViewGroup container,
64d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            Bundle savedInstanceState) {
65d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final TimerListItem v = (TimerListItem) inflater.inflate(R.layout.timer_list_item,
66d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                null);
67d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        mTimerObj.mView = v;
68d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final long timeLeft = mTimerObj.updateTimeLeft(false);
69d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final boolean drawWithColor = mTimerObj.mState != TimerObj.STATE_RESTART;
70d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        v.set(mTimerObj.mOriginalLength, timeLeft, drawWithColor);
71d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        v.setTime(timeLeft, true);
72d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        v.setResetAddButton(mTimerObj.mState == TimerObj.STATE_RUNNING ||
73d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                mTimerObj.mState == TimerObj.STATE_TIMESUP, new OnClickListener() {
74d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            @Override
75d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            public void onClick(View view) {
76d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                final Fragment parent = getParentFragment();
77d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                if (parent instanceof TimerFragment) {
78d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                    ((TimerFragment) parent).onPlusOneButtonPressed(mTimerObj);
79d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                }
80d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            }
81d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        });
82d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        switch (mTimerObj.mState) {
83d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            case TimerObj.STATE_RUNNING:
84d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                v.start();
85d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                break;
86d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            case TimerObj.STATE_TIMESUP:
87d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                v.timesUp();
88d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                break;
89d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            case TimerObj.STATE_DONE:
90d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                v.done();
91d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                break;
92d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            default:
93d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                break;
94d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        }
95d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
96d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final CircleButtonsLayout circleLayout =
97d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                (CircleButtonsLayout) v.findViewById(R.id.timer_circle);
98d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        circleLayout.setCircleTimerViewIds(R.id.timer_time, R.id.reset_add, R.id.timer_label,
99d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                R.id.timer_label_text);
100d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
101d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        return v;
102d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    }
103d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
104d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    @Override
105d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    public void onActivityCreated(Bundle savedInstanceState) {
106d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        super.onActivityCreated(savedInstanceState);
107d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final View v = mTimerObj.mView;
108d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        if (v == null) {
109d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            return;
110d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        }
111d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final FrameLayout labelLayout = (FrameLayout) v.findViewById(R.id.timer_label);
112d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final TextView labelPlaceholder = (TextView) v.findViewById(R.id.timer_label_placeholder);
113d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final TextView labelText = (TextView) v.findViewById(R.id.timer_label_text);
114d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        if (TextUtils.isEmpty(mTimerObj.mLabel)) {
115d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            labelText.setVisibility(View.GONE);
116d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            labelPlaceholder.setVisibility(View.VISIBLE);
117d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        } else {
118d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            labelText.setText(mTimerObj.mLabel);
119d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            labelText.setVisibility(View.VISIBLE);
120d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            labelPlaceholder.setVisibility(View.GONE);
121d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        }
122d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final Activity activity = getActivity();
123d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        if (activity instanceof DeskClock) {
124dbbafacad9e845d05ff516e57ecdb6af51f3ec2cBudi Kusmiantoro            labelLayout.setOnClickListener(new OnClickListener() {
125d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                @Override
126dbbafacad9e845d05ff516e57ecdb6af51f3ec2cBudi Kusmiantoro                public void onClick(View view) {
127d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                    onLabelPressed(mTimerObj);
128d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                }
129d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            });
130d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        } else {
131d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            labelPlaceholder.setVisibility(View.INVISIBLE);
132d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        }
133d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    }
134d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang
135d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    private void onLabelPressed(TimerObj t) {
136d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final String dialogTag = "label_dialog";
137d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final FragmentTransaction ft = getFragmentManager().beginTransaction();
138d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final Fragment prev = getFragmentManager().findFragmentByTag(dialogTag);
139d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        if (prev != null) {
140d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang            ft.remove(prev);
141d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        }
142d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        ft.addToBackStack(null);
143d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        final LabelDialogFragment newFragment =
144d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang                LabelDialogFragment.newInstance(t, t.mLabel, getParentFragment().getTag());
145d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang        newFragment.show(ft, dialogTag);
146d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang    }
147d50ff479c37e33de776c339bc93df308f4ac7ab0rachelzhang}
148