Merge "Move preference subscreens to new Activities from Dialogs" into ub-camera-glacier
diff --git a/src/com/android/camera/settings/CameraSettingsActivity.java b/src/com/android/camera/settings/CameraSettingsActivity.java
index 3c9a082..ca31913 100644
--- a/src/com/android/camera/settings/CameraSettingsActivity.java
+++ b/src/com/android/camera/settings/CameraSettingsActivity.java
@@ -18,11 +18,10 @@
import android.app.ActionBar;
import android.app.Activity;
-import android.app.Dialog;
import android.content.Context;
+import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.hardware.Camera.CameraInfo;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
@@ -32,8 +31,6 @@
import android.preference.PreferenceScreen;
import android.support.v4.app.FragmentActivity;
import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnClickListener;
import com.android.camera.debug.Log;
import com.android.camera.settings.SettingsUtil.SelectedPictureSizes;
@@ -53,6 +50,8 @@
* Provides the settings UI for the Camera app.
*/
public class CameraSettingsActivity extends FragmentActivity {
+ public static final String PREF_SCREEN_EXTRA = "pref_screen_extra";
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -61,7 +60,8 @@
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(R.string.mode_settings);
- CameraSettingsFragment dialog = new CameraSettingsFragment();
+ String prefKey = getIntent().getStringExtra(PREF_SCREEN_EXTRA);
+ CameraSettingsFragment dialog = new CameraSettingsFragment(prefKey);
getFragmentManager().beginTransaction().replace(android.R.id.content, dialog).commit();
}
@@ -77,6 +77,7 @@
public static class CameraSettingsFragment extends PreferenceFragment implements
OnSharedPreferenceChangeListener {
+
public static final String PREF_CATEGORY_RESOLUTION = "pref_category_resolution";
public static final String PREF_CATEGORY_ADVANCED = "pref_category_advanced";
public static final String PREF_LAUNCH_HELP = "pref_launch_help";
@@ -84,6 +85,7 @@
private static DecimalFormat sMegaPixelFormat = new DecimalFormat("##0.0");
private String[] mCamcorderProfileNames;
private CameraDeviceInfo mInfos;
+ private final String mPrefKey;
// Selected resolutions for the different cameras and sizes.
private SelectedPictureSizes mOldPictureSizesBack;
@@ -93,12 +95,20 @@
private SelectedVideoQualities mVideoQualitiesBack;
private SelectedVideoQualities mVideoQualitiesFront;
+ public CameraSettingsFragment(String prefKey) {
+ mPrefKey = prefKey;
+ }
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Context context = this.getActivity().getApplicationContext();
addPreferencesFromResource(R.xml.camera_preferences);
- CameraSettingsActivityHelper.addAdditionalPreferences(this, context);
+ // Only add the additional preferences when in the main settings
+ // view, and not in the sub-preferences screens.
+ if (mPrefKey == null) {
+ CameraSettingsActivityHelper.addAdditionalPreferences(this, context);
+ }
mCamcorderProfileNames = getResources().getStringArray(R.array.camcorder_profile_names);
mInfos = CameraAgentFactory.getAndroidCameraAgent(context).getCameraDeviceInfo();
}
@@ -119,11 +129,11 @@
final PreferenceScreen resolutionScreen =
(PreferenceScreen) findPreference(PREF_CATEGORY_RESOLUTION);
fillEntriesAndSummaries(resolutionScreen);
- configureHomeAsUp(resolutionScreen);
+ setPreferenceScreenIntent(resolutionScreen);
final PreferenceScreen advancedScreen =
(PreferenceScreen) findPreference(PREF_CATEGORY_ADVANCED);
- configureHomeAsUp(advancedScreen);
+ setPreferenceScreenIntent(advancedScreen);
Preference helpPref = findPreference(PREF_LAUNCH_HELP);
helpPref.setOnPreferenceClickListener(
@@ -141,28 +151,49 @@
/**
* Configure home-as-up for sub-screens.
*/
- private void configureHomeAsUp(final PreferenceScreen preferenceScreen) {
- preferenceScreen.setOnPreferenceClickListener(new OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- setUpHomeButton(preferenceScreen);
- return false;
- }
- });
+ private void setPreferenceScreenIntent(final PreferenceScreen preferenceScreen) {
+ Intent intent = new Intent(getActivity(), CameraSettingsActivity.class);
+ intent.putExtra(PREF_SCREEN_EXTRA, preferenceScreen.getKey());
+ preferenceScreen.setIntent(intent);
}
- private void setUpHomeButton(PreferenceScreen preferenceScreen) {
- final Dialog dialog = preferenceScreen.getDialog();
- dialog.getActionBar().setDisplayHomeAsUpEnabled(true);
+ /**
+ * This override allows the CameraSettingsFragment to be reused for
+ * different nested PreferenceScreens within the single camera
+ * preferences XML resource. If the fragment is constructed with a
+ * desired preference key (delivered via an extra in the creation
+ * intent), it is used to look up the nested PreferenceScreen and
+ * returned here.
+ */
+ @Override
+ public PreferenceScreen getPreferenceScreen() {
+ PreferenceScreen root = super.getPreferenceScreen();
+ if (mPrefKey == null || root == null) {
+ return root;
+ } else {
+ PreferenceScreen match = findByKey(root, mPrefKey);
+ if (match != null) {
+ return match;
+ } else {
+ throw new RuntimeException("key " + mPrefKey + " not found");
+ }
+ }
+ }
- View homeButton = dialog.findViewById(android.R.id.home);
- if (homeButton != null) {
- homeButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- dialog.dismiss();
+ private PreferenceScreen findByKey(PreferenceScreen parent, String key) {
+ if (key.equals(parent.getKey())) {
+ return parent;
+ } else {
+ for (int i = 0; i < parent.getPreferenceCount(); i++) {
+ Preference child = parent.getPreference(i);
+ if (child instanceof PreferenceScreen) {
+ PreferenceScreen match = findByKey((PreferenceScreen) child, key);
+ if (match != null) {
+ return match;
+ }
}
- });
+ }
+ return null;
}
}