Loading res/values/strings.xml +4 −1 Original line number Diff line number Diff line Loading @@ -11522,9 +11522,12 @@ <!-- Summary for UWB preference. [CHAR_LIMIT=NONE]--> <string name="uwb_settings_summary">Helps identify the relative position of nearby devices that have UWB</string> <!-- Summary for UWB preference when airplane mode is disabled. [CHAR_LIMIT=NONE]--> <!-- Summary for UWB preference when airplane mode is enabled. [CHAR_LIMIT=NONE]--> <string name="uwb_settings_summary_airplane_mode">Turn off airplane mode to use UWB </string> <!-- Summary for UWB preference when UWB is unavailable due to regulatory requirements. [CHAR_LIMIT=NONE]--> <string name="uwb_settings_summary_no_uwb_regulatory">UWB is unavailable in the current location</string> <!-- Label for the camera use toggle [CHAR LIMIT=40] --> <string name="camera_toggle_title">Camera access</string> <!-- Label for the camera use toggle [CHAR LIMIT=40] --> src/com/android/settings/uwb/UwbPreferenceController.java +14 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.settings.uwb; import static android.uwb.UwbManager.AdapterStateCallback.STATE_CHANGED_REASON_SYSTEM_REGULATION; import static android.uwb.UwbManager.AdapterStateCallback.STATE_DISABLED; import static android.uwb.UwbManager.AdapterStateCallback.STATE_ENABLED_ACTIVE; import static android.uwb.UwbManager.AdapterStateCallback.STATE_ENABLED_INACTIVE; Loading Loading @@ -50,7 +52,7 @@ public class UwbPreferenceController extends TogglePreferenceController implemen private final UwbUtils mUwbUtils; private boolean mAirplaneModeOn; private /* @AdapterStateCallback.State */ int mState; private /* @AdapterStateCallback.StateChangedReason */ int mReason; private /* @AdapterStateCallback.StateChangedReason */ int mStateReason; private final BroadcastReceiver mAirplaneModeChangedReceiver; private final AdapterStateCallback mAdapterStateCallback; private final Executor mExecutor; Loading @@ -74,7 +76,7 @@ public class UwbPreferenceController extends TogglePreferenceController implemen }; mAdapterStateCallback = (state, reason) -> { mState = state; mReason = reason; mStateReason = reason; updateState(mPreference); }; } else { Loading @@ -92,12 +94,18 @@ public class UwbPreferenceController extends TogglePreferenceController implemen return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_UWB); } private boolean isUwbDisabledDueToRegulatory() { return mState == STATE_DISABLED && mStateReason == STATE_CHANGED_REASON_SYSTEM_REGULATION; } @Override public int getAvailabilityStatus() { if (!isUwbSupportedOnDevice()) { return UNSUPPORTED_ON_DEVICE; } else if (mAirplaneModeOn) { return DISABLED_DEPENDENT_SETTING; } else if (isUwbDisabledDueToRegulatory()) { return CONDITIONALLY_UNAVAILABLE; } else { return AVAILABLE; } Loading Loading @@ -134,7 +142,7 @@ public class UwbPreferenceController extends TogglePreferenceController implemen public void onStart() { if (isUwbSupportedOnDevice()) { mState = mUwbManager.getAdapterState(); mReason = AdapterStateCallback.STATE_CHANGED_REASON_ERROR_UNKNOWN; mStateReason = AdapterStateCallback.STATE_CHANGED_REASON_ERROR_UNKNOWN; mAirplaneModeOn = mUwbUtils.isAirplaneModeOn(mContext); mUwbManager.registerAdapterStateCallback(mExecutor, mAdapterStateCallback); mContext.registerReceiver(mAirplaneModeChangedReceiver, Loading Loading @@ -163,6 +171,9 @@ public class UwbPreferenceController extends TogglePreferenceController implemen public CharSequence getSummary() { if (mAirplaneModeOn) { return mContext.getResources().getString(R.string.uwb_settings_summary_airplane_mode); } else if (isUwbDisabledDueToRegulatory()) { return mContext.getResources().getString( R.string.uwb_settings_summary_no_uwb_regulatory); } else { return mContext.getResources().getString(R.string.uwb_settings_summary); } Loading tests/robotests/src/com/android/settings/uwb/UwbPreferenceControllerTest.java +17 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.uwb; import static android.uwb.UwbManager.AdapterStateCallback.STATE_CHANGED_REASON_SYSTEM_POLICY; import static android.uwb.UwbManager.AdapterStateCallback.STATE_CHANGED_REASON_SYSTEM_REGULATION; import static android.uwb.UwbManager.AdapterStateCallback.STATE_DISABLED; import static android.uwb.UwbManager.AdapterStateCallback.STATE_ENABLED_ACTIVE; import static android.uwb.UwbManager.AdapterStateCallback.STATE_ENABLED_INACTIVE; Loading Loading @@ -62,6 +63,7 @@ import org.robolectric.RobolectricTestRunner; public class UwbPreferenceControllerTest { private static final String TEST_SUMMARY = "uwb"; private static final String TEST_AIRPLANE_SUMMARY = "apm_uwb"; private static final String TEST_NO_UWB_REGULATORY_SUMMARY = "regulatory_uwb"; @Rule public MockitoRule rule = MockitoJUnit.rule(); Loading Loading @@ -96,6 +98,8 @@ public class UwbPreferenceControllerTest { .thenReturn(TEST_SUMMARY); when(mResources.getString(R.string.uwb_settings_summary_airplane_mode)) .thenReturn(TEST_AIRPLANE_SUMMARY); when(mResources.getString(R.string.uwb_settings_summary_no_uwb_regulatory)) .thenReturn(TEST_NO_UWB_REGULATORY_SUMMARY); when(mContext.getMainLooper()).thenReturn(mTestLooper.getLooper()); when(mContext.getSystemService(UwbManager.class)).thenReturn(mUwbManager); when(mContext.getResources()).thenReturn(mResources); Loading Loading @@ -219,5 +223,18 @@ public class UwbPreferenceControllerTest { verify(mPreference).setEnabled(true); verify(mPreference, times(2)).setSummary(TEST_SUMMARY); } @Test public void updateStateAndSummary_uwbDisabledDueToRegulatory() { startControllerAndCaptureCallbacks(); clearInvocations(mUwbManager, mPreference); mAdapterStateCallbackArgumentCaptor.getValue().onStateChanged( STATE_DISABLED, STATE_CHANGED_REASON_SYSTEM_REGULATION); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE); verify(mPreference, times(2)).setSummary(TEST_NO_UWB_REGULATORY_SUMMARY); } } Loading
res/values/strings.xml +4 −1 Original line number Diff line number Diff line Loading @@ -11522,9 +11522,12 @@ <!-- Summary for UWB preference. [CHAR_LIMIT=NONE]--> <string name="uwb_settings_summary">Helps identify the relative position of nearby devices that have UWB</string> <!-- Summary for UWB preference when airplane mode is disabled. [CHAR_LIMIT=NONE]--> <!-- Summary for UWB preference when airplane mode is enabled. [CHAR_LIMIT=NONE]--> <string name="uwb_settings_summary_airplane_mode">Turn off airplane mode to use UWB </string> <!-- Summary for UWB preference when UWB is unavailable due to regulatory requirements. [CHAR_LIMIT=NONE]--> <string name="uwb_settings_summary_no_uwb_regulatory">UWB is unavailable in the current location</string> <!-- Label for the camera use toggle [CHAR LIMIT=40] --> <string name="camera_toggle_title">Camera access</string> <!-- Label for the camera use toggle [CHAR LIMIT=40] -->
src/com/android/settings/uwb/UwbPreferenceController.java +14 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.settings.uwb; import static android.uwb.UwbManager.AdapterStateCallback.STATE_CHANGED_REASON_SYSTEM_REGULATION; import static android.uwb.UwbManager.AdapterStateCallback.STATE_DISABLED; import static android.uwb.UwbManager.AdapterStateCallback.STATE_ENABLED_ACTIVE; import static android.uwb.UwbManager.AdapterStateCallback.STATE_ENABLED_INACTIVE; Loading Loading @@ -50,7 +52,7 @@ public class UwbPreferenceController extends TogglePreferenceController implemen private final UwbUtils mUwbUtils; private boolean mAirplaneModeOn; private /* @AdapterStateCallback.State */ int mState; private /* @AdapterStateCallback.StateChangedReason */ int mReason; private /* @AdapterStateCallback.StateChangedReason */ int mStateReason; private final BroadcastReceiver mAirplaneModeChangedReceiver; private final AdapterStateCallback mAdapterStateCallback; private final Executor mExecutor; Loading @@ -74,7 +76,7 @@ public class UwbPreferenceController extends TogglePreferenceController implemen }; mAdapterStateCallback = (state, reason) -> { mState = state; mReason = reason; mStateReason = reason; updateState(mPreference); }; } else { Loading @@ -92,12 +94,18 @@ public class UwbPreferenceController extends TogglePreferenceController implemen return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_UWB); } private boolean isUwbDisabledDueToRegulatory() { return mState == STATE_DISABLED && mStateReason == STATE_CHANGED_REASON_SYSTEM_REGULATION; } @Override public int getAvailabilityStatus() { if (!isUwbSupportedOnDevice()) { return UNSUPPORTED_ON_DEVICE; } else if (mAirplaneModeOn) { return DISABLED_DEPENDENT_SETTING; } else if (isUwbDisabledDueToRegulatory()) { return CONDITIONALLY_UNAVAILABLE; } else { return AVAILABLE; } Loading Loading @@ -134,7 +142,7 @@ public class UwbPreferenceController extends TogglePreferenceController implemen public void onStart() { if (isUwbSupportedOnDevice()) { mState = mUwbManager.getAdapterState(); mReason = AdapterStateCallback.STATE_CHANGED_REASON_ERROR_UNKNOWN; mStateReason = AdapterStateCallback.STATE_CHANGED_REASON_ERROR_UNKNOWN; mAirplaneModeOn = mUwbUtils.isAirplaneModeOn(mContext); mUwbManager.registerAdapterStateCallback(mExecutor, mAdapterStateCallback); mContext.registerReceiver(mAirplaneModeChangedReceiver, Loading Loading @@ -163,6 +171,9 @@ public class UwbPreferenceController extends TogglePreferenceController implemen public CharSequence getSummary() { if (mAirplaneModeOn) { return mContext.getResources().getString(R.string.uwb_settings_summary_airplane_mode); } else if (isUwbDisabledDueToRegulatory()) { return mContext.getResources().getString( R.string.uwb_settings_summary_no_uwb_regulatory); } else { return mContext.getResources().getString(R.string.uwb_settings_summary); } Loading
tests/robotests/src/com/android/settings/uwb/UwbPreferenceControllerTest.java +17 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.settings.uwb; import static android.uwb.UwbManager.AdapterStateCallback.STATE_CHANGED_REASON_SYSTEM_POLICY; import static android.uwb.UwbManager.AdapterStateCallback.STATE_CHANGED_REASON_SYSTEM_REGULATION; import static android.uwb.UwbManager.AdapterStateCallback.STATE_DISABLED; import static android.uwb.UwbManager.AdapterStateCallback.STATE_ENABLED_ACTIVE; import static android.uwb.UwbManager.AdapterStateCallback.STATE_ENABLED_INACTIVE; Loading Loading @@ -62,6 +63,7 @@ import org.robolectric.RobolectricTestRunner; public class UwbPreferenceControllerTest { private static final String TEST_SUMMARY = "uwb"; private static final String TEST_AIRPLANE_SUMMARY = "apm_uwb"; private static final String TEST_NO_UWB_REGULATORY_SUMMARY = "regulatory_uwb"; @Rule public MockitoRule rule = MockitoJUnit.rule(); Loading Loading @@ -96,6 +98,8 @@ public class UwbPreferenceControllerTest { .thenReturn(TEST_SUMMARY); when(mResources.getString(R.string.uwb_settings_summary_airplane_mode)) .thenReturn(TEST_AIRPLANE_SUMMARY); when(mResources.getString(R.string.uwb_settings_summary_no_uwb_regulatory)) .thenReturn(TEST_NO_UWB_REGULATORY_SUMMARY); when(mContext.getMainLooper()).thenReturn(mTestLooper.getLooper()); when(mContext.getSystemService(UwbManager.class)).thenReturn(mUwbManager); when(mContext.getResources()).thenReturn(mResources); Loading Loading @@ -219,5 +223,18 @@ public class UwbPreferenceControllerTest { verify(mPreference).setEnabled(true); verify(mPreference, times(2)).setSummary(TEST_SUMMARY); } @Test public void updateStateAndSummary_uwbDisabledDueToRegulatory() { startControllerAndCaptureCallbacks(); clearInvocations(mUwbManager, mPreference); mAdapterStateCallbackArgumentCaptor.getValue().onStateChanged( STATE_DISABLED, STATE_CHANGED_REASON_SYSTEM_REGULATION); assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE); verify(mPreference, times(2)).setSummary(TEST_NO_UWB_REGULATORY_SUMMARY); } }