17f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li/* 27f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * Copyright (C) 2010 The Android Open Source Project 37f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * 47f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * Licensed under the Apache License, Version 2.0 (the "License"); 57f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * you may not use this file except in compliance with the License. 67f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * You may obtain a copy of the License at 77f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * 87f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * http://www.apache.org/licenses/LICENSE-2.0 97f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * 107f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * Unless required by applicable law or agreed to in writing, software 117f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * distributed under the License is distributed on an "AS IS" BASIS, 127f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * See the License for the specific language governing permissions and 147f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li * limitations under the License. 157f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li */ 167f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li 177f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Lipackage com.android.camera.ui; 187f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li 19a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport com.android.camera.CameraSettings; 207f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Liimport com.android.camera.ListPreference; 217f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Liimport com.android.camera.PreferenceGroup; 220bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wangimport com.android.camera.R; 23a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport com.android.camera.RecordLocationPreference; 247f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li 2502ec7c0880ded5863d73d6f173ef35ab5c888dcdWu-cheng Liimport android.content.Context; 2602ec7c0880ded5863d73d6f173ef35ab5c888dcdWu-cheng Liimport android.util.AttributeSet; 277f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Liimport android.view.View; 28a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport android.view.LayoutInflater; 2902ec7c0880ded5863d73d6f173ef35ab5c888dcdWu-cheng Liimport android.view.ViewGroup; 300bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wangimport android.widget.AdapterView; 310bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wangimport android.widget.ListView; 32a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wangimport android.widget.ArrayAdapter; 330bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang 340bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wangimport java.util.ArrayList; 350bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wangimport java.util.List; 367f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li 377f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li/* A popup window that contains several camera settings. */ 389b7bfbc8ac25f1df20b7ed0aa79bf1f36299e981Wu-cheng Lipublic class OtherSettingsPopup extends AbstractSettingPopup 39a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang implements InLineSettingItem.Listener, 400bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang AdapterView.OnItemClickListener { 4187695169a6b54b39258f236656b31991a3dbc2f8Wu-cheng Li private static final String TAG = "OtherSettingsPopup"; 420bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang 437f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li private Listener mListener; 44a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang private ArrayList<ListPreference> mListItem = new ArrayList<ListPreference>(); 457f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li 467f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li static public interface Listener { 47039f1dc1fd89b5baeed8be05f3f21770cf75d4b3Wu-cheng Li public void onSettingChanged(); 48003dd5a52457c024a0f99a2bb222bfc6ad70bbe5Wu-cheng Li public void onRestorePreferencesClicked(); 497f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li } 507f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li 51a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang private class OtherSettingsAdapter extends ArrayAdapter { 52a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang LayoutInflater mInflater; 530bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang 54a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang OtherSettingsAdapter() { 55757459bc8ded7e5708d8ad99ff38a3cb41904640Chung-yih Wang super(OtherSettingsPopup.this.getContext(), 0, mListItem); 56757459bc8ded7e5708d8ad99ff38a3cb41904640Chung-yih Wang mInflater = LayoutInflater.from(getContext()); 57a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 58a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 59a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang private int getSettingLayoutId(ListPreference pref) { 60a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang // If the preference is null, it will be the only item , i.e. 61a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang // 'Restore setting' in the popup window. 62a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang if (pref == null) return R.layout.in_line_setting_restore; 63a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 64a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang // Currently, the RecordLocationPreference is the only setting 65a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang // which applies the on/off switch. 66a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang if (CameraSettings.KEY_RECORD_LOCATION.equals(pref.getKey())) { 67a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang return R.layout.in_line_setting_switch; 68a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang } 69a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang return R.layout.in_line_setting_knob; 700bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang } 710bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang 720bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang @Override 730bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang public View getView(int position, View convertView, ViewGroup parent) { 740bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang if (convertView != null) return convertView; 750bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang 76a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang ListPreference pref = mListItem.get(position); 77a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 78a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang int viewLayoutId = getSettingLayoutId(pref); 79a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang InLineSettingItem view = (InLineSettingItem) 80a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mInflater.inflate(viewLayoutId, parent, false); 81a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 82a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang view.initialize(pref); // no init for restore one 83a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang view.setSettingChangedListener(OtherSettingsPopup.this); 840bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang return view; 850bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang } 860bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang } 870bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang 88d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li public void setSettingChangedListener(Listener listener) { 897f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li mListener = listener; 907f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li } 917f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li 9202ec7c0880ded5863d73d6f173ef35ab5c888dcdWu-cheng Li public OtherSettingsPopup(Context context, AttributeSet attrs) { 9302ec7c0880ded5863d73d6f173ef35ab5c888dcdWu-cheng Li super(context, attrs); 947f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li } 957f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li 96d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li public void initialize(PreferenceGroup group, String[] keys) { 970bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang // Prepare the setting items. 98d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li for (int i = 0; i < keys.length; ++i) { 99d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li ListPreference pref = group.findPreference(keys[i]); 100a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang if (pref != null) mListItem.add(pref); 1010bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang } 1020bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang 1030bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang // Prepare the restore setting line. 104a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang mListItem.add(null); 105a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang 106a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang ArrayAdapter mListItemAdapter = new OtherSettingsAdapter(); 10792e9f2c3078c4625f9531443c75e51c3dfef8b48Chung-yih Wang ((ListView) mSettingList).setAdapter(mListItemAdapter); 10892e9f2c3078c4625f9531443c75e51c3dfef8b48Chung-yih Wang ((ListView) mSettingList).setOnItemClickListener(this); 10992e9f2c3078c4625f9531443c75e51c3dfef8b48Chung-yih Wang ((ListView) mSettingList).setSelector(android.R.color.transparent); 1107f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li } 1117f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li 112039f1dc1fd89b5baeed8be05f3f21770cf75d4b3Wu-cheng Li @Override 11387695169a6b54b39258f236656b31991a3dbc2f8Wu-cheng Li public void onSettingChanged() { 1147f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li if (mListener != null) { 115039f1dc1fd89b5baeed8be05f3f21770cf75d4b3Wu-cheng Li mListener.onSettingChanged(); 1167f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li } 1177f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li } 118823d57389b616091827059ca6401f675e416a53bWu-cheng Li 119823d57389b616091827059ca6401f675e416a53bWu-cheng Li // Scene mode can override other camera settings (ex: flash mode). 120d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li public void overrideSettings(final String ... keyvalues) { 12192e9f2c3078c4625f9531443c75e51c3dfef8b48Chung-yih Wang int count = mSettingList.getChildCount(); 122d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li for (int i = 0; i < keyvalues.length; i += 2) { 123d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li String key = keyvalues[i]; 124d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li String value = keyvalues[i + 1]; 125d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li for (int j = 0; j < count; j++) { 126a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang ListPreference pref = (ListPreference) mListItem.get(j); 127d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li if (pref != null && key.equals(pref.getKey())) { 128a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang InLineSettingItem settingItem = 129a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang (InLineSettingItem) mSettingList.getChildAt(j); 130a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang settingItem.overrideSettings(value); 131d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li } 132823d57389b616091827059ca6401f675e416a53bWu-cheng Li } 133823d57389b616091827059ca6401f675e416a53bWu-cheng Li } 134823d57389b616091827059ca6401f675e416a53bWu-cheng Li } 135003dd5a52457c024a0f99a2bb222bfc6ad70bbe5Wu-cheng Li 136003dd5a52457c024a0f99a2bb222bfc6ad70bbe5Wu-cheng Li @Override 1370bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang public void onItemClick(AdapterView<?> parent, View view, int position, 1380bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang long id) { 1390bab538de42a296cf4fa2c7f13c251c11a6f7d3bChung-yih Wang if ((position == mListItem.size() - 1) && (mListener != null)) { 140003dd5a52457c024a0f99a2bb222bfc6ad70bbe5Wu-cheng Li mListener.onRestorePreferencesClicked(); 141003dd5a52457c024a0f99a2bb222bfc6ad70bbe5Wu-cheng Li } 142003dd5a52457c024a0f99a2bb222bfc6ad70bbe5Wu-cheng Li } 143842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li 144d50b09687918ae1c89e9c19175e217910b330c60Wu-cheng Li @Override 145842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li public void reloadPreference() { 146842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li int count = mSettingList.getChildCount(); 147842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li for (int i = 0; i < count; i++) { 148a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang ListPreference pref = (ListPreference) mListItem.get(i); 149842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li if (pref != null) { 150a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang InLineSettingItem settingItem = 151a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang (InLineSettingItem) mSettingList.getChildAt(i); 152a8b55a9628fa7c073d4f9c97c9a198275194f76aChung-yih Wang settingItem.reloadPreference(); 153842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li } 154842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li } 155842b44f24ab621122183a149e20a852e5d8e0200Wu-cheng Li } 1567f0d458b7d2ed913879db247d16abcfdec0dc897Wu-cheng Li} 157