Loading res/xml/bluetooth_device_details_fragment.xml +6 −0 Original line number Diff line number Diff line Loading @@ -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 src/com/android/settings/Utils.java +69 −39 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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. */ Loading Loading @@ -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) { Loading Loading @@ -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; } Loading Loading @@ -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. Loading Loading @@ -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 */ Loading Loading @@ -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. */ Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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); } } src/com/android/settings/bluetooth/BluetoothDetailsMacAddressController.java +4 −8 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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())); } Loading @@ -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 tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressControllerTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -25,7 +28,6 @@ import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class BluetoothDetailsMacAddressControllerTest extends BluetoothDetailsControllerTestBase { private BluetoothDetailsMacAddressController mController; @Override Loading @@ -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 Loading Loading
res/xml/bluetooth_device_details_fragment.xml +6 −0 Original line number Diff line number Diff line Loading @@ -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
src/com/android/settings/Utils.java +69 −39 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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. */ Loading Loading @@ -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) { Loading Loading @@ -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; } Loading Loading @@ -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. Loading Loading @@ -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 */ Loading Loading @@ -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. */ Loading Loading @@ -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 Loading @@ -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 Loading Loading @@ -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); } }
src/com/android/settings/bluetooth/BluetoothDetailsMacAddressController.java +4 −8 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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())); } Loading @@ -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
tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsMacAddressControllerTest.java +4 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -25,7 +28,6 @@ import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class BluetoothDetailsMacAddressControllerTest extends BluetoothDetailsControllerTestBase { private BluetoothDetailsMacAddressController mController; @Override Loading @@ -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 Loading