125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb/* 225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * Copyright (C) 2011 The Android Open Source Project 325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * 425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * Licensed under the Apache License, Version 2.0 (the "License"); 525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * you may not use this file except in compliance with the License. 625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * You may obtain a copy of the License at 725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * 825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * http://www.apache.org/licenses/LICENSE-2.0 925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * 1025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * Unless required by applicable law or agreed to in writing, software 1125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * distributed under the License is distributed on an "AS IS" BASIS, 1225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * See the License for the specific language governing permissions and 1425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * limitations under the License. 1525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb */ 1625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 1725668cd6ed661c59295cb65348a126fb245757d4Michael Kolbpackage com.android.camera.ui; 1825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 1925668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport android.content.Context; 2025668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport android.util.AttributeSet; 2125668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport android.view.accessibility.AccessibilityEvent; 2225668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport android.widget.LinearLayout; 2325668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport android.widget.TextView; 2425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 2525668cd6ed661c59295cb65348a126fb245757d4Michael Kolbimport com.android.camera.ListPreference; 26a3dc2c0dd75f4659146fcd257ce32acc3800ae5fJohn Reckimport com.android.gallery3d.R; 2725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 2825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb/** 2925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * A one-line camera setting could be one of three types: knob, switch or restore 3025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * preference button. The setting includes a title for showing the preference 3125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * title which is initialized in the SimpleAdapter. A knob also includes 3225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * (ex: Picture size), a previous button, the current value (ex: 5MP), 3325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * and a next button. A switch, i.e. the preference RecordLocationPreference, 3425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * has only two values on and off which will be controlled in a switch button. 3525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * Other setting popup window includes several InLineSettingItem items with 3625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb * different types if possible. 3725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb */ 3825668cd6ed661c59295cb65348a126fb245757d4Michael Kolbpublic abstract class InLineSettingItem extends LinearLayout { 3925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb private Listener mListener; 4025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb protected ListPreference mPreference; 4125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb protected int mIndex; 4225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb // Scene mode can override the original preference value. 4325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb protected String mOverrideValue; 4425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb protected TextView mTitle; 4525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 4625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb static public interface Listener { 4725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb public void onSettingChanged(ListPreference pref); 4825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb } 4925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 5025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb public InLineSettingItem(Context context, AttributeSet attrs) { 5125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb super(context, attrs); 5225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb } 5325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 5425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb protected void setTitle(ListPreference preference) { 5525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb mTitle = ((TextView) findViewById(R.id.title)); 5625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb mTitle.setText(preference.getTitle()); 5725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb } 5825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 5925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb public void initialize(ListPreference preference) { 6025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb setTitle(preference); 6125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb if (preference == null) return; 6225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb mPreference = preference; 6325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb reloadPreference(); 6425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb } 6525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 6625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb protected abstract void updateView(); 6725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 6825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb protected boolean changeIndex(int index) { 6925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb if (index >= mPreference.getEntryValues().length || index < 0) return false; 7025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb mIndex = index; 7125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb mPreference.setValueIndex(mIndex); 7225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb if (mListener != null) { 7325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb mListener.onSettingChanged(mPreference); 7425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb } 7525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb updateView(); 7625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); 7725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb return true; 7825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb } 7925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 8025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb // The value of the preference may have changed. Update the UI. 8125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb public void reloadPreference() { 8225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb mIndex = mPreference.findIndexOfValue(mPreference.getValue()); 8325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb updateView(); 8425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb } 8525668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 8625668cd6ed661c59295cb65348a126fb245757d4Michael Kolb public void setSettingChangedListener(Listener listener) { 8725668cd6ed661c59295cb65348a126fb245757d4Michael Kolb mListener = listener; 8825668cd6ed661c59295cb65348a126fb245757d4Michael Kolb } 8925668cd6ed661c59295cb65348a126fb245757d4Michael Kolb 9025668cd6ed661c59295cb65348a126fb245757d4Michael Kolb public void overrideSettings(String value) { 9125668cd6ed661c59295cb65348a126fb245757d4Michael Kolb mOverrideValue = value; 9225668cd6ed661c59295cb65348a126fb245757d4Michael Kolb updateView(); 9325668cd6ed661c59295cb65348a126fb245757d4Michael Kolb } 9425668cd6ed661c59295cb65348a126fb245757d4Michael Kolb} 95