Use Builder to replace the Uitls.addFooterPreference
Fixes: 139163212
Test: manual test
Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.bluetooth
Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.accounts
Change-Id: I861434b81c07db785e6f1cfb3e34871ffba41e5f
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 00542ca..75db3e1 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -92,7 +92,6 @@
import android.widget.TabWidget;
import androidx.annotation.StringRes;
-import androidx.annotation.NonNull;
import androidx.core.graphics.drawable.IconCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Lifecycle;
@@ -106,7 +105,6 @@
import com.android.settings.development.featureflags.FeatureFlagPersistent;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.widget.ActionBarShadowController;
-import com.android.settingslib.widget.FooterPreference;
import java.net.InetAddress;
import java.util.Iterator;
@@ -141,16 +139,16 @@
* Finds a matching activity for a preference's intent. If a matching
* activity is not found, it will remove the preference.
*
- * @param context The context.
+ * @param context The context.
* @param parentPreferenceGroup The preference group that contains the
- * preference whose intent is being resolved.
- * @param preferenceKey The key of the preference whose intent is being
- * resolved.
- * @param flags 0 or one or more of
- * {@link #UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY}
- * .
+ * preference whose intent is being resolved.
+ * @param preferenceKey The key of the preference whose intent is being
+ * resolved.
+ * @param flags 0 or one or more of
+ * {@link #UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY}
+ * .
* @return Whether an activity was found. If false, the preference was
- * removed.
+ * removed.
*/
public static boolean updatePreferenceToSpecificActivityOrRemove(Context context,
PreferenceGroup parentPreferenceGroup, String preferenceKey, int flags) {
@@ -223,7 +221,6 @@
/**
* Returns the WIFI IP Addresses, if any, taking into account IPv4 and IPv6 style addresses.
- *
* @param context the application context
* @return the formatted and newline-separated IP addresses, or null if none.
*/
@@ -232,7 +229,7 @@
Network currentNetwork = wifiManager.getCurrentNetwork();
if (currentNetwork != null) {
ConnectivityManager cm = (ConnectivityManager)
- context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ context.getSystemService(Context.CONNECTIVITY_SERVICE);
LinkProperties prop = cm.getLinkProperties(currentNetwork);
return formatIpAddresses(prop);
}
@@ -260,9 +257,8 @@
// many cases, because the constructor takes the only string as the language
// code. So : new Locale("en", "US").toString() => "en_US"
// And : new Locale("en_US").toString() => "en_us"
- if (null == localeStr) {
+ if (null == localeStr)
return Locale.getDefault();
- }
String[] brokenDownLocale = localeStr.split("_", 3);
// split may not return a 0-length array.
if (1 == brokenDownLocale.length) {
@@ -333,7 +329,7 @@
final long localRowProfileId;
final Cursor localRawProfile = cr.query(
Profile.CONTENT_RAW_CONTACTS_URI,
- new String[]{RawContacts._ID},
+ new String[] {RawContacts._ID},
RawContacts.ACCOUNT_TYPE + " IS NULL AND " +
RawContacts.ACCOUNT_NAME + " IS NULL",
null, null);
@@ -351,8 +347,8 @@
// Find the structured name for the raw contact.
final Cursor structuredName = cr.query(
Profile.CONTENT_URI.buildUpon().appendPath(Contacts.Data.CONTENT_DIRECTORY).build(),
- new String[]{CommonDataKinds.StructuredName.GIVEN_NAME,
- CommonDataKinds.StructuredName.FAMILY_NAME},
+ new String[] {CommonDataKinds.StructuredName.GIVEN_NAME,
+ CommonDataKinds.StructuredName.FAMILY_NAME},
Data.RAW_CONTACT_ID + "=" + localRowProfileId,
null, null);
if (structuredName == null) return null;
@@ -374,7 +370,7 @@
private static final String getProfileDisplayName(Context context) {
final ContentResolver cr = context.getContentResolver();
final Cursor profile = cr.query(Profile.CONTENT_URI,
- new String[]{Profile.DISPLAY_NAME}, null, null, null);
+ new String[] {Profile.DISPLAY_NAME}, null, null, null);
if (profile == null) return null;
try {
@@ -455,7 +451,7 @@
* <ul>
* <li> If this activity is launched from other user, return that user id.
* <li> If this is launched from the Settings app in same user, return the user contained as an
- * extra in the arguments or intent extras.
+ * extra in the arguments or intent extras.
* <li> Otherwise, return UserHandle.myUserId().
* </ul>
* <p>
@@ -504,8 +500,7 @@
* Lookup both {@link Intent#EXTRA_USER} and {@link Intent#EXTRA_USER_ID} in the bundle
* and return the {@link UserHandle} object. Return {@code null} if nothing is found.
*/
- private static @Nullable
- UserHandle getUserHandleFromBundle(Bundle bundle) {
+ private static @Nullable UserHandle getUserHandleFromBundle(Bundle bundle) {
if (bundle == null) {
return null;
}
@@ -520,14 +515,14 @@
return null;
}
- /**
- * Returns true if the user provided is in the same profiles group as the current user.
- */
- private static boolean isProfileOf(UserManager um, UserHandle otherUser) {
- if (um == null || otherUser == null) return false;
- return (UserHandle.myUserId() == otherUser.getIdentifier())
- || um.getUserProfiles().contains(otherUser);
- }
+ /**
+ * Returns true if the user provided is in the same profiles group as the current user.
+ */
+ private static boolean isProfileOf(UserManager um, UserHandle otherUser) {
+ if (um == null || otherUser == null) return false;
+ return (UserHandle.myUserId() == otherUser.getIdentifier())
+ || um.getUserProfiles().contains(otherUser);
+ }
/**
* Return whether or not the user should have a SIM Cards option in Settings.
@@ -546,9 +541,8 @@
/**
* Queries for the UserInfo of a user. Returns null if the user doesn't exist (was removed).
- *
* @param userManager Instance of UserManager
- * @param checkUser The user to check the existence of.
+ * @param checkUser The user to check the existence of.
* @return UserInfo of the user or null for non-existent user.
*/
public static UserInfo getExistingUser(UserManager userManager, UserHandle checkUser) {
@@ -588,7 +582,7 @@
for (IntentFilter filter : filters) {
if (filter.hasCategory(Intent.CATEGORY_BROWSABLE)
&& (filter.hasDataScheme(IntentFilter.SCHEME_HTTP) ||
- filter.hasDataScheme(IntentFilter.SCHEME_HTTPS))) {
+ filter.hasDataScheme(IntentFilter.SCHEME_HTTPS))) {
result.addAll(filter.getHostsList());
}
}
@@ -631,8 +625,7 @@
/**
* Returns an accessible SpannableString.
- *
- * @param displayText the text to display
+ * @param displayText the text to display
* @param accessibileText the text text-to-speech engines should read
*/
public static SpannableString createAccessibleSequence(CharSequence displayText,
@@ -649,7 +642,7 @@
* {@link Intent#EXTRA_USER_ID} if it belongs to the current user.
*
* @throws SecurityException if the given userId does not belong to the
- * current user group.
+ * current user group.
*/
public static int getUserIdFromBundle(Context context, Bundle bundle) {
return getUserIdFromBundle(context, bundle, false);
@@ -660,10 +653,10 @@
* {@link Intent#EXTRA_USER_ID} if it belongs to the current user.
*
* @param isInternal indicating if the caller is "internal" to the system,
- * meaning we're willing to trust extras like
- * {@link ChooseLockSettingsHelper#EXTRA_ALLOW_ANY_USER}.
+ * meaning we're willing to trust extras like
+ * {@link ChooseLockSettingsHelper#EXTRA_ALLOW_ANY_USER}.
* @throws SecurityException if the given userId does not belong to the
- * current user group.
+ * current user group.
*/
public static int getUserIdFromBundle(Context context, Bundle bundle, boolean isInternal) {
if (bundle == null) {
@@ -783,7 +776,7 @@
final ApplicationInfo appInfo = context.getPackageManager().getApplicationInfo(
packageName,
PackageManager.MATCH_DISABLED_COMPONENTS
- | PackageManager.MATCH_ANY_USER);
+ | PackageManager.MATCH_ANY_USER);
return appInfo.loadLabel(context.getPackageManager());
} catch (PackageManager.NameNotFoundException e) {
Log.w(TAG, "Unable to find info for package: " + packageName);
@@ -842,9 +835,8 @@
/**
* Launches an intent which may optionally have a user id defined.
- *
* @param fragment Fragment to use to launch the activity.
- * @param intent Intent to launch.
+ * @param intent Intent to launch.
*/
public static void launchIntent(Fragment fragment, Intent intent) {
try {
@@ -872,8 +864,7 @@
/**
* Returns if a given user is a profile of another user.
- *
- * @param user The user whose profiles wibe checked.
+ * @param user The user whose profiles wibe checked.
* @param profile The (potential) profile.
* @return if the profile is actually a profile
*/
@@ -898,10 +889,9 @@
/**
* Return {@code true} if the supplied package is device owner or profile owner of at
* least one user.
- *
- * @param userManager used to get profile owner app for each user
+ * @param userManager used to get profile owner app for each user
* @param devicePolicyManager used to check whether it is device owner app
- * @param packageName package to check about
+ * @param packageName package to check about
*/
public static boolean isProfileOrDeviceOwner(UserManager userManager,
DevicePolicyManager devicePolicyManager, String packageName) {
@@ -953,8 +943,8 @@
/**
* Gets a drawable with a limited size to avoid crashing Settings if it's too big.
*
- * @param original original drawable, typically an app icon.
- * @param maxWidth maximum width, in pixels.
+ * @param original original drawable, typically an app icon.
+ * @param maxWidth maximum width, in pixels.
* @param maxHeight maximum height, in pixels.
*/
public static Drawable getSafeDrawable(Drawable original, int maxWidth, int maxHeight) {
@@ -987,7 +977,7 @@
public static IconCompat createIconWithDrawable(Drawable drawable) {
Bitmap bitmap;
if (drawable instanceof BitmapDrawable) {
- bitmap = ((BitmapDrawable) drawable).getBitmap();
+ bitmap = ((BitmapDrawable)drawable).getBitmap();
} else {
final int width = drawable.getIntrinsicWidth();
final int height = drawable.getIntrinsicHeight();
@@ -1075,24 +1065,4 @@
ActionBarShadowController.attachToView(activity, lifecycle, scrollView);
}
}
-
- /**
- * Add a footer preference into preference group.
- *
- * @param group The parent {@link PreferenceGroup} of the footer preference.
- * @param key The key value of the footer preference.
- * @param title The title of the footer preference.
- */
- public static void addFooterPreference(@NonNull Context context, @NonNull PreferenceGroup group,
- String key, CharSequence title) {
- final FooterPreference footerPreference = new FooterPreference(context);
- footerPreference.setSelectable(false);
- if (!TextUtils.isEmpty(key)) {
- footerPreference.setKey(key);
- }
- if (!TextUtils.isEmpty(title)) {
- footerPreference.setTitle(title);
- }
- group.addPreference(footerPreference);
- }
}
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index a652056..992cc67 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -42,7 +42,6 @@
import android.view.MenuInflater;
import android.view.MenuItem;
-import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.Preference;
@@ -460,7 +459,8 @@
syncPref.setChecked(oneTimeSyncMode || syncEnabled);
}
if (syncIsFailing) {
- createFooterPreference();
+ getPreferenceScreen().addPreference(new FooterPreference.Builder(
+ getActivity()).setTitle(R.string.sync_is_failing).build());
}
}
@@ -553,11 +553,4 @@
| DateUtils.FORMAT_SHOW_YEAR
| DateUtils.FORMAT_SHOW_TIME);
}
-
- @VisibleForTesting
- void createFooterPreference() {
- final FooterPreference footerPreference = new FooterPreference(getActivity());
- footerPreference.setTitle(R.string.sync_is_failing);
- getPreferenceScreen().addPreference(footerPreference);
- }
}
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index c90a0de..68b21f5 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -141,56 +141,57 @@
private HashMap<Integer, String> mFingerprintsRenaming;
FingerprintAuthenticateSidecar.Listener mAuthenticateListener =
- new FingerprintAuthenticateSidecar.Listener() {
- @Override
- public void onAuthenticationSucceeded(
- FingerprintManager.AuthenticationResult result) {
- int fingerId = result.getFingerprint().getBiometricId();
- mHandler.obtainMessage(MSG_FINGER_AUTH_SUCCESS, fingerId, 0).sendToTarget();
- }
+ new FingerprintAuthenticateSidecar.Listener() {
+ @Override
+ public void onAuthenticationSucceeded(
+ FingerprintManager.AuthenticationResult result) {
+ int fingerId = result.getFingerprint().getBiometricId();
+ mHandler.obtainMessage(MSG_FINGER_AUTH_SUCCESS, fingerId, 0).sendToTarget();
+ }
- @Override
- public void onAuthenticationFailed() {
- mHandler.obtainMessage(MSG_FINGER_AUTH_FAIL).sendToTarget();
- }
+ @Override
+ public void onAuthenticationFailed() {
+ mHandler.obtainMessage(MSG_FINGER_AUTH_FAIL).sendToTarget();
+ }
- @Override
- public void onAuthenticationError(int errMsgId, CharSequence errString) {
- mHandler.obtainMessage(MSG_FINGER_AUTH_ERROR, errMsgId, 0, errString)
- .sendToTarget();
- }
+ @Override
+ public void onAuthenticationError(int errMsgId, CharSequence errString) {
+ mHandler.obtainMessage(MSG_FINGER_AUTH_ERROR, errMsgId, 0, errString)
+ .sendToTarget();
+ }
- @Override
- public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
- mHandler.obtainMessage(MSG_FINGER_AUTH_HELP, helpMsgId, 0, helpString)
- .sendToTarget();
- }
- };
+ @Override
+ public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
+ mHandler.obtainMessage(MSG_FINGER_AUTH_HELP, helpMsgId, 0, helpString)
+ .sendToTarget();
+ }
+ };
FingerprintRemoveSidecar.Listener mRemovalListener =
new FingerprintRemoveSidecar.Listener() {
- public void onRemovalSucceeded(Fingerprint fingerprint) {
- mHandler.obtainMessage(MSG_REFRESH_FINGERPRINT_TEMPLATES,
- fingerprint.getBiometricId(), 0).sendToTarget();
- updateDialog();
- }
+ public void onRemovalSucceeded(Fingerprint fingerprint) {
+ mHandler.obtainMessage(MSG_REFRESH_FINGERPRINT_TEMPLATES,
+ fingerprint.getBiometricId(), 0).sendToTarget();
+ updateDialog();
+ }
- public void onRemovalError(Fingerprint fp, int errMsgId, CharSequence errString) {
- final Activity activity = getActivity();
- if (activity != null) {
- Toast.makeText(activity, errString, Toast.LENGTH_SHORT);
- }
- updateDialog();
- }
+ public void onRemovalError(Fingerprint fp, int errMsgId,
+ CharSequence errString) {
+ final Activity activity = getActivity();
+ if (activity != null) {
+ Toast.makeText(activity, errString, Toast.LENGTH_SHORT);
+ }
+ updateDialog();
+ }
- private void updateDialog() {
- RenameDialog renameDialog = (RenameDialog) getFragmentManager().
- findFragmentByTag(RenameDialog.class.getName());
- if (renameDialog != null) {
- renameDialog.enableDelete();
- }
- }
- };
+ private void updateDialog() {
+ RenameDialog renameDialog = (RenameDialog) getFragmentManager().
+ findFragmentByTag(RenameDialog.class.getName());
+ if (renameDialog != null) {
+ renameDialog.enableDelete();
+ }
+ }
+ };
private final Handler mHandler = new Handler() {
@Override
@@ -200,17 +201,17 @@
removeFingerprintPreference(msg.arg1);
updateAddPreference();
retryFingerprint();
- break;
+ break;
case MSG_FINGER_AUTH_SUCCESS:
highlightFingerprintItem(msg.arg1);
retryFingerprint();
- break;
+ break;
case MSG_FINGER_AUTH_FAIL:
// No action required... fingerprint will allow up to 5 of these
- break;
+ break;
case MSG_FINGER_AUTH_ERROR:
- handleError(msg.arg1 /* errMsgId */, (CharSequence) msg.obj /* errStr */ );
- break;
+ handleError(msg.arg1 /* errMsgId */, (CharSequence) msg.obj /* errStr */);
+ break;
case MSG_FINGER_AUTH_HELP: {
// Not used
}
@@ -220,7 +221,7 @@
};
/**
- * @param errMsgId
+ *
*/
protected void handleError(int errMsgId, CharSequence msg) {
switch (errMsgId) {
@@ -243,7 +244,7 @@
// Activity can be null on a screen rotation.
final Activity activity = getActivity();
if (activity != null) {
- Toast.makeText(activity, msg , Toast.LENGTH_SHORT).show();
+ Toast.makeText(activity, msg, Toast.LENGTH_SHORT).show();
}
}
retryFingerprint(); // start again
@@ -425,11 +426,8 @@
if (context == null) {
return;
}
-
- final FooterPreference footerPreference = new FooterPreference(context);
- footerPreference.setTitle(mFooterTitle);
- footerPreference.setSelectable(false);
- root.addPreference(footerPreference);
+ root.addPreference(new FooterPreference.Builder(context).setTitle(
+ mFooterTitle).build());
}
private static String genKey(int id) {
@@ -522,7 +520,8 @@
RenameDialog renameDialog = new RenameDialog();
Bundle args = new Bundle();
if (mFingerprintsRenaming.containsKey(fp.getBiometricId())) {
- final Fingerprint f = new Fingerprint(mFingerprintsRenaming.get(fp.getBiometricId()),
+ final Fingerprint f = new Fingerprint(
+ mFingerprintsRenaming.get(fp.getBiometricId()),
fp.getGroupId(), fp.getBiometricId(), fp.getDeviceId());
args.putParcelable("fingerprint", f);
} else {
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountSyncSettingsTest.java b/tests/robotests/src/com/android/settings/accounts/AccountSyncSettingsTest.java
index 59d1f60..dd1778f 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountSyncSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountSyncSettingsTest.java
@@ -15,8 +15,6 @@
*/
package com.android.settings.accounts;
-import static com.google.common.truth.Truth.assertThat;
-
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -26,9 +24,7 @@
import android.os.UserHandle;
import androidx.fragment.app.FragmentActivity;
-import androidx.preference.Preference;
-import com.android.settings.testutils.shadow.ShadowAuthenticationHelper;
import com.android.settings.testutils.shadow.ShadowContentResolver;
import org.junit.After;
@@ -37,7 +33,6 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
-import org.robolectric.shadows.androidx.fragment.FragmentController;
import org.robolectric.util.ReflectionHelpers;
@RunWith(RobolectricTestRunner.class)
@@ -62,18 +57,4 @@
settings.onPreferenceTreeClick(preference);
// no crash
}
-
- @Test
- @Config(shadows = {ShadowAuthenticationHelper.class})
- public void createFooterPreference_shouldReturnFooter() {
- final AccountSyncSettings settings = FragmentController.of(new AccountSyncSettings())
- .create()
- .get();
-
- settings.createFooterPreference();
-
- final Preference footer = settings.getPreferenceScreen().findPreference(
- "footer_preference");
- assertThat(footer).isNotNull();
- }
}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressControllerTest.java
index ec1549f..c7eb1bb 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressControllerTest.java
@@ -19,7 +19,6 @@
import static com.google.common.truth.Truth.assertThat;
-import com.android.settings.Utils;
import com.android.settingslib.widget.FooterPreference;
import org.junit.Test;
@@ -28,22 +27,24 @@
@RunWith(RobolectricTestRunner.class)
public class BluetoothDetailsMacAddressControllerTest extends BluetoothDetailsControllerTestBase {
- private BluetoothDetailsMacAddressController mController;
+ private BluetoothDetailsMacAddressController mController;
- @Override
- public void setUp() {
- super.setUp();
- mController =
- new BluetoothDetailsMacAddressController(mContext, mFragment, mCachedDevice, mLifecycle);
- setupDevice(mDeviceConfig);
- Utils.addFooterPreference(mContext, mScreen, KEY_DEVICE_DETAILS_FOOTER, null /* title */);
- }
+ @Override
+ public void setUp() {
+ super.setUp();
+ mController =
+ new BluetoothDetailsMacAddressController(mContext, mFragment, mCachedDevice,
+ mLifecycle);
+ setupDevice(mDeviceConfig);
+ mScreen.addPreference(new FooterPreference.Builder(mContext).setKey(
+ KEY_DEVICE_DETAILS_FOOTER).build());
+ }
- @Test
- public void macAddress() {
- showScreen(mController);
- FooterPreference footer =
- (FooterPreference) mScreen.findPreference(mController.getPreferenceKey());
- assertThat(footer.getTitle().toString()).endsWith(mDeviceConfig.getAddress());
- }
+ @Test
+ public void macAddress() {
+ showScreen(mController);
+ FooterPreference footer =
+ (FooterPreference) mScreen.findPreference(mController.getPreferenceKey());
+ assertThat(footer.getTitle().toString()).endsWith(mDeviceConfig.getAddress());
+ }
}