Merge "Set activity title from preference screen title."
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 1202d13..7203e24 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -55,6 +55,7 @@
import com.android.settings.Settings.WifiSettingsActivity;
import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.backup.BackupSettingsActivity;
+import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.core.gateway.SettingsGateway;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.core.instrumentation.SharedPreferencesLogger;
@@ -209,8 +210,12 @@
@Override
public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) {
- startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, pref.getTitle(),
- null, 0);
+ if (InstrumentedPreferenceFragment.usePreferenceScreenTitle()) {
+ startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, null, null, 0);
+ } else {
+ startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, pref.getTitle(),
+ null, 0);
+ }
return true;
}
@@ -629,7 +634,7 @@
if (titleRes < 0) {
if (titleText != null) {
title = titleText.toString();
- } else {
+ } else if (!InstrumentedPreferenceFragment.usePreferenceScreenTitle()) {
// There not much we can do in that case
title = "";
}
diff --git a/src/com/android/settings/core/InstrumentedPreferenceFragment.java b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
index a5d0715..9ab1a01 100644
--- a/src/com/android/settings/core/InstrumentedPreferenceFragment.java
+++ b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
@@ -16,8 +16,15 @@
package com.android.settings.core;
+import android.annotation.Nullable;
+import android.annotation.StringRes;
import android.content.Context;
import android.os.Bundle;
+import android.support.annotation.XmlRes;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
+import android.util.Log;
import com.android.settings.core.instrumentation.Instrumentable;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
@@ -32,6 +39,9 @@
public abstract class InstrumentedPreferenceFragment extends ObservablePreferenceFragment
implements Instrumentable {
+ private static final String TAG = "InstrumentedPrefFrag";
+ private static final String FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE =
+ "settings_use_preference_screen_title";
protected MetricsFeatureProvider mMetricsFeatureProvider;
// metrics placeholder value. Only use this for development.
@@ -47,6 +57,17 @@
}
@Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (usePreferenceScreenTitle()) {
+ final int title = getTitle();
+ if (title != -1) {
+ getActivity().setTitle(title);
+ }
+ }
+ }
+
+ @Override
public void onAttach(Context context) {
super.onAttach(context);
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
@@ -62,6 +83,16 @@
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
}
+ @Override
+ public void addPreferencesFromResource(@XmlRes int preferencesResId) {
+ super.addPreferencesFromResource(preferencesResId);
+ updateActivityTitleWithScreenTitle(getPreferenceScreen());
+ }
+
+ public static boolean usePreferenceScreenTitle() {
+ return FeatureFlagUtils.isEnabled(FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE);
+ }
+
protected final Context getPrefContext() {
return getPreferenceManager().getContext();
}
@@ -69,4 +100,27 @@
protected final VisibilityLoggerMixin getVisibilityLogger() {
return mVisibilityLoggerMixin;
}
+
+ /**
+ * Return the resource id of the title to be used for the fragment. This is for preference
+ * fragments that do not have an explicit preference screen xml, and hence the title need to be
+ * specified separately. Do not use this method if the title is already specified in the
+ * preference screen.
+ */
+ @StringRes
+ protected int getTitle() {
+ return -1;
+ }
+
+ private void updateActivityTitleWithScreenTitle(PreferenceScreen screen) {
+ if (usePreferenceScreenTitle() && screen != null) {
+ final CharSequence title = screen.getTitle();
+ if (!TextUtils.isEmpty(title)) {
+ getActivity().setTitle(title);
+ } else {
+ Log.w(TAG, "Screen title missing for fragment " + this.getClass().getName());
+ }
+ }
+ }
+
}