Merge "Dismiss the open dialog if preference is disabled" into main
This commit is contained in:
@@ -29,9 +29,12 @@ import android.telephony.TelephonyManager;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
import androidx.lifecycle.LifecycleObserver;
|
import androidx.lifecycle.LifecycleObserver;
|
||||||
import androidx.lifecycle.OnLifecycleEvent;
|
import androidx.lifecycle.OnLifecycleEvent;
|
||||||
import androidx.preference.ListPreference;
|
import androidx.preference.ListPreference;
|
||||||
|
import androidx.preference.ListPreferenceDialogFragmentCompat;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
@@ -67,6 +70,7 @@ public class EnabledNetworkModePreferenceController extends
|
|||||||
private SubscriptionsChangeListener mSubscriptionsListener;
|
private SubscriptionsChangeListener mSubscriptionsListener;
|
||||||
private int mCallState = TelephonyManager.CALL_STATE_IDLE;
|
private int mCallState = TelephonyManager.CALL_STATE_IDLE;
|
||||||
private PhoneCallStateTelephonyCallback mTelephonyCallback;
|
private PhoneCallStateTelephonyCallback mTelephonyCallback;
|
||||||
|
private FragmentManager mFragmentManager;
|
||||||
|
|
||||||
public EnabledNetworkModePreferenceController(Context context, String key) {
|
public EnabledNetworkModePreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
@@ -151,7 +155,16 @@ public class EnabledNetworkModePreferenceController extends
|
|||||||
listPreference.setEntryValues(mBuilder.getEntryValues());
|
listPreference.setEntryValues(mBuilder.getEntryValues());
|
||||||
listPreference.setValue(Integer.toString(mBuilder.getSelectedEntryValue()));
|
listPreference.setValue(Integer.toString(mBuilder.getSelectedEntryValue()));
|
||||||
listPreference.setSummary(mBuilder.getSummary());
|
listPreference.setSummary(mBuilder.getSummary());
|
||||||
listPreference.setEnabled(isCallStateIdle());
|
boolean listPreferenceEnabled = isCallStateIdle();
|
||||||
|
listPreference.setEnabled(listPreferenceEnabled);
|
||||||
|
if (!listPreferenceEnabled) {
|
||||||
|
// If dialog is already opened when ListPreference disabled, dismiss them.
|
||||||
|
for (Fragment fragment : mFragmentManager.getFragments()) {
|
||||||
|
if (fragment instanceof ListPreferenceDialogFragmentCompat) {
|
||||||
|
((ListPreferenceDialogFragmentCompat) fragment).dismiss();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -169,8 +182,9 @@ public class EnabledNetworkModePreferenceController extends
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void init(int subId) {
|
void init(int subId, FragmentManager fragmentManager) {
|
||||||
mSubId = subId;
|
mSubId = subId;
|
||||||
|
mFragmentManager = fragmentManager;
|
||||||
mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
|
mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
|
||||||
.createForSubscriptionId(mSubId);
|
.createForSubscriptionId(mSubId);
|
||||||
mBuilder = new PreferenceEntriesBuilder(mContext, mSubId);
|
mBuilder = new PreferenceEntriesBuilder(mContext, mSubId);
|
||||||
|
@@ -260,7 +260,7 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings impleme
|
|||||||
use(CarrierPreferenceController.class).init(mSubId);
|
use(CarrierPreferenceController.class).init(mSubId);
|
||||||
use(DataUsagePreferenceController.class).init(mSubId);
|
use(DataUsagePreferenceController.class).init(mSubId);
|
||||||
use(PreferredNetworkModePreferenceController.class).init(mSubId);
|
use(PreferredNetworkModePreferenceController.class).init(mSubId);
|
||||||
use(EnabledNetworkModePreferenceController.class).init(mSubId);
|
use(EnabledNetworkModePreferenceController.class).init(mSubId, getParentFragmentManager());
|
||||||
use(DataServiceSetupPreferenceController.class).init(mSubId);
|
use(DataServiceSetupPreferenceController.class).init(mSubId);
|
||||||
use(Enable2gPreferenceController.class).init(mSubId);
|
use(Enable2gPreferenceController.class).init(mSubId);
|
||||||
use(CarrierWifiTogglePreferenceController.class).init(getLifecycle(), mSubId);
|
use(CarrierWifiTogglePreferenceController.class).init(getLifecycle(), mSubId);
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2021 The Android Open Source Project
|
* Copyright (C) 2023 The Android Open Source Project
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -46,6 +46,7 @@ import android.telephony.ServiceState;
|
|||||||
import android.telephony.SubscriptionManager;
|
import android.telephony.SubscriptionManager;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
|
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
import androidx.lifecycle.LifecycleOwner;
|
import androidx.lifecycle.LifecycleOwner;
|
||||||
import androidx.preference.ListPreference;
|
import androidx.preference.ListPreference;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
@@ -64,6 +65,8 @@ import org.junit.runner.RunWith;
|
|||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
public class EnabledNetworkModePreferenceControllerTest {
|
public class EnabledNetworkModePreferenceControllerTest {
|
||||||
private static final int SUB_ID = 2;
|
private static final int SUB_ID = 2;
|
||||||
@@ -80,6 +83,8 @@ public class EnabledNetworkModePreferenceControllerTest {
|
|||||||
private CarrierConfigCache mCarrierConfigCache;
|
private CarrierConfigCache mCarrierConfigCache;
|
||||||
@Mock
|
@Mock
|
||||||
private ServiceState mServiceState;
|
private ServiceState mServiceState;
|
||||||
|
@Mock
|
||||||
|
private FragmentManager mFragmentManager;
|
||||||
|
|
||||||
private PersistableBundle mPersistableBundle;
|
private PersistableBundle mPersistableBundle;
|
||||||
private EnabledNetworkModePreferenceController mController;
|
private EnabledNetworkModePreferenceController mController;
|
||||||
@@ -111,7 +116,8 @@ public class EnabledNetworkModePreferenceControllerTest {
|
|||||||
mController = new EnabledNetworkModePreferenceController(mContext, KEY);
|
mController = new EnabledNetworkModePreferenceController(mContext, KEY);
|
||||||
mockAllowedNetworkTypes(ALLOWED_ALL_NETWORK_TYPE);
|
mockAllowedNetworkTypes(ALLOWED_ALL_NETWORK_TYPE);
|
||||||
mockAccessFamily(TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
|
mockAccessFamily(TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||||
mController.init(SUB_ID);
|
when(mFragmentManager.getFragments()).thenReturn(Collections.emptyList());
|
||||||
|
mController.init(SUB_ID, mFragmentManager);
|
||||||
mPreference.setKey(mController.getPreferenceKey());
|
mPreference.setKey(mController.getPreferenceKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,7 +211,7 @@ public class EnabledNetworkModePreferenceControllerTest {
|
|||||||
public void updateState_5gWorldPhone_GlobalHasNr() {
|
public void updateState_5gWorldPhone_GlobalHasNr() {
|
||||||
mockAllowedNetworkTypes(ALLOWED_ALL_NETWORK_TYPE);
|
mockAllowedNetworkTypes(ALLOWED_ALL_NETWORK_TYPE);
|
||||||
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||||
mController.init(SUB_ID);
|
mController.init(SUB_ID, mFragmentManager);
|
||||||
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
|
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
@@ -221,7 +227,7 @@ public class EnabledNetworkModePreferenceControllerTest {
|
|||||||
mockAllowedNetworkTypes(ALLOWED_ALL_NETWORK_TYPE);
|
mockAllowedNetworkTypes(ALLOWED_ALL_NETWORK_TYPE);
|
||||||
mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
||||||
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
||||||
mController.init(SUB_ID);
|
mController.init(SUB_ID, mFragmentManager);
|
||||||
|
|
||||||
// NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA = NR | LTE | RAF_TD_SCDMA | GSM | WCDMA
|
// NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA = NR | LTE | RAF_TD_SCDMA | GSM | WCDMA
|
||||||
when(mTelephonyManager.getAllowedNetworkTypesForReason(
|
when(mTelephonyManager.getAllowedNetworkTypesForReason(
|
||||||
@@ -241,7 +247,7 @@ public class EnabledNetworkModePreferenceControllerTest {
|
|||||||
mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
||||||
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
||||||
mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
|
mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
|
||||||
mController.init(SUB_ID);
|
mController.init(SUB_ID, mFragmentManager);
|
||||||
|
|
||||||
// NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA = NR | LTE | RAF_TD_SCDMA | GSM | WCDMA
|
// NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA = NR | LTE | RAF_TD_SCDMA | GSM | WCDMA
|
||||||
when(mTelephonyManager.getAllowedNetworkTypesForReason(
|
when(mTelephonyManager.getAllowedNetworkTypesForReason(
|
||||||
@@ -261,7 +267,7 @@ public class EnabledNetworkModePreferenceControllerTest {
|
|||||||
mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
||||||
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA);
|
||||||
mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
|
mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
|
||||||
mController.init(SUB_ID);
|
mController.init(SUB_ID, mFragmentManager);
|
||||||
|
|
||||||
// NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA = NR | LTE | RAF_TD_SCDMA | GSM | WCDMA
|
// NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA = NR | LTE | RAF_TD_SCDMA | GSM | WCDMA
|
||||||
when(mTelephonyManager.getAllowedNetworkTypesForReason(
|
when(mTelephonyManager.getAllowedNetworkTypesForReason(
|
||||||
@@ -281,7 +287,7 @@ public class EnabledNetworkModePreferenceControllerTest {
|
|||||||
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||||
mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
|
mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
|
||||||
|
|
||||||
mController.init(SUB_ID);
|
mController.init(SUB_ID, mFragmentManager);
|
||||||
|
|
||||||
// NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA = LTE | CDMA | EVDO | GSM | WCDMA
|
// NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA = LTE | CDMA | EVDO | GSM | WCDMA
|
||||||
when(mTelephonyManager.getAllowedNetworkTypesForReason(
|
when(mTelephonyManager.getAllowedNetworkTypesForReason(
|
||||||
@@ -304,7 +310,7 @@ public class EnabledNetworkModePreferenceControllerTest {
|
|||||||
public void updateState_GlobalDisAllowed5g_GlobalWithoutNR() {
|
public void updateState_GlobalDisAllowed5g_GlobalWithoutNR() {
|
||||||
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||||
mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
|
mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
|
||||||
mController.init(SUB_ID);
|
mController.init(SUB_ID, mFragmentManager);
|
||||||
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
|
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
|
||||||
|
|
||||||
// NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA = NR | LTE | CDMA | EVDO | GSM | WCDMA
|
// NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA = NR | LTE | CDMA | EVDO | GSM | WCDMA
|
||||||
@@ -324,7 +330,7 @@ public class EnabledNetworkModePreferenceControllerTest {
|
|||||||
public void updateState_GlobalDisAllowed5g_SelectOnGlobal() {
|
public void updateState_GlobalDisAllowed5g_SelectOnGlobal() {
|
||||||
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
mockAccessFamily(TelephonyManager.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA);
|
||||||
mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
|
mockAllowedNetworkTypes(DISABLED_5G_NETWORK_TYPE);
|
||||||
mController.init(SUB_ID);
|
mController.init(SUB_ID, mFragmentManager);
|
||||||
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
|
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_WORLD_MODE_ENABLED_BOOL, true);
|
||||||
|
|
||||||
// NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA = NR | LTE | CDMA | EVDO | GSM | WCDMA
|
// NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA = NR | LTE | CDMA | EVDO | GSM | WCDMA
|
||||||
@@ -497,7 +503,7 @@ public class EnabledNetworkModePreferenceControllerTest {
|
|||||||
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL, true);
|
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL, true);
|
||||||
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL, true);
|
mPersistableBundle.putBoolean(CarrierConfigManager.KEY_LTE_ENABLED_BOOL, true);
|
||||||
}
|
}
|
||||||
mController.init(SUB_ID);
|
mController.init(SUB_ID, mFragmentManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void mockAllowedNetworkTypes(long allowedNetworkType) {
|
private void mockAllowedNetworkTypes(long allowedNetworkType) {
|
Reference in New Issue
Block a user