Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 660b36e0 authored by Sunny Shao's avatar Sunny Shao
Browse files

Use FooterPreference in xml explicitly

 - Removed the FooterPreferenceMixin from the BluetoothDetailsMacAddressController.
 - Added the common api addFooterPreference.

Fixes: 139104386
Test: manual test
Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.bluetooth
Change-Id: Iab40fa4c5be674290b1dc6d372c84609ccc2ea49
parent 656e4ef7
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -47,4 +47,10 @@
    <PreferenceCategory
        android:key="bluetooth_profiles"/>

    <com.android.settingslib.widget.FooterPreference
        android:key="device_details_footer"
        android:selectable="false"
        settings:searchable="false"
        settings:controller="com.android.settings.bluetooth.BluetoothDetailsMacAddressController"/>

</PreferenceScreen>
 No newline at end of file
+69 −39
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ import android.widget.ListView;
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;
@@ -105,6 +106,7 @@ import com.android.settings.core.FeatureFlags;
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;
@@ -221,6 +223,7 @@ public final class Utils extends com.android.settingslib.Utils {

    /**
     * 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.
     */
@@ -257,8 +260,9 @@ public final class Utils extends com.android.settingslib.Utils {
        // 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) {
@@ -500,7 +504,8 @@ public final class Utils extends com.android.settingslib.Utils {
     * 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;
        }
@@ -541,6 +546,7 @@ public final class Utils extends com.android.settingslib.Utils {

    /**
     * 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.
     * @return UserInfo of the user or null for non-existent user.
@@ -625,6 +631,7 @@ public final class Utils extends com.android.settingslib.Utils {

    /**
     * Returns an accessible SpannableString.
     *
     * @param displayText     the text to display
     * @param accessibileText the text text-to-speech engines should read
     */
@@ -835,6 +842,7 @@ public final class Utils extends com.android.settingslib.Utils {

    /**
     * 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.
     */
@@ -864,6 +872,7 @@ public final class Utils extends com.android.settingslib.Utils {

    /**
     * Returns if a given user is a profile of another user.
     *
     * @param user    The user whose profiles wibe checked.
     * @param profile The (potential) profile.
     * @return if the profile is actually a profile
@@ -889,6 +898,7 @@ public final class Utils extends com.android.settingslib.Utils {
    /**
     * 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 devicePolicyManager used to check whether it is device owner app
     * @param packageName         package to check about
@@ -1065,4 +1075,24 @@ public final class Utils extends com.android.settingslib.Utils {
            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);
    }
}
+4 −8
Original line number Diff line number Diff line
@@ -25,13 +25,13 @@ import com.android.settings.R;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.FooterPreferenceMixinCompat;

/**
 * This class adds the device MAC address to a footer.
 */
public class BluetoothDetailsMacAddressController extends BluetoothDetailsController {
    FooterPreferenceMixinCompat mFooterPreferenceMixin;
    public static final String KEY_DEVICE_DETAILS_FOOTER = "device_details_footer";

    FooterPreference mFooterPreference;

    public BluetoothDetailsMacAddressController(Context context,
@@ -39,12 +39,11 @@ public class BluetoothDetailsMacAddressController extends BluetoothDetailsContro
            CachedBluetoothDevice device,
            Lifecycle lifecycle) {
        super(context, fragment, device, lifecycle);
        mFooterPreferenceMixin = new FooterPreferenceMixinCompat(fragment, lifecycle);
    }

    @Override
    protected void init(PreferenceScreen screen) {
        mFooterPreference = mFooterPreferenceMixin.createFooterPreference();
        mFooterPreference = screen.findPreference(KEY_DEVICE_DETAILS_FOOTER);
        mFooterPreference.setTitle(mContext.getString(
                R.string.bluetooth_device_mac_address, mCachedDevice.getAddress()));
    }
@@ -57,9 +56,6 @@ public class BluetoothDetailsMacAddressController extends BluetoothDetailsContro

    @Override
    public String getPreferenceKey() {
        if (mFooterPreference == null) {
            return null;
        }
        return mFooterPreference.getKey();
        return KEY_DEVICE_DETAILS_FOOTER;
    }
}
 No newline at end of file
+4 −1
Original line number Diff line number Diff line
@@ -15,8 +15,11 @@
 */
package com.android.settings.bluetooth;

import static com.android.settings.bluetooth.BluetoothDetailsMacAddressController.KEY_DEVICE_DETAILS_FOOTER;

import static com.google.common.truth.Truth.assertThat;

import com.android.settings.Utils;
import com.android.settingslib.widget.FooterPreference;

import org.junit.Test;
@@ -25,7 +28,6 @@ import org.robolectric.RobolectricTestRunner;

@RunWith(RobolectricTestRunner.class)
public class BluetoothDetailsMacAddressControllerTest extends BluetoothDetailsControllerTestBase {

  private BluetoothDetailsMacAddressController mController;

  @Override
@@ -34,6 +36,7 @@ public class BluetoothDetailsMacAddressControllerTest extends BluetoothDetailsCo
    mController =
        new BluetoothDetailsMacAddressController(mContext, mFragment, mCachedDevice, mLifecycle);
    setupDevice(mDeviceConfig);
    Utils.addFooterPreference(mContext, mScreen, KEY_DEVICE_DETAILS_FOOTER, null /* title */);
  }

  @Test