diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java index ce980e0bda2..c8eb488df09 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java @@ -19,12 +19,15 @@ import android.app.settings.SettingsEnums; import android.content.Context; import android.net.Uri; import android.provider.DeviceConfig; +import android.text.TextUtils; +import android.util.Log; import androidx.annotation.VisibleForTesting; import com.android.settings.R; import com.android.settings.core.SettingsUIDeviceConfig; import com.android.settings.dashboard.DashboardFragment; +import com.android.settings.password.PasswordUtils; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.slices.SlicePreferenceController; import com.android.settingslib.search.SearchIndexable; @@ -33,6 +36,9 @@ import com.android.settingslib.search.SearchIndexable; public class ConnectedDeviceDashboardFragment extends DashboardFragment { private static final String TAG = "ConnectedDeviceFrag"; + private static final String SETTINGS_PACKAGE_NAME = "com.android.settings"; + private static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui"; + private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @VisibleForTesting static final String KEY_CONNECTED_DEVICES = "connected_device_list"; @@ -64,12 +70,20 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment { super.onAttach(context); final boolean nearbyEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI, SettingsUIDeviceConfig.BT_NEAR_BY_SUGGESTION_ENABLED, true); + String callingAppPackageName = PasswordUtils.getCallingAppPackageName( + getActivity().getActivityToken()); + if (DEBUG) { + Log.d(TAG, "onAttach() calling package name is : " + callingAppPackageName); + } use(AvailableMediaDeviceGroupController.class).init(this); use(ConnectedDeviceGroupController.class).init(this); use(PreviouslyConnectedDevicePreferenceController.class).init(this); use(SlicePreferenceController.class).setSliceUri(nearbyEnabled ? Uri.parse(getString(R.string.config_nearby_devices_slice_uri)) : null); + use(DiscoverableFooterPreferenceController.class).setAlwaysDiscoverable( + TextUtils.equals(SETTINGS_PACKAGE_NAME, callingAppPackageName) + || TextUtils.equals(SYSTEMUI_PACKAGE_NAME, callingAppPackageName)); } /** diff --git a/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceController.java b/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceController.java index 91368bf2a81..5df31bc63a4 100644 --- a/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceController.java +++ b/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceController.java @@ -52,6 +52,7 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro private BluetoothAdapter mBluetoothAdapter; private AlwaysDiscoverable mAlwaysDiscoverable; private FooterPreference mPreference; + private boolean mIsAlwaysDiscoverable; public DiscoverableFooterPreferenceController(Context context, String key) { super(context, key); @@ -84,7 +85,9 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro } mContext.registerReceiver(mBluetoothChangedReceiver, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); - mAlwaysDiscoverable.start(); + if (mIsAlwaysDiscoverable) { + mAlwaysDiscoverable.start(); + } updateFooterPreferenceTitle(mBluetoothAdapter.getState()); } @@ -94,7 +97,19 @@ public class DiscoverableFooterPreferenceController extends BasePreferenceContro return; } mContext.unregisterReceiver(mBluetoothChangedReceiver); - mAlwaysDiscoverable.stop(); + if (mIsAlwaysDiscoverable) { + mAlwaysDiscoverable.stop(); + } + } + + /** + * Set whether the device can be discovered. By default the value will be {@code false}. + * + * @param isAlwaysDiscoverable {@code true} if the device can be discovered, + * otherwise {@code false} + */ + public void setAlwaysDiscoverable(boolean isAlwaysDiscoverable) { + mIsAlwaysDiscoverable = isAlwaysDiscoverable; } private void updateFooterPreferenceTitle(int bluetoothState) { diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java index ead6fc68c11..05a1e8f7f1d 100644 --- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java +++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java @@ -29,7 +29,6 @@ import android.os.Handler; import android.provider.Settings; import android.text.TextUtils; import android.view.View; -import android.util.Pair; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -184,35 +183,18 @@ public class BatterySaverScheduleSettings extends RadioButtonPickerFragment { } private void logPowerSaver() { - int currentSaverPercentage = getSaverPercentage(); - String currentSaverScheduleKey = mRadioButtonController.getDefaultKey(); + final int currentSaverPercentage = getSaverPercentage(); + final String currentSaverScheduleKey = mRadioButtonController.getDefaultKey(); if (mSaverScheduleKey.equals(currentSaverScheduleKey) && mSaverPercentage == currentSaverPercentage) { return; } - int scheduleType = -1; - int schedulePercentage = -1; - switch (currentSaverScheduleKey) { - case BatterySaverScheduleRadioButtonsController.KEY_NO_SCHEDULE: - scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE; - break; - case BatterySaverScheduleRadioButtonsController.KEY_ROUTINE: - scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE; - break; - case BatterySaverScheduleRadioButtonsController.KEY_PERCENTAGE: - scheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE; - schedulePercentage = currentSaverPercentage; - break; - // Unknown schedule type. - default: - return; - } FeatureFactory.getFactory(mContext).getMetricsFeatureProvider() - .action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, - Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, - scheduleType), - Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE, - schedulePercentage)); + .action(SettingsEnums.FUELGAUGE_BATTERY_SAVER, + SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, + SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE, + currentSaverScheduleKey, + currentSaverPercentage); } private int getSaverPercentage() { diff --git a/tests/robotests/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceControllerTest.java index 065b924138c..6510f198de1 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/DiscoverableFooterPreferenceControllerTest.java @@ -18,6 +18,7 @@ package com.android.settings.connecteddevice; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -104,7 +105,8 @@ public class DiscoverableFooterPreferenceControllerTest { } @Test - public void onStart_shouldRegisterBluetoothChanged() { + public void onStart_setAlwaysDiscoverableAsTrue_shouldRegisterBluetoothChanged() { + mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(true); mDiscoverableFooterPreferenceController.onStart(); assertThat(getRegisteredBroadcastReceivers()).contains(mBluetoothChangedReceiver); @@ -112,7 +114,8 @@ public class DiscoverableFooterPreferenceControllerTest { } @Test - public void onStop_shouldUnregisterBluetoothChanged() { + public void onStop_setAlwaysDiscoverableAsTrue_shouldUnregisterBluetoothChanged() { + mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(true); mDiscoverableFooterPreferenceController.onStart(); mDiscoverableFooterPreferenceController.onStop(); @@ -120,6 +123,25 @@ public class DiscoverableFooterPreferenceControllerTest { verify(mAlwaysDiscoverable).stop(); } + @Test + public void onStart_setAlwaysDiscoverableAsFalse_shouldNotRegisterBluetoothChanged() { + mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(false); + mDiscoverableFooterPreferenceController.onStart(); + + assertThat(getRegisteredBroadcastReceivers()).contains(mBluetoothChangedReceiver); + verify(mAlwaysDiscoverable, never()).start(); + } + + @Test + public void onStop_setAlwaysDiscoverableAsFalse_shouldNotUnregisterBluetoothChanged() { + mDiscoverableFooterPreferenceController.setAlwaysDiscoverable(false); + mDiscoverableFooterPreferenceController.onStart(); + mDiscoverableFooterPreferenceController.onStop(); + + assertThat(getRegisteredBroadcastReceivers()).doesNotContain(mBluetoothChangedReceiver); + verify(mAlwaysDiscoverable, never()).stop(); + } + @Test public void onBluetoothStateChanged_bluetoothOn_updateTitle() { BluetoothAdapter.getDefaultAdapter().setName(DEVICE_NAME); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java index afd7f66d56b..5c24da9aedb 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java @@ -43,22 +43,22 @@ public final class BatterySaverScheduleSettingsTest { @Test public void onPause_withNoScheduleType_logExpectedData() { - setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, 0); + int expectedPercentage = 0; + setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, expectedPercentage); mBatterySaverScheduleSettings.onPause(); - verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE, - /* schedulePercentage= */ -1); + verifySchedule("key_battery_saver_no_schedule", expectedPercentage); } @Test public void onPause_withRoutineScheduleType_logExpectedData() { - setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC, 0); + int expectedPercentage = 0; + setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC, expectedPercentage); mBatterySaverScheduleSettings.onPause(); - verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE, - /* schedulePercentage= */ -1); + verifySchedule("key_battery_saver_routine", expectedPercentage); } @Test @@ -68,8 +68,7 @@ public final class BatterySaverScheduleSettingsTest { mBatterySaverScheduleSettings.onPause(); - verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE, - expectedPercentage); + verifySchedule("key_battery_saver_percentage", expectedPercentage); } @Test @@ -90,8 +89,7 @@ public final class BatterySaverScheduleSettingsTest { mBatterySaverScheduleSettings.onPause(); - verifySchedule(SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE, - expectedPercentage); + verifySchedule("key_battery_saver_percentage", expectedPercentage); } private void setSchedule(int scheduleType, int schedulePercentage) { @@ -101,13 +99,12 @@ public final class BatterySaverScheduleSettingsTest { Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, schedulePercentage); } - private void verifySchedule(int scheduleType, int schedulePercentage) { + private void verifySchedule(String scheduleTypeKey, int schedulePercentage) { waitAWhile(); - verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER, - Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, - scheduleType), - Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE, - schedulePercentage)); + verify(mMetricsFeatureProvider).action(SettingsEnums.FUELGAUGE_BATTERY_SAVER, + SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, + SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE, + scheduleTypeKey, schedulePercentage); } private void waitAWhile() {