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 android.content.Context; 20a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport android.util.AttributeSet; 2126d88fce15a24362644123af5f0cce79ea572e7bChung-yih Wangimport android.view.accessibility.AccessibilityEvent; 22a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport android.widget.LinearLayout; 23a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport android.widget.TextView; 24a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 25892781804513066b68b4a2fa6f846e862dac252aOwen Linimport com.android.camera.ListPreference; 26892781804513066b68b4a2fa6f846e862dac252aOwen Linimport com.android.camera.R; 27892781804513066b68b4a2fa6f846e862dac252aOwen Lin 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; 44ccd32dfd9fe67daff7a428c4fc8fb5e67cfef906Doris Liu protected TextView mTitle; 45a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 46a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang static public interface Listener { 47ad30bda0d0103bd8a93eb834c234341b1ab1e77fWu-cheng Li public void onSettingChanged(ListPreference pref); 48a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 49a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 50a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public InLineSettingItem(Context context, AttributeSet attrs) { 51a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang super(context, attrs); 52a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 53a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 54a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang protected void setTitle(ListPreference preference) { 55ccd32dfd9fe67daff7a428c4fc8fb5e67cfef906Doris Liu mTitle = ((TextView) findViewById(R.id.title)); 56ccd32dfd9fe67daff7a428c4fc8fb5e67cfef906Doris Liu mTitle.setText(preference.getTitle()); 57a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 58a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 59a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public void initialize(ListPreference preference) { 60a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang setTitle(preference); 61a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang if (preference == null) return; 62a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mPreference = preference; 63a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang reloadPreference(); 64a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 65a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 66a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang protected abstract void updateView(); 67a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 68a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang protected boolean changeIndex(int index) { 69cc7e206e610c73a610d55144d8a216ba46a69652Wu-cheng Li if (index >= mPreference.getEntryValues().length || index < 0) return false; 70a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mIndex = index; 71a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mPreference.setValueIndex(mIndex); 72a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang if (mListener != null) { 73ad30bda0d0103bd8a93eb834c234341b1ab1e77fWu-cheng Li mListener.onSettingChanged(mPreference); 74a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 75a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang updateView(); 7626d88fce15a24362644123af5f0cce79ea572e7bChung-yih Wang sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); 77a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang return true; 78a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 79a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 80a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang // The value of the preference may have changed. Update the UI. 81a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public void reloadPreference() { 82a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mIndex = mPreference.findIndexOfValue(mPreference.getValue()); 83a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang updateView(); 84a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 85a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 86a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public void setSettingChangedListener(Listener listener) { 87a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mListener = listener; 88a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 89a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 90a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang public void overrideSettings(String value) { 91a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mOverrideValue = value; 92a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang updateView(); 93a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 94a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang} 95