Update activity titles for fragments without preference screen.

1. Move getPreferenceScreenResId() from individual subclass to
InstrumentedPreferenceFragment.

2. Removed InstrumentedPreferenceFragment.getTitle() and let the
preference fragments that do not have preference screen set the activity
title directly instead.

3. Removed OptionsMenuFragment as all it does is call
setHasOptionMenu().
- changed subclasses of OptionsMenuFragment to extend from
InstrumentedPreferenceFragment directly.
- none of the exisitng subclasses actually implements the option menu
related methods to provide any option menu. So, the setHasOptionMenu()
call is not added to the subclasses.

4. Update Languages preference title.
- launch the fragment from the preference controller instead of from the
default handling, as we need the title res id at launch time to get it
work properly when retrieving the title from back stack.

Bug: 64564191
Test: blaze-bin/screenshots/android/i18nscreenshots/i18nscreenshots
Change-Id: Ibecdcab32cbaed8bf604ec5ebe0a926b4e489a7d
This commit is contained in:
Doris Ling
2017-10-25 14:08:57 -07:00
parent 609b336d05
commit ed4685fafb
24 changed files with 259 additions and 171 deletions

View File

@@ -21,7 +21,7 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import android.accounts.Account; import android.accounts.Account;
import android.accounts.AccountManager; import android.accounts.AccountManager;
import android.accounts.AuthenticatorDescription; import android.accounts.AuthenticatorDescription;
import android.annotation.StringRes; import android.annotation.Nullable;
import android.app.Activity; import android.app.Activity;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.ContentResolver; import android.content.ContentResolver;
@@ -39,7 +39,6 @@ import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.telephony.euicc.EuiccManager; import android.telephony.euicc.EuiccManager;
import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -54,6 +53,7 @@ import android.widget.ScrollView;
import android.widget.TextView; import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.ConfirmLockPattern; import com.android.settings.password.ConfirmLockPattern;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
@@ -70,7 +70,7 @@ import java.util.List;
* *
* This is the initial screen. * This is the initial screen.
*/ */
public class MasterClear extends OptionsMenuFragment { public class MasterClear extends InstrumentedPreferenceFragment {
private static final String TAG = "MasterClear"; private static final String TAG = "MasterClear";
private static final int KEYGUARD_REQUEST = 55; private static final int KEYGUARD_REQUEST = 55;
@@ -93,9 +93,11 @@ public class MasterClear extends OptionsMenuFragment {
}; };
@Override @Override
@StringRes public void onCreate(@Nullable Bundle savedInstanceState) {
protected int getTitle() { super.onCreate(savedInstanceState);
return R.string.master_clear_title; if (usePreferenceScreenTitle()) {
getActivity().setTitle(R.string.master_clear_title);
}
} }
/** /**

View File

@@ -33,6 +33,7 @@ import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -47,7 +48,7 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
* *
* This is the confirmation screen. * This is the confirmation screen.
*/ */
public class MasterClearConfirm extends OptionsMenuFragment { public class MasterClearConfirm extends InstrumentedPreferenceFragment {
private View mContentView; private View mContentView;
private boolean mEraseSdCard; private boolean mEraseSdCard;

View File

@@ -1,35 +0,0 @@
/*
* Copyright (C) 2016 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.settings;
import android.os.Bundle;
import com.android.settings.core.InstrumentedPreferenceFragment;
/**
* Base class for a fragment that has the options menu.
* SettingsPreferenceFragment automatically sets this, but some activities do not use
* preferences, and we need to call setHasOptionsMenu(true) for the back button on action bar.
* For preference fragments, use SettingsPreferenceFragment.
*/
public abstract class OptionsMenuFragment extends InstrumentedPreferenceFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
}

View File

@@ -16,7 +16,7 @@
package com.android.settings; package com.android.settings;
import android.annotation.StringRes; import android.annotation.Nullable;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
@@ -35,6 +35,7 @@ import android.widget.Spinner;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.PhoneConstants;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.ConfirmLockPattern; import com.android.settings.password.ConfirmLockPattern;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
@@ -52,7 +53,7 @@ import java.util.List;
* *
* This is the initial screen. * This is the initial screen.
*/ */
public class ResetNetwork extends OptionsMenuFragment { public class ResetNetwork extends InstrumentedPreferenceFragment {
private static final String TAG = "ResetNetwork"; private static final String TAG = "ResetNetwork";
// Arbitrary to avoid conficts // Arbitrary to avoid conficts
@@ -65,9 +66,11 @@ public class ResetNetwork extends OptionsMenuFragment {
private Button mInitiateButton; private Button mInitiateButton;
@Override @Override
@StringRes public void onCreate(@Nullable Bundle savedInstanceState) {
protected int getTitle() { super.onCreate(savedInstanceState);
return R.string.reset_network_title; if (usePreferenceScreenTitle()) {
getActivity().setTitle(R.string.reset_network_title);
}
} }
/** /**

View File

@@ -38,6 +38,7 @@ import android.widget.Toast;
import com.android.ims.ImsManager; import com.android.ims.ImsManager;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.PhoneConstants;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settingslib.RestrictedLockUtils; import com.android.settingslib.RestrictedLockUtils;
import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -52,7 +53,7 @@ import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
* *
* This is the confirmation screen. * This is the confirmation screen.
*/ */
public class ResetNetworkConfirm extends OptionsMenuFragment { public class ResetNetworkConfirm extends InstrumentedPreferenceFragment {
private View mContentView; private View mContentView;
private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;

View File

@@ -20,7 +20,6 @@ import static android.widget.LinearLayout.LayoutParams.MATCH_PARENT;
import static android.widget.LinearLayout.LayoutParams.WRAP_CONTENT; import static android.widget.LinearLayout.LayoutParams.WRAP_CONTENT;
import android.animation.LayoutTransition; import android.animation.LayoutTransition;
import android.annotation.StringRes;
import android.annotation.UiThread; import android.annotation.UiThread;
import android.app.Activity; import android.app.Activity;
import android.app.KeyguardManager; import android.app.KeyguardManager;
@@ -66,6 +65,7 @@ import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.UnlaunchableAppActivity; import com.android.internal.app.UnlaunchableAppActivity;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.settings.core.InstrumentedPreferenceFragment;
import java.security.cert.CertificateEncodingException; import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
@@ -75,7 +75,7 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.function.IntConsumer; import java.util.function.IntConsumer;
public class TrustedCredentialsSettings extends OptionsMenuFragment public class TrustedCredentialsSettings extends InstrumentedPreferenceFragment
implements TrustedCredentialsDialogBuilder.DelegateInterface { implements TrustedCredentialsDialogBuilder.DelegateInterface {
public static final String ARG_SHOW_NEW_FOR_USER = "ARG_SHOW_NEW_FOR_USER"; public static final String ARG_SHOW_NEW_FOR_USER = "ARG_SHOW_NEW_FOR_USER";
@@ -91,12 +91,6 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
private static final String USER_ACTION = "com.android.settings.TRUSTED_CREDENTIALS_USER"; private static final String USER_ACTION = "com.android.settings.TRUSTED_CREDENTIALS_USER";
private static final int REQUEST_CONFIRM_CREDENTIALS = 1; private static final int REQUEST_CONFIRM_CREDENTIALS = 1;
@Override
@StringRes
protected int getTitle() {
return R.string.trusted_credentials;
}
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
return MetricsEvent.TRUSTED_CREDENTIALS; return MetricsEvent.TRUSTED_CREDENTIALS;
@@ -183,10 +177,11 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE); final Activity activity = getActivity();
mKeyguardManager = (KeyguardManager) getActivity() mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
mKeyguardManager = (KeyguardManager) activity
.getSystemService(Context.KEYGUARD_SERVICE); .getSystemService(Context.KEYGUARD_SERVICE);
mTrustAllCaUserId = getActivity().getIntent().getIntExtra(ARG_SHOW_NEW_FOR_USER, mTrustAllCaUserId = activity.getIntent().getIntExtra(ARG_SHOW_NEW_FOR_USER,
UserHandle.USER_NULL); UserHandle.USER_NULL);
mConfirmedCredentialUsers = new ArraySet<>(2); mConfirmedCredentialUsers = new ArraySet<>(2);
mConfirmingCredentialUser = UserHandle.USER_NULL; mConfirmingCredentialUser = UserHandle.USER_NULL;
@@ -206,7 +201,11 @@ public class TrustedCredentialsSettings extends OptionsMenuFragment
filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE); filter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE); filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNLOCKED); filter.addAction(Intent.ACTION_MANAGED_PROFILE_UNLOCKED);
getActivity().registerReceiver(mWorkProfileChangedReceiver, filter); activity.registerReceiver(mWorkProfileChangedReceiver, filter);
if (usePreferenceScreenTitle()) {
activity.setTitle(R.string.trusted_credentials);
}
} }
@Override @Override

View File

@@ -18,7 +18,6 @@ package com.android.settings;
import android.annotation.LayoutRes; import android.annotation.LayoutRes;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.annotation.StringRes;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
import android.app.DialogFragment; import android.app.DialogFragment;
@@ -86,9 +85,11 @@ public class UserCredentialsSettings extends SettingsPreferenceFragment
} }
@Override @Override
@StringRes public void onCreate(@Nullable Bundle savedInstanceState) {
protected int getTitle() { super.onCreate(savedInstanceState);
return R.string.user_credentials; if (usePreferenceScreenTitle()) {
getActivity().setTitle(R.string.user_credentials);
}
} }
protected void announceRemoval(String alias) { protected void announceRemoval(String alias) {

View File

@@ -119,6 +119,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
static final String EXTRA_PREFERENCE_KEY = "preference_key"; static final String EXTRA_PREFERENCE_KEY = "preference_key";
static final String EXTRA_CHECKED = "checked"; static final String EXTRA_CHECKED = "checked";
static final String EXTRA_TITLE = "title"; static final String EXTRA_TITLE = "title";
static final String EXTRA_TITLE_RES = "title_res";
static final String EXTRA_RESOLVE_INFO = "resolve_info"; static final String EXTRA_RESOLVE_INFO = "resolve_info";
static final String EXTRA_SUMMARY = "summary"; static final String EXTRA_SUMMARY = "summary";
static final String EXTRA_SETTINGS_TITLE = "settings_title"; static final String EXTRA_SETTINGS_TITLE = "settings_title";

View File

@@ -141,6 +141,10 @@ public final class MagnificationPreferenceFragment extends SettingsPreferenceFra
Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED); Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED);
extras.putString(AccessibilitySettings.EXTRA_TITLE, getString( extras.putString(AccessibilitySettings.EXTRA_TITLE, getString(
R.string.accessibility_screen_magnification_navbar_title)); R.string.accessibility_screen_magnification_navbar_title));
if (usePreferenceScreenTitle()) {
extras.putInt(AccessibilitySettings.EXTRA_TITLE_RES,
R.string.accessibility_screen_magnification_navbar_title);
}
extras.putCharSequence(AccessibilitySettings.EXTRA_SUMMARY, extras.putCharSequence(AccessibilitySettings.EXTRA_SUMMARY,
getActivity().getResources().getText( getActivity().getResources().getText(
R.string.accessibility_screen_magnification_navbar_summary)); R.string.accessibility_screen_magnification_navbar_summary));
@@ -190,6 +194,10 @@ public final class MagnificationPreferenceFragment extends SettingsPreferenceFra
Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED); Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED);
extras.putString(AccessibilitySettings.EXTRA_TITLE, context.getString( extras.putString(AccessibilitySettings.EXTRA_TITLE, context.getString(
R.string.accessibility_screen_magnification_gestures_title)); R.string.accessibility_screen_magnification_gestures_title));
if (usePreferenceScreenTitle()) {
extras.putInt(AccessibilitySettings.EXTRA_TITLE_RES,
R.string.accessibility_screen_magnification_gestures_title);
}
extras.putCharSequence(AccessibilitySettings.EXTRA_SUMMARY, context.getResources().getText( extras.putCharSequence(AccessibilitySettings.EXTRA_SUMMARY, context.getResources().getText(
R.string.accessibility_screen_magnification_summary)); R.string.accessibility_screen_magnification_summary));
extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED, extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED,

View File

@@ -21,16 +21,8 @@ import android.content.pm.ResolveInfo;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import android.support.v7.preference.PreferenceViewHolder;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment; import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.widget.SwitchBar; import com.android.settings.widget.SwitchBar;
@@ -104,13 +96,6 @@ public abstract class ToggleFeaturePreferenceFragment
// Implement this to reset a checked listener. // Implement this to reset a checked listener.
} }
/**
* Get the res id for static preference xml for this fragment.
*/
protected int getPreferenceScreenResId() {
return -1;
}
private void installActionBarToggleSwitch() { private void installActionBarToggleSwitch() {
mSwitchBar.show(); mSwitchBar.show();
onInstallSwitchBarToggleSwitch(); onInstallSwitchBarToggleSwitch();

View File

@@ -17,7 +17,6 @@
package com.android.settings.accessibility; package com.android.settings.accessibility;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.annotation.StringRes;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
@@ -53,12 +52,9 @@ public class ToggleFontSizePreferenceFragment extends PreviewSeekBarPreferenceFr
for (int i = 0; i < strEntryValues.length; ++i) { for (int i = 0; i < strEntryValues.length; ++i) {
mValues[i] = Float.parseFloat(strEntryValues[i]); mValues[i] = Float.parseFloat(strEntryValues[i]);
} }
if (usePreferenceScreenTitle()) {
getActivity().setTitle(R.string.title_font_size);
} }
@Override
@StringRes
protected int getTitle() {
return R.string.title_font_size;
} }
@Override @Override

View File

@@ -217,6 +217,14 @@ public class ToggleScreenMagnificationPreferenceFragment extends
if (arguments.containsKey(AccessibilitySettings.EXTRA_CHECKED)) { if (arguments.containsKey(AccessibilitySettings.EXTRA_CHECKED)) {
mInitialSetting = arguments.getBoolean(AccessibilitySettings.EXTRA_CHECKED); mInitialSetting = arguments.getBoolean(AccessibilitySettings.EXTRA_CHECKED);
} }
if (usePreferenceScreenTitle()
&& arguments.containsKey(AccessibilitySettings.EXTRA_TITLE_RES)) {
final int titleRes = arguments.getInt(AccessibilitySettings.EXTRA_TITLE_RES);
if (titleRes > 0) {
getActivity().setTitle(titleRes);
}
}
} }
private void updateConfigurationWarningIfNeeded() { private void updateConfigurationWarningIfNeeded() {

View File

@@ -16,7 +16,7 @@
package com.android.settings.applications; package com.android.settings.applications;
import android.annotation.StringRes; import android.annotation.Nullable;
import android.app.FragmentTransaction; import android.app.FragmentTransaction;
import android.os.Bundle; import android.os.Bundle;
import android.preference.PreferenceFrameLayout; import android.preference.PreferenceFrameLayout;
@@ -37,6 +37,14 @@ public class BackgroundCheckSummary extends InstrumentedPreferenceFragment {
return MetricsEvent.BACKGROUND_CHECK_SUMMARY; return MetricsEvent.BACKGROUND_CHECK_SUMMARY;
} }
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (usePreferenceScreenTitle()) {
getActivity().setTitle(R.string.background_check_pref);
}
}
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// initialize the inflater // initialize the inflater
@@ -59,10 +67,4 @@ public class BackgroundCheckSummary extends InstrumentedPreferenceFragment {
return rootView; return rootView;
} }
@Override
@StringRes
protected int getTitle() {
return R.string.background_check_pref;
}
} }

View File

@@ -15,7 +15,6 @@
*/ */
package com.android.settings.applications; package com.android.settings.applications;
import android.annotation.StringRes;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
@@ -44,6 +43,10 @@ public class RunningServices extends SettingsPreferenceFragment {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setHasOptionsMenu(true); setHasOptionsMenu(true);
if (usePreferenceScreenTitle()) {
getActivity().setTitle(R.string.runningservices_settings_title);
}
} }
@Override @Override
@@ -109,12 +112,6 @@ public class RunningServices extends SettingsPreferenceFragment {
mOptionsMenu.findItem(SHOW_BACKGROUND_PROCESSES).setVisible(!showingBackground); mOptionsMenu.findItem(SHOW_BACKGROUND_PROCESSES).setVisible(!showingBackground);
} }
@Override
@StringRes
protected int getTitle() {
return R.string.runningservices_settings_title;
}
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
return MetricsEvent.RUNNING_SERVICES; return MetricsEvent.RUNNING_SERVICES;

View File

@@ -16,10 +16,9 @@
package com.android.settings.core; package com.android.settings.core;
import android.annotation.Nullable;
import android.annotation.StringRes;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
import android.support.annotation.XmlRes; import android.support.annotation.XmlRes;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils; import android.text.TextUtils;
@@ -40,7 +39,8 @@ public abstract class InstrumentedPreferenceFragment extends ObservablePreferenc
implements Instrumentable { implements Instrumentable {
private static final String TAG = "InstrumentedPrefFrag"; private static final String TAG = "InstrumentedPrefFrag";
private static final String FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE = @VisibleForTesting
static final String FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE =
"settings_use_preference_screen_title"; "settings_use_preference_screen_title";
protected MetricsFeatureProvider mMetricsFeatureProvider; protected MetricsFeatureProvider mMetricsFeatureProvider;
@@ -56,17 +56,6 @@ public abstract class InstrumentedPreferenceFragment extends ObservablePreferenc
getLifecycle().addObserver(new SurveyMixin(this, getClass().getSimpleName())); getLifecycle().addObserver(new SurveyMixin(this, getClass().getSimpleName()));
} }
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (usePreferenceScreenTitle()) {
final int title = getTitle();
if (title != -1) {
getActivity().setTitle(title);
}
}
}
@Override @Override
public void onAttach(Context context) { public void onAttach(Context context) {
super.onAttach(context); super.onAttach(context);
@@ -81,6 +70,12 @@ public abstract class InstrumentedPreferenceFragment extends ObservablePreferenc
@Override @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
if (usePreferenceScreenTitle()) {
final int resId = getPreferenceScreenResId();
if (resId > 0) {
addPreferencesFromResource(resId);
}
}
} }
@Override @Override
@@ -102,13 +97,9 @@ public abstract class InstrumentedPreferenceFragment extends ObservablePreferenc
} }
/** /**
* Return the resource id of the title to be used for the fragment. This is for preference * Get the res id for static preference xml for this fragment.
* 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 getPreferenceScreenResId() {
protected int getTitle() {
return -1; return -1;
} }

View File

@@ -115,7 +115,6 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
@Override @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
super.onCreatePreferences(savedInstanceState, rootKey);
refreshAllPreferences(getLogTag()); refreshAllPreferences(getLogTag());
} }
@@ -211,11 +210,6 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment
*/ */
protected abstract String getLogTag(); protected abstract String getLogTag();
/**
* Get the res id for static preference xml for this fragment.
*/
protected abstract int getPreferenceScreenResId();
/** /**
* Get a list of {@link AbstractPreferenceController} for this fragment. * Get a list of {@link AbstractPreferenceController} for this fragment.
*/ */

View File

@@ -17,7 +17,6 @@
package com.android.settings.display; package com.android.settings.display;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.annotation.StringRes;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
@@ -71,6 +70,10 @@ public class ScreenZoomSettings extends PreviewSeekBarPreferenceFragment impleme
mInitialIndex = initialIndex; mInitialIndex = initialIndex;
mDefaultDensity = density.getDefaultDensity(); mDefaultDensity = density.getDefaultDensity();
} }
if (usePreferenceScreenTitle()) {
getActivity().setTitle(R.string.screen_zoom_title);
}
} }
@Override @Override
@@ -99,12 +102,6 @@ public class ScreenZoomSettings extends PreviewSeekBarPreferenceFragment impleme
return R.string.help_url_display_size; return R.string.help_url_display_size;
} }
@Override
@StringRes
protected int getTitle() {
return R.string.screen_zoom_title;
}
@Override @Override
public int getMetricsCategory() { public int getMetricsCategory() {
return MetricsEvent.DISPLAY_SCREEN_ZOOM; return MetricsEvent.DISPLAY_SCREEN_ZOOM;

View File

@@ -19,7 +19,12 @@ package com.android.settings.language;
import android.content.Context; import android.content.Context;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.localepicker.LocaleListEditor;
import com.android.settings.overlay.FeatureFactory; import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController; import com.android.settingslib.core.AbstractPreferenceController;
@@ -60,4 +65,17 @@ public class PhoneLanguagePreferenceController extends AbstractPreferenceControl
public String getPreferenceKey() { public String getPreferenceKey() {
return KEY_PHONE_LANGUAGE; return KEY_PHONE_LANGUAGE;
} }
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!InstrumentedPreferenceFragment.usePreferenceScreenTitle()
|| !KEY_PHONE_LANGUAGE.equals(preference.getKey())) {
return false;
}
Utils.startWithFragment(mContext, LocaleListEditor.class.getName(), null, null, 0,
R.string.pref_title_lang_selection, null,
MetricsProto.MetricsEvent.SETTINGS_LANGUAGE_CATEGORY);
return true;
}
} }

View File

@@ -77,8 +77,6 @@ public class LocaleListEditor extends SettingsPreferenceFragment
final View result = super.onCreateView(inflater, container, savedInstState); final View result = super.onCreateView(inflater, container, savedInstState);
final View myLayout = inflater.inflate(R.layout.locale_order_list, (ViewGroup) result); final View myLayout = inflater.inflate(R.layout.locale_order_list, (ViewGroup) result);
getActivity().setTitle(R.string.pref_title_lang_selection);
configureDragAndDrop(myLayout); configureDragAndDrop(myLayout);
return result; return result;
} }

View File

@@ -16,7 +16,6 @@
package com.android.settings.nfc; package com.android.settings.nfc;
import android.annotation.StringRes;
import android.nfc.NfcAdapter; import android.nfc.NfcAdapter;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
@@ -98,6 +97,10 @@ public class AndroidBeam extends InstrumentedPreferenceFragment
mSwitchBar.setEnabled(!mBeamDisallowedByBase); mSwitchBar.setEnabled(!mBeamDisallowedByBase);
mSwitchBar.show(); mSwitchBar.show();
} }
if (usePreferenceScreenTitle()) {
activity.setTitle(R.string.android_beam_settings_title);
}
} }
@Override @Override
@@ -131,10 +134,4 @@ public class AndroidBeam extends InstrumentedPreferenceFragment
public int getMetricsCategory() { public int getMetricsCategory() {
return MetricsEvent.NFC_BEAM; return MetricsEvent.NFC_BEAM;
} }
@Override
@StringRes
protected int getTitle() {
return R.string.android_beam_settings_title;
}
} }

View File

@@ -31,17 +31,6 @@ public abstract class EmptyTextSettings extends SettingsPreferenceFragment {
private TextView mEmpty; private TextView mEmpty;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
super.onCreatePreferences(savedInstanceState, rootKey);
if (usePreferenceScreenTitle()) {
final int resId = getPreferenceScreenResId();
if (resId > 0) {
addPreferencesFromResource(resId);
}
}
}
@Override @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState); super.onViewCreated(view, savedInstanceState);
@@ -58,9 +47,4 @@ public abstract class EmptyTextSettings extends SettingsPreferenceFragment {
protected void setEmptyText(int text) { protected void setEmptyText(int text) {
mEmpty.setText(text); mEmpty.setText(text);
} }
/**
* Get the res id for static preference xml for this fragment.
*/
protected abstract int getPreferenceScreenResId();
} }

View File

@@ -50,15 +50,15 @@ import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.settings.OptionsMenuFragment;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.fingerprint.FingerprintUiHelper; import com.android.settings.fingerprint.FingerprintUiHelper;
/** /**
* Base fragment to be shared for PIN/Pattern/Password confirmation fragments. * Base fragment to be shared for PIN/Pattern/Password confirmation fragments.
*/ */
public abstract class ConfirmDeviceCredentialBaseFragment extends OptionsMenuFragment public abstract class ConfirmDeviceCredentialBaseFragment extends InstrumentedPreferenceFragment
implements FingerprintUiHelper.Callback { implements FingerprintUiHelper.Callback {
public static final String PACKAGE = "com.android.settings"; public static final String PACKAGE = "com.android.settings";

View File

@@ -67,10 +67,7 @@ public abstract class RadioButtonPickerFragment extends InstrumentedPreferenceFr
@Override @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
super.onCreatePreferences(savedInstanceState, rootKey); super.onCreatePreferences(savedInstanceState, rootKey);
final int resId = getPreferenceScreenResId(); if (!usePreferenceScreenTitle()) {
if (usePreferenceScreenTitle() && resId > 0) {
addPreferencesFromResource(resId);
} else {
addPreferencesFromResource(R.xml.placeholder_prefs); addPreferencesFromResource(R.xml.placeholder_prefs);
} }
updateCandidates(); updateCandidates();
@@ -115,13 +112,6 @@ public abstract class RadioButtonPickerFragment extends InstrumentedPreferenceFr
onSelectionPerformed(success); onSelectionPerformed(success);
} }
/**
* Get the res id for static preference xml for this fragment.
*/
protected int getPreferenceScreenResId() {
return -1;
}
/** /**
* A chance for subclasses to bind additional things to the preference. * A chance for subclasses to bind additional things to the preference.
*/ */

View File

@@ -0,0 +1,150 @@
/*
* Copyright (C) 2017 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.settings.core;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.preference.PreferenceManager;
import android.support.v7.preference.PreferenceScreen;
import android.util.FeatureFlagUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
import com.android.settings.TestConfig;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
SettingsShadowSystemProperties.class
})
public class InstrumentedPreferenceFragmentTest {
@Mock
private PreferenceScreen mScreen;
@Mock
private PreferenceManager mPreferenceManager;
@Mock
private Activity mActivity;
private InstrumentedPreferenceFragmentTestable mFragment;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mPreferenceManager.getPreferenceScreen()).thenReturn(mScreen);
mFragment = spy(new InstrumentedPreferenceFragmentTestable());
ReflectionHelpers.setField(mFragment, "mPreferenceManager", mPreferenceManager);
}
@After
public void tearDown() {
SettingsShadowSystemProperties.clear();
}
@Test
public void onCreatePreferences_preferenceScreenTitleFeatureOff_shouldNotAddPreference() {
SettingsShadowSystemProperties.set(
FeatureFlagUtils.FFLAG_PREFIX + mFragment.FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE,
"false");
mFragment.onCreatePreferences(Bundle.EMPTY, null /* rootKey */);
verify(mFragment, never()).addPreferencesFromResource(anyInt());
}
@Test
public void onCreatePreferences_noPreferenceScreenResId_shouldNotAddPreference() {
SettingsShadowSystemProperties.set(
FeatureFlagUtils.FFLAG_PREFIX + mFragment.FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE,
"true");
mFragment.onCreatePreferences(Bundle.EMPTY, null /* rootKey */);
verify(mFragment, never()).addPreferencesFromResource(anyInt());
}
@Test
public void onCreatePreferences_gotPreferenceScreenResId_shouldAddPreferences() {
SettingsShadowSystemProperties.set(
FeatureFlagUtils.FFLAG_PREFIX + mFragment.FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE,
"true");
mFragment.setPreferenceScreenResId(R.xml.screen_pinning_settings);
when(mFragment.getActivity()).thenReturn(mActivity);
mFragment.onCreatePreferences(Bundle.EMPTY, null /* rootKey */);
verify(mFragment).addPreferencesFromResource(R.xml.screen_pinning_settings);
verify(mActivity, never()).setTitle(any());
}
@Test
public void onCreatePreferences_gotPrefScreenResIdAndTitle_shouldAddPreferencesAndSetTitle() {
SettingsShadowSystemProperties.set(
FeatureFlagUtils.FFLAG_PREFIX + mFragment.FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE,
"true");
mFragment.setPreferenceScreenResId(R.xml.screen_pinning_settings);
when(mFragment.getActivity()).thenReturn(mActivity);
final CharSequence title = "Test Title";
when(mScreen.getTitle()).thenReturn(title);
mFragment.onCreatePreferences(Bundle.EMPTY, null /* rootKey */);
verify(mFragment).addPreferencesFromResource(R.xml.screen_pinning_settings);
verify(mActivity).setTitle(title);
}
private static class InstrumentedPreferenceFragmentTestable
extends InstrumentedPreferenceFragment {
private int mScreenId = -1;
public InstrumentedPreferenceFragmentTestable() {
}
@Override
public int getMetricsCategory() {
return MetricsEvent.VIEW_UNKNOWN;
}
@Override
protected int getPreferenceScreenResId() {
return mScreenId;
}
public void setPreferenceScreenResId(int id) {
mScreenId = id;
}
}
}