1a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang/* 2a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * Copyright (C) 2011 The Android Open Source Project 3a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * 4a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * Licensed under the Apache License, Version 2.0 (the "License"); 5a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * you may not use this file except in compliance with the License. 6a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * You may obtain a copy of the License at 7a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * 8a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * http://www.apache.org/licenses/LICENSE-2.0 9a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * 10a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * Unless required by applicable law or agreed to in writing, software 11a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * distributed under the License is distributed on an "AS IS" BASIS, 12a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * See the License for the specific language governing permissions and 14a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * limitations under the License. 15a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang */ 16a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 17a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangpackage com.android.camera.ui; 18a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 19a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport com.android.camera.ListPreference; 20cc7e206e610c73a610d55144d8a216ba46a69652Wu-cheng Liimport com.android.camera.R; 21a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 22a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport android.content.Context; 23a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport android.util.AttributeSet; 2426d88fce15a24362644123af5f0cce79ea572e7bChung-yih Wangimport android.view.accessibility.AccessibilityEvent; 25a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport android.widget.LinearLayout; 26a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport android.widget.TextView; 27a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 28a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang/** 29a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * A one-line camera setting could be one of three types: knob, switch or restore 30a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * preference button. The setting includes a title for showing the preference 31a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * title which is initialized in the SimpleAdapter. A knob also includes 32a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * (ex: Picture size), a previous button, the current value (ex: 5MP), 33a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * and a next button. A switch, i.e. the preference RecordLocationPreference, 34a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * has only two values on and off which will be controlled in a switch button. 35a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * Other setting popup window includes several InLineSettingItem items with 36a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang * different types if possible. 37a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang */ 38a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangpublic abstract class InLineSettingItem extends LinearLayout { 39a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang private Listener mListener; 40a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang protected ListPreference mPreference; 41a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang protected int mIndex; 42a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang // Scene mode can override the original preference value. 43a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang protected String mOverrideValue; 44a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 45a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang static public interface Listener { 46a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public void onSettingChanged(); 47a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 48a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 49a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public InLineSettingItem(Context context, AttributeSet attrs) { 50a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang super(context, attrs); 51a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 52a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 53a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang protected void setTitle(ListPreference preference) { 54a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang ((TextView) findViewById(R.id.title)).setText(preference.getTitle()); 55a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 56a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 57a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public void initialize(ListPreference preference) { 58a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang setTitle(preference); 59a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang if (preference == null) return; 60a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mPreference = preference; 61a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang reloadPreference(); 62a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 63a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 64a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang protected abstract void updateView(); 65a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 66a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang protected boolean changeIndex(int index) { 67cc7e206e610c73a610d55144d8a216ba46a69652Wu-cheng Li if (index >= mPreference.getEntryValues().length || index < 0) return false; 68a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mIndex = index; 69a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mPreference.setValueIndex(mIndex); 70a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang if (mListener != null) { 71a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mListener.onSettingChanged(); 72a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 73a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang updateView(); 7426d88fce15a24362644123af5f0cce79ea572e7bChung-yih Wang sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); 75a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang return true; 76a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 77a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 78a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang // The value of the preference may have changed. Update the UI. 79a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public void reloadPreference() { 80a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mIndex = mPreference.findIndexOfValue(mPreference.getValue()); 81a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang updateView(); 82a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 83a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 84a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public void setSettingChangedListener(Listener listener) { 85a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mListener = listener; 86a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 87a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 88a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public void overrideSettings(String value) { 89a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mOverrideValue = value; 90a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang updateView(); 91a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 92a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang} 93