• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.camera.ui;
17 
18 import android.content.Context;
19 import android.content.res.Resources;
20 import android.util.AttributeSet;
21 import android.util.Log;
22 import android.view.View;
23 import android.widget.Button;
24 import android.widget.CompoundButton;
25 import android.widget.NumberPicker;
26 import android.widget.Switch;
27 import android.widget.TextView;
28 
29 import com.android.camera.IconListPreference;
30 import com.android.camera.ListPreference;
31 import com.android.camera.R;
32 
33 /**
34  * This is a popup window that allows users to turn on/off time lapse feature,
35  * and to select a time interval for taking a time lapse video.
36  */
37 public class TimeIntervalPopup extends AbstractSettingPopup {
38     private static final String TAG = "TimeIntervalPopup";
39     private NumberPicker mNumberSpinner;
40     private NumberPicker mUnitSpinner;
41     private Switch mTimeLapseSwitch;
42     private final String[] mUnits;
43     private final String[] mDurations;
44     private IconListPreference mPreference;
45     private Listener mListener;
46     private Button mConfirmButton;
47     private TextView mHelpText;
48     private View mTimePicker;
49 
50     static public interface Listener {
onListPrefChanged(ListPreference pref)51         public void onListPrefChanged(ListPreference pref);
52     }
53 
setSettingChangedListener(Listener listener)54     public void setSettingChangedListener(Listener listener) {
55         mListener = listener;
56     }
57 
TimeIntervalPopup(Context context, AttributeSet attrs)58     public TimeIntervalPopup(Context context, AttributeSet attrs) {
59         super(context, attrs);
60 
61         Resources res = context.getResources();
62         mUnits = res.getStringArray(R.array.pref_video_time_lapse_frame_interval_units);
63         mDurations = res
64                 .getStringArray(R.array.pref_video_time_lapse_frame_interval_duration_values);
65     }
66 
initialize(IconListPreference preference)67     public void initialize(IconListPreference preference) {
68         mPreference = preference;
69 
70         // Set title.
71         mTitle.setText(mPreference.getTitle());
72 
73         // Duration
74         int durationCount = mDurations.length;
75         mNumberSpinner = (NumberPicker) findViewById(R.id.duration);
76         mNumberSpinner.setMinValue(0);
77         mNumberSpinner.setMaxValue(durationCount - 1);
78         mNumberSpinner.setDisplayedValues(mDurations);
79         mNumberSpinner.setWrapSelectorWheel(false);
80 
81         // Units for duration (i.e. seconds, minutes, etc)
82         mUnitSpinner = (NumberPicker) findViewById(R.id.duration_unit);
83         mUnitSpinner.setMinValue(0);
84         mUnitSpinner.setMaxValue(mUnits.length - 1);
85         mUnitSpinner.setDisplayedValues(mUnits);
86         mUnitSpinner.setWrapSelectorWheel(false);
87 
88         mTimePicker = findViewById(R.id.time_interval_picker);
89         mTimeLapseSwitch = (Switch) findViewById(R.id.time_lapse_switch);
90         mHelpText = (TextView) findViewById(R.id.set_time_interval_help_text);
91         mConfirmButton = (Button) findViewById(R.id.time_lapse_interval_set_button);
92 
93         // Disable focus on the spinners to prevent keyboard from coming up
94         mNumberSpinner.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
95         mUnitSpinner.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
96 
97         mTimeLapseSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
98             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
99                 setTimeSelectionEnabled(isChecked);
100             }
101         });
102         mConfirmButton.setOnClickListener(new View.OnClickListener() {
103             public void onClick(View v) {
104                 updateInputState();
105             }
106         });
107     }
108 
restoreSetting()109     private void restoreSetting() {
110         int index = mPreference.findIndexOfValue(mPreference.getValue());
111         if (index == -1) {
112             Log.e(TAG, "Invalid preference value.");
113             mPreference.print();
114             throw new IllegalArgumentException();
115         } else if (index == 0) {
116             // default choice: time lapse off
117             mTimeLapseSwitch.setChecked(false);
118             setTimeSelectionEnabled(false);
119         } else {
120             mTimeLapseSwitch.setChecked(true);
121             setTimeSelectionEnabled(true);
122             int durationCount = mNumberSpinner.getMaxValue() + 1;
123             int unit = (index - 1) / durationCount;
124             int number = (index - 1) % durationCount;
125             mUnitSpinner.setValue(unit);
126             mNumberSpinner.setValue(number);
127         }
128     }
129 
130     @Override
setVisibility(int visibility)131     public void setVisibility(int visibility) {
132         if (visibility == View.VISIBLE) {
133             if (getVisibility() != View.VISIBLE) {
134                 // Set the number pickers and on/off switch to be consistent
135                 // with the preference
136                 restoreSetting();
137             }
138         }
139         super.setVisibility(visibility);
140     }
141 
setTimeSelectionEnabled(boolean enabled)142     protected void setTimeSelectionEnabled(boolean enabled) {
143         mHelpText.setVisibility(enabled ? GONE : VISIBLE);
144         mTimePicker.setVisibility(enabled ? VISIBLE : GONE);
145     }
146 
147     @Override
reloadPreference()148     public void reloadPreference() {
149     }
150 
updateInputState()151     private void updateInputState() {
152         if (mTimeLapseSwitch.isChecked()) {
153             int newId = mUnitSpinner.getValue() * (mNumberSpinner.getMaxValue() + 1)
154                     + mNumberSpinner.getValue() + 1;
155             mPreference.setValueIndex(newId);
156         } else {
157             mPreference.setValueIndex(0);
158         }
159 
160         if (mListener != null) {
161             mListener.onListPrefChanged(mPreference);
162         }
163     }
164 }
165