From 76517509a050be077ea2d53959d879c3b97bc556 Mon Sep 17 00:00:00 2001 From: tom hsu Date: Fri, 7 Mar 2025 11:49:22 +0000 Subject: [PATCH] Use SatelliteManager API to check device support satellite or not. Flag: EXEMPT bug fix Bug: b/401045618 Test: atest pass Change-Id: Icbf9cf0f8da9c04d8b637f326e3bad7fb2a30916 --- .../network/telephony/SatelliteSetting.java | 3 +-- ...eSettingsPreferenceCategoryController.java | 23 ++++++++++++++++++- ...tingsPreferenceCategoryControllerTest.java | 14 ++++++++++- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/network/telephony/SatelliteSetting.java b/src/com/android/settings/network/telephony/SatelliteSetting.java index effe7394aba..88e89d479b8 100644 --- a/src/com/android/settings/network/telephony/SatelliteSetting.java +++ b/src/com/android/settings/network/telephony/SatelliteSetting.java @@ -152,7 +152,7 @@ public class SatelliteSetting extends RestrictedDashboardFragment { } private void updateTitle() { - getActivity().setTitle(getSubjectString()); + findPreference("satellite_setting").setTitle(getSubjectString()); } // About satellite content @@ -315,7 +315,6 @@ public class SatelliteSetting extends RestrictedDashboardFragment { } private boolean isSatelliteAttachSupported(int subId) { - return mConfigBundle.getBoolean(KEY_SATELLITE_ATTACH_SUPPORTED_BOOL, false); } diff --git a/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryController.java b/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryController.java index 29502477796..38285d454be 100644 --- a/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryController.java +++ b/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryController.java @@ -23,6 +23,7 @@ import static android.telephony.CarrierConfigManager.KEY_SATELLITE_ESOS_SUPPORTE import static android.telephony.NetworkRegistrationInfo.SERVICE_TYPE_SMS; import android.content.Context; +import android.os.OutcomeReceiver; import android.os.PersistableBundle; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; @@ -41,6 +42,8 @@ import com.android.settings.network.CarrierConfigCache; import java.util.Arrays; import java.util.List; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; /** Preference controller for Satellite functions in mobile network settings. */ public class SatelliteSettingsPreferenceCategoryController @@ -55,6 +58,8 @@ public class SatelliteSettingsPreferenceCategoryController private SatelliteManager mSatelliteManager; private TelephonyManager mTelephonyManager; private PreferenceScreen mPreferenceScreen; + @VisibleForTesting + AtomicBoolean mIsSatelliteSupported = new AtomicBoolean(false); public SatelliteSettingsPreferenceCategoryController(Context context, String key) { super(context, key); @@ -71,6 +76,7 @@ public class SatelliteSettingsPreferenceCategoryController mCarrierConfigCache = CarrierConfigCache.getInstance(mContext); mSatelliteManager = mContext.getSystemService(SatelliteManager.class); mTelephonyManager = mContext.getSystemService(TelephonyManager.class); + requestIsSatelliteSupported(); } @Override @@ -93,7 +99,7 @@ public class SatelliteSettingsPreferenceCategoryController return UNSUPPORTED_ON_DEVICE; } - if (mSatelliteManager == null) { + if (!mIsSatelliteSupported.get()) { return UNSUPPORTED_ON_DEVICE; } @@ -142,6 +148,21 @@ public class SatelliteSettingsPreferenceCategoryController } } + private void requestIsSatelliteSupported() { + if (mSatelliteManager == null) { + Log.d(TAG, "SatelliteManager is null"); + return; + } + mSatelliteManager.requestIsSupported(Executors.newSingleThreadExecutor(), + new OutcomeReceiver<>() { + @Override + public void onResult(Boolean result) { + mIsSatelliteSupported.set(result); + SatelliteSettingsPreferenceCategoryController.this.displayPreference(); + } + }); + } + @VisibleForTesting static class CarrierRoamingNtnModeCallback extends TelephonyCallback implements TelephonyCallback.CarrierRoamingNtnListener { diff --git a/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryControllerTest.java index c9a8c6cca9a..f9c0f16ac9f 100644 --- a/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryControllerTest.java +++ b/tests/unit/src/com/android/settings/network/telephony/SatelliteSettingsPreferenceCategoryControllerTest.java @@ -78,12 +78,24 @@ public class SatelliteSettingsPreferenceCategoryControllerTest { mController = new SatelliteSettingsPreferenceCategoryController(mContext, KEY); when(mCarrierConfigCache.getConfigForSubId(TEST_SUB_ID)).thenReturn(mPersistableBundle); when(mContext.getSystemService(SatelliteManager.class)).thenReturn(satelliteManager); + mController.mIsSatelliteSupported.set(true); + } + + @Test + @EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG) + public void getAvailabilityStatus_noSatelliteManager_returnUnsupported() { + when(mContext.getSystemService(SatelliteManager.class)).thenReturn(null); + mController.init(TEST_SUB_ID); + + int result = mController.getAvailabilityStatus(TEST_SUB_ID); + + assertThat(result).isEqualTo(UNSUPPORTED_ON_DEVICE); } @Test @EnableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG) public void getAvailabilityStatus_deviceUnsupported_returnUnsupported() { - when(mContext.getSystemService(SatelliteManager.class)).thenReturn(null); + mController.mIsSatelliteSupported.set(false); int result = mController.getAvailabilityStatus(TEST_SUB_ID);