diff options
author | alk3pInjection <webmaster@raspii.tech> | 2024-08-14 22:08:35 +0800 |
---|---|---|
committer | alk3pInjection <webmaster@raspii.tech> | 2024-08-14 22:08:35 +0800 |
commit | bbaf875a522b1f765375a06ca10a50bb03c8f89c (patch) | |
tree | 74676bc245d89f6accc72f9f0e64839cedd277db | |
parent | 4c9d4e783d10d0a79c9e605fcdb38350f72ddbe6 (diff) | |
parent | ad02af22ee0cbcc0382ba3e1cfb32a5d427c13f6 (diff) |
Merge tag 'LA.QSSI.14.0.r1-16500-qssi.0' into umineko
LA.QSSI.14.0.r1-16500-qssi.0
Change-Id: Ib0d7cb2dcc12f50aa5febe512f3ea4154f22889c
8 files changed, 272 insertions, 26 deletions
diff --git a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java index 12612d62ad..6ca86e647f 100644 --- a/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java +++ b/src/com/android/settings/network/telephony/Enhanced4gBasePreferenceController.java @@ -113,6 +113,13 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc } final PersistableBundle carrierConfig = getCarrierConfigForSubId(subId); + if (!CarrierConfigManager.isConfigForIdentifiedCarrier(carrierConfig)) { + // If we only have the default carrier config just return, to avoid popping up the + // the VoLTE screen when it's disabled by the carrier. + Log.i(TAG, "Not showing 'VoLTE' screen. Carrier config not loaded"); + return CONDITIONALLY_UNAVAILABLE; + } + if ((carrierConfig == null) || carrierConfig.getBoolean(CarrierConfigManager.KEY_HIDE_ENHANCED_4G_LTE_BOOL)) { return CONDITIONALLY_UNAVAILABLE; diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java index ac44cd12dd..e6795bb547 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java +++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java @@ -27,13 +27,16 @@ import static android.telephony.NetworkRegistrationInfo.DOMAIN_PS; import android.app.Activity; import android.app.settings.SettingsEnums; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.os.Bundle; import android.os.RemoteException; import android.os.UserManager; import android.provider.SearchIndexableResource; import android.provider.Settings; +import android.telephony.CarrierConfigManager; import android.telephony.NetworkRegistrationInfo; import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; @@ -44,6 +47,7 @@ import android.telephony.ims.ImsManager; import android.telephony.ims.ImsMmTelManager; import android.text.TextUtils; import android.util.Log; +import android.util.SparseArray; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -130,9 +134,10 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme private MobileNetworkInfoEntity mMobileNetworkInfoEntity; private static ImsManager mImsMgr; - private static CiwlanConfig mCiwlanConfig = null; + private static SparseArray<CiwlanConfig> mCiwlanConfig = new SparseArray(); private boolean mExtTelServiceConnected = false; private ExtTelephonyManager mExtTelephonyManager; + private SubscriptionManager mSubscriptionManager; private final ServiceCallback mExtTelServiceCallback = new ServiceCallback() { @Override public void onConnected() { @@ -148,19 +153,35 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme } }; - private CiwlanConfig getCiwlanConfig() { - if (mCiwlanConfig != null) { - return mCiwlanConfig; + private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED + .equals(intent.getAction())) { + ThreadUtils.postOnMainThread(() -> { + redrawPreferenceControllers(); + }); + } + } + }; + + private CiwlanConfig getCiwlanConfig(int... subscriptionId) { + if (subscriptionId.length != 0 && mCiwlanConfig != null) { + return mCiwlanConfig.get(subscriptionId[0]); } mExecutor.execute(new Runnable() { @Override public void run() { // Query the C_IWLAN config - try { - mCiwlanConfig = mExtTelephonyManager.getCiwlanConfig( - SubscriptionManager.getSlotIndex(mSubId)); - } catch (RemoteException ex) { - Log.e(LOG_TAG, "getCiwlanConfig exception", ex); + int[] activeSubIdList = mSubscriptionManager.getActiveSubscriptionIdList(); + for (int i = 0; i < activeSubIdList.length; i++) { + try { + int subId = activeSubIdList[i]; + mCiwlanConfig.put(subId, mExtTelephonyManager.getCiwlanConfig( + SubscriptionManager.getSlotIndex(subId))); + } catch (RemoteException ex) { + Log.e(LOG_TAG, "getCiwlanConfig exception", ex); + } } } }); @@ -197,10 +218,16 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme Log.d(LOG_TAG, "isInCiwlanOnlyMode: C_IWLAN config null"); return false; } - if (isRoaming()) { - return mCiwlanConfig.isCiwlanOnlyInRoam(); + CiwlanConfig config = mCiwlanConfig.get(mSubId); + if (config != null) { + if (isRoaming()) { + return config.isCiwlanOnlyInRoam(); + } + return config.isCiwlanOnlyInHome(); + } else { + Log.d(LOG_TAG, "isInCiwlanOnlyMode: C_IWLAN config null for subId " + mSubId); + return false; } - return mCiwlanConfig.isCiwlanOnlyInHome(); } static boolean isCiwlanModeSupported() { @@ -208,7 +235,13 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme Log.d(LOG_TAG, "isCiwlanModeSupported: C_IWLAN config null"); return false; } - return mCiwlanConfig.isCiwlanModeSupported(); + CiwlanConfig config = mCiwlanConfig.get(mSubId); + if (config != null) { + return config.isCiwlanModeSupported(); + } else { + Log.d(LOG_TAG, "isCiwlanModeSupported: C_IWLAN config null for subId " + mSubId); + return false; + } } static boolean isRoaming() { @@ -469,6 +502,7 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme super.onCreate(icicle); final Context context = getContext(); + mSubscriptionManager = context.getSystemService(SubscriptionManager.class); mExtTelephonyManager = ExtTelephonyManager.getInstance(context); mExtTelephonyManager.connectService(mExtTelServiceCallback); mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); @@ -488,6 +522,8 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme mMobileNetworkRepository.updateEntity(); // TODO: remove log after fixing b/182326102 Log.d(LOG_TAG, "onResume() subId=" + mSubId); + getActivity().registerReceiver(mBroadcastReceiver, + new IntentFilter(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)); } private void onSubscriptionDetailChanged() { @@ -514,6 +550,7 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme public void onPause() { mMobileNetworkRepository.removeRegister(this); super.onPause(); + getActivity().unregisterReceiver(mBroadcastReceiver); } @Override diff --git a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java index ab8af3f200..b6cfe50f88 100644 --- a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java +++ b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java @@ -25,6 +25,7 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; import android.telephony.UiccCardInfo; +import android.telephony.UiccSlotInfo; import android.text.TextUtils; import android.util.ArrayMap; import android.util.Log; @@ -180,14 +181,19 @@ public class ToggleSubscriptionDialogActivity extends SubscriptionActionDialogAc @Override public void onSubscriptionsChanged() { - if ((mSubInfo == null || (!mSubInfo.isEmbedded() && - !mSubscriptionManager.isActiveSubscriptionId(mSubInfo.getSubscriptionId()))) + if (mSubInfo == null || (!mIsEsimOperation && !isPsimPresent() + && !mSubscriptionManager.isActiveSubscriptionId(mSubInfo.getSubscriptionId())) && !isFinishing()) { Log.i(TAG, "Finish dialog for inactive sim"); finish(); } } + private boolean isPsimPresent() { + return (UiccSlotUtil.getSlotInfos(mTelMgr).stream() + .anyMatch(slotInfo -> mSubInfo.getIccId().equals(slotInfo.getCardId()))); + } + @Override public void onDestroy() { super.onDestroy(); diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java index 6c8a770fd2..025e77d83e 100644 --- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java +++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java @@ -17,15 +17,12 @@ /* * Changes from Qualcomm Innovation Center are provided under the following license: * - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022, 2024 Qualcomm Innovation Center, Inc. All rights reserved. * SPDX-License-Identifier: BSD-3-Clause-Clear */ package com.android.settings.network.telephony.gsm; -import static androidx.lifecycle.Lifecycle.Event.ON_START; -import static androidx.lifecycle.Lifecycle.Event.ON_STOP; - import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME; import android.app.ProgressDialog; @@ -44,10 +41,11 @@ import android.telephony.TelephonyCallback; import android.telephony.TelephonyManager; import android.util.Log; +import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; +import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.Lifecycle; -import androidx.lifecycle.LifecycleObserver; -import androidx.lifecycle.OnLifecycleEvent; +import androidx.lifecycle.LifecycleOwner; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; @@ -82,7 +80,7 @@ import com.qti.extphone.Token; * Preference controller for "Auto Select Network" */ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceController - implements LifecycleObserver, + implements DefaultLifecycleObserver, Enhanced4gBasePreferenceController.On4gLteUpdateListener, SubscriptionsChangeListener.SubscriptionsChangeListenerClient, SelectNetworkPreferenceController.OnNetworkScanTypeListener { @@ -149,22 +147,31 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon } } - @OnLifecycleEvent(ON_START) - public void onStart() { + @Override + public void onStart(@NonNull LifecycleOwner lifecycleOwner) { mAllowedNetworkTypesListener.register(mContext, mSubId); mSubscriptionsListener.start(); mTelephonyManager.registerTelephonyCallback(new HandlerExecutor(mUiHandler), mTelephonyCallbackListener); } - @OnLifecycleEvent(ON_STOP) - public void onStop() { + @Override + public void onStop(@NonNull LifecycleOwner lifecycleOwner) { mAllowedNetworkTypesListener.unregister(mContext, mSubId); mSubscriptionsListener.stop(); mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallbackListener); } @Override + public void onDestroy(@NonNull LifecycleOwner lifecycleOwner) { + Log.d(TAG, "onDestroy"); + if (mServiceConnected) { + mExtTelephonyManager.unregisterCallback(mExtPhoneCallbackListener); + mExtTelephonyManager.disconnectService(); + } + } + + @Override public int getAvailabilityStatus(int subId) { return MobileNetworkUtils.shouldDisplayNetworkSelectOptions(mContext, subId) ? AVAILABLE @@ -361,6 +368,7 @@ public class AutoSelectPreferenceController extends TelephonyTogglePreferenceCon if (mServiceConnected) { mServiceConnected = false; mClient = null; + mExtTelephonyManager.unregisterCallback(mExtPhoneCallbackListener); } } }; diff --git a/src/com/android/settings/wifi/AddNetworkFragment.java b/src/com/android/settings/wifi/AddNetworkFragment.java index 9fd8626f3b..f5bf5eec9d 100644 --- a/src/com/android/settings/wifi/AddNetworkFragment.java +++ b/src/com/android/settings/wifi/AddNetworkFragment.java @@ -16,12 +16,17 @@ package com.android.settings.wifi; +import static android.os.UserManager.DISALLOW_ADD_WIFI_CONFIG; + import android.app.Activity; import android.app.settings.SettingsEnums; +import android.content.Context; import android.content.Intent; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.os.Bundle; +import android.os.UserManager; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -43,6 +48,7 @@ import com.android.settings.wifi.dpp.WifiDppUtils; */ public class AddNetworkFragment extends InstrumentedFragment implements WifiConfigUiBase2, View.OnClickListener { + private static final String TAG = "AddNetworkFragment"; public static final String WIFI_CONFIG_KEY = "wifi_config_key"; @VisibleForTesting @@ -62,6 +68,10 @@ public class AddNetworkFragment extends InstrumentedFragment implements WifiConf @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (!isAddWifiConfigAllowed(getContext())) { + getActivity().finish(); + return; + } } @Override @@ -237,4 +247,14 @@ public class AddNetworkFragment extends InstrumentedFragment implements WifiConf activity.setResult(Activity.RESULT_CANCELED); activity.finish(); } + + @VisibleForTesting + static boolean isAddWifiConfigAllowed(Context context) { + UserManager userManager = context.getSystemService(UserManager.class); + if (userManager != null && userManager.hasUserRestriction(DISALLOW_ADD_WIFI_CONFIG)) { + Log.e(TAG, "The user is not allowed to add Wi-Fi configuration."); + return false; + } + return true; + } } diff --git a/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java b/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java index e6f0b31f38..a7527d7332 100644 --- a/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java +++ b/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java @@ -16,6 +16,8 @@ package com.android.settings.wifi.dpp; +import static android.os.UserManager.DISALLOW_ADD_WIFI_CONFIG; + import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; @@ -99,6 +101,10 @@ public class WifiDppConfiguratorActivity extends WifiDppBaseActivity implements @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (!isAddWifiConfigAllowed(getApplicationContext())) { + finish(); + return; + } if (savedInstanceState != null) { String qrCode = savedInstanceState.getString(KEY_QR_CODE); @@ -119,6 +125,10 @@ public class WifiDppConfiguratorActivity extends WifiDppBaseActivity implements @Override protected void handleIntent(Intent intent) { + if (!isAddWifiConfigAllowed(getApplicationContext())) { + finish(); + return; + } if (isGuestUser(getApplicationContext())) { Log.e(TAG, "Guest user is not allowed to configure Wi-Fi!"); EventLog.writeEvent(0x534e4554, "224772890", -1 /* UID */, "User is a guest"); @@ -402,4 +412,14 @@ public class WifiDppConfiguratorActivity extends WifiDppBaseActivity implements if (userManager == null) return false; return userManager.isGuestUser(); } + + @VisibleForTesting + static boolean isAddWifiConfigAllowed(Context context) { + UserManager userManager = context.getSystemService(UserManager.class); + if (userManager != null && userManager.hasUserRestriction(DISALLOW_ADD_WIFI_CONFIG)) { + Log.e(TAG, "The user is not allowed to add Wi-Fi configuration."); + return false; + } + return true; + } } diff --git a/tests/unit/src/com/android/settings/wifi/AddNetworkFragmentTest.java b/tests/unit/src/com/android/settings/wifi/AddNetworkFragmentTest.java new file mode 100644 index 0000000000..22d43c9bb4 --- /dev/null +++ b/tests/unit/src/com/android/settings/wifi/AddNetworkFragmentTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.wifi; + +import static android.os.UserManager.DISALLOW_ADD_WIFI_CONFIG; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.os.UserManager; + +import androidx.test.annotation.UiThreadTest; +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +@RunWith(AndroidJUnit4.class) +@UiThreadTest +public class AddNetworkFragmentTest { + + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Spy + private final Context mContext = ApplicationProvider.getApplicationContext(); + @Mock + private UserManager mUserManager; + + private AddNetworkFragment mFragment; + + @Before + public void setUp() { + when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); + + mFragment = new AddNetworkFragment(); + } + + @Test + public void isAddWifiConfigAllowed_hasNoUserRestriction_returnTrue() { + when(mUserManager.hasUserRestriction(DISALLOW_ADD_WIFI_CONFIG)).thenReturn(false); + + assertThat(mFragment.isAddWifiConfigAllowed(mContext)).isTrue(); + } + + @Test + public void isAddWifiConfigAllowed_hasUserRestriction_returnFalse() { + when(mUserManager.hasUserRestriction(DISALLOW_ADD_WIFI_CONFIG)).thenReturn(true); + + assertThat(mFragment.isAddWifiConfigAllowed(mContext)).isFalse(); + } +} diff --git a/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java b/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java new file mode 100644 index 0000000000..4d723dc184 --- /dev/null +++ b/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.wifi.dpp; + +import static android.os.UserManager.DISALLOW_ADD_WIFI_CONFIG; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.os.UserManager; + +import androidx.test.annotation.UiThreadTest; +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +@RunWith(AndroidJUnit4.class) +@UiThreadTest +public class WifiDppConfiguratorActivityTest { + + @Rule + public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Spy + private final Context mContext = ApplicationProvider.getApplicationContext(); + @Mock + private UserManager mUserManager; + + private WifiDppConfiguratorActivity mActivity; + + @Before + public void setUp() { + when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); + + mActivity = new WifiDppConfiguratorActivity(); + } + + @Test + public void isAddWifiConfigAllowed_hasNoUserRestriction_returnTrue() { + when(mUserManager.hasUserRestriction(DISALLOW_ADD_WIFI_CONFIG)).thenReturn(false); + + assertThat(mActivity.isAddWifiConfigAllowed(mContext)).isTrue(); + } + + @Test + public void isAddWifiConfigAllowed_hasUserRestriction_returnFalse() { + when(mUserManager.hasUserRestriction(DISALLOW_ADD_WIFI_CONFIG)).thenReturn(true); + + assertThat(mActivity.isAddWifiConfigAllowed(mContext)).isFalse(); + } +} |