/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.camera.ui; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.RadioButton; // SPRD: add single choice button in 2nd level popup import android.view.ViewGroup; // SPRD: add single choice button in 2nd level popup import com.android.camera.IconListPreference; import com.android.camera.ListPreference; import com.android.camera.util.CameraUtil; import com.android.camera2.R; // A popup window that shows one camera setting. The title is the name of the // setting (ex: white-balance). The entries are the supported values (ex: // daylight, incandescent, etc). If initialized with an IconListPreference, // the entries will contain both text and icons. Otherwise, entries will be // shown in text. public class ListPrefSettingPopup extends AbstractSettingPopup implements AdapterView.OnItemClickListener { private static final boolean DEBUG = true; private static final String TAG = "ListPrefSettingPopup"; private ListPreference mPreference; private Listener mListener; private int mIndex = -1; // SPRD: add single choice button in 2nd level popup static public interface Listener { public void onListPrefChanged(ListPreference pref); public void onCancelButtonClicked(); } public ListPrefSettingPopup(Context context, AttributeSet attrs) { super(context, attrs); } private class ListPrefSettingAdapter extends SimpleAdapter { ListPrefSettingAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) { super(context, data, resource, from, to); } @Override public void setViewImage(ImageView v, String value) { if ("".equals(value)) { // Some settings have no icons. Ex: exposure compensation. v.setVisibility(View.GONE); } else { super.setViewImage(v, value); } } /* SPRD: add single choice button in 2nd level popup @{ */ @Override public View getView(final int pos, View convertView, ViewGroup parent) { ViewHolder holder = null; convertView = super.getView(pos, convertView, parent); holder = new ViewHolder(); holder.viewBtn = (RadioButton) convertView.findViewById(R.id.btn); convertView.setTag(holder); if (holder != null && holder.viewBtn != null) { if (mIndex != -1 && mIndex == pos) { holder.viewBtn.setChecked(true); } else { holder.viewBtn.setChecked(false); } } return convertView; } class ViewHolder { RadioButton viewBtn; } /* add single choice button in 2nd level popup end @} */ } public void initialize(ListPreference preference) { mPreference = preference; Context context = getContext(); CharSequence[] entries = mPreference.getEntries(); int[] iconIds = null; if (preference instanceof IconListPreference) { iconIds = ((IconListPreference) mPreference).getImageIds(); if (iconIds == null) { iconIds = ((IconListPreference) mPreference).getLargeIconIds(); } } // Set title. mTitle.setText(mPreference.getTitle()); // Prepare the ListView. ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>(); for(int i = 0; i < entries.length; ++i) { HashMap<String, Object> map = new HashMap<String, Object>(); map.put("text", entries[i].toString()); if (iconIds != null) map.put("image", iconIds[i]); listItem.add(map); } mIndex = mPreference.findIndexOfValue(mPreference.getValue()); // SPRD: add single choice button in 2nd level popup SimpleAdapter listItemAdapter = new ListPrefSettingAdapter( context, listItem, R.layout.setting_item, new String[] {"text", "image"}, new int[] {R.id.text, R.id.image}); // SPRD: we need use footer view handle "cancel" button process LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View btnCancelPanel = inflater.inflate(R.layout.list_setting_popup_footer_view, null); View btnCancel = btnCancelPanel.findViewById(R.id.cancel_btn); View.OnClickListener cancelClickListener = new View.OnClickListener() { @Override public void onClick(View v) { if (mListener != null) { CameraUtil.P( DEBUG, TAG, "second level list view onButtonCancel click event."); mListener.onCancelButtonClicked(); } } }; btnCancel.setOnClickListener(cancelClickListener); ((ListView) mSettingList).addFooterView(btnCancelPanel); ((ListView) mSettingList).setAdapter(listItemAdapter); ((ListView) mSettingList).setOnItemClickListener(this); // @origin. //reloadPreference(); } // The value of the preference may have changed. Update the UI. @Override public void reloadPreference() { int index = mPreference.findIndexOfValue(mPreference.getValue()); if (index != -1) { ((ListView) mSettingList).setItemChecked(index, true); } else { Log.e(TAG, "Invalid preference value."); mPreference.print(); } } public void setSettingChangedListener(Listener listener) { mListener = listener; } @Override public void onItemClick(AdapterView<?> parent, View view, int index, long id) { mPreference.setValueIndex(index); if (mListener != null) mListener.onListPrefChanged(mPreference); } }