[Settings] Code refactor
Create PreferenceController for each of the Preference presented on screen, which allows SettingsFragment better control the behavior of Preference. Bug: 260540995 Test: auto and local test Change-Id: Iadd9c10fb353d6304d61e65687a505c71a53179a
This commit is contained in:
@@ -103,7 +103,17 @@ public class MyDeviceInfoFragment extends DashboardFragment
|
||||
private static List<AbstractPreferenceController> buildPreferenceControllers(
|
||||
Context context, MyDeviceInfoFragment fragment, Lifecycle lifecycle) {
|
||||
final List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||
controllers.add(new SimStatusPreferenceController(context, fragment));
|
||||
|
||||
SimStatusPreferenceController defaultRecord =
|
||||
new SimStatusPreferenceController(context, fragment);
|
||||
|
||||
for (int slotIndex = 0; slotIndex < defaultRecord.getSimSlotSize(); slotIndex ++) {
|
||||
SimStatusPreferenceController slotRecord =
|
||||
new SimStatusPreferenceController(context, fragment);
|
||||
slotRecord.setSimSlotStatus(slotIndex);
|
||||
controllers.add(slotRecord);
|
||||
}
|
||||
|
||||
controllers.add(new IpAddressPreferenceController(context, lifecycle));
|
||||
controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
|
||||
controllers.add(new BluetoothAddressPreferenceController(context, lifecycle));
|
||||
|
@@ -46,6 +46,8 @@ public class SimStatusPreferenceController extends
|
||||
private final Fragment mFragment;
|
||||
private final List<Preference> mPreferenceList = new ArrayList<>();
|
||||
|
||||
private int mSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
|
||||
|
||||
public SimStatusPreferenceController(Context context, Fragment fragment) {
|
||||
super(context);
|
||||
|
||||
@@ -57,9 +59,36 @@ public class SimStatusPreferenceController extends
|
||||
|
||||
@Override
|
||||
public String getPreferenceKey() {
|
||||
if (mSlotIndex != SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
|
||||
return KEY_SIM_STATUS + mSlotIndex;
|
||||
}
|
||||
return KEY_SIM_STATUS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the index of slot for this subscription.
|
||||
* @param slotIndex index of slot
|
||||
*/
|
||||
public void setSimSlotStatus(int slotIndex) {
|
||||
mSlotIndex = slotIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get number of subscription slots.
|
||||
* @return number of slots
|
||||
*/
|
||||
public int getSimSlotSize() {
|
||||
return isAvailable() ? mTelephonyManager.getPhoneCount() : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the index of slot for this subscription.
|
||||
* @return index of slot
|
||||
*/
|
||||
public int getSimSlotIndex() {
|
||||
return mSlotIndex;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return SubscriptionUtil.isSimHardwareVisible(mContext) &&
|
||||
@@ -72,22 +101,23 @@ public class SimStatusPreferenceController extends
|
||||
if (!SubscriptionUtil.isSimHardwareVisible(mContext)) {
|
||||
return;
|
||||
}
|
||||
final Preference preference = screen.findPreference(getPreferenceKey());
|
||||
final Preference preference = screen.findPreference(KEY_SIM_STATUS);
|
||||
if (!isAvailable() || preference == null || !preference.isVisible()) {
|
||||
return;
|
||||
}
|
||||
final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY);
|
||||
|
||||
mPreferenceList.add(preference);
|
||||
|
||||
final int simStatusOrder = preference.getOrder();
|
||||
screen.removePreference(preference);
|
||||
preference.setVisible(false);
|
||||
|
||||
// Add additional preferences for each sim in the device
|
||||
for (int simSlotNumber = 1; simSlotNumber < mTelephonyManager.getPhoneCount();
|
||||
for (int simSlotNumber = 0; simSlotNumber < mTelephonyManager.getPhoneCount();
|
||||
simSlotNumber++) {
|
||||
final Preference multiSimPreference = createNewPreference(screen.getContext());
|
||||
multiSimPreference.setCopyingEnabled(true);
|
||||
multiSimPreference.setOrder(simStatusOrder + simSlotNumber);
|
||||
multiSimPreference.setKey(KEY_SIM_STATUS + simSlotNumber);
|
||||
multiSimPreference.setOrder(simStatusOrder + simSlotNumber + 1);
|
||||
multiSimPreference.setKey(KEY_SIM_STATUS + simSlotNumber + 1);
|
||||
category.addPreference(multiSimPreference);
|
||||
mPreferenceList.add(multiSimPreference);
|
||||
}
|
||||
|
@@ -24,8 +24,8 @@ import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.UserManager;
|
||||
import android.content.res.Resources;
|
||||
import android.os.UserManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
@@ -36,6 +36,9 @@ import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
@@ -44,7 +47,6 @@ import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class SimStatusPreferenceControllerTest {
|
||||
@@ -52,6 +54,8 @@ public class SimStatusPreferenceControllerTest {
|
||||
@Mock
|
||||
private Preference mPreference;
|
||||
@Mock
|
||||
private Preference mFirstSimPreference;
|
||||
@Mock
|
||||
private Preference mSecondSimPreference;
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
@@ -77,18 +81,31 @@ public class SimStatusPreferenceControllerTest {
|
||||
when(mContext.getResources()).thenReturn(mResources);
|
||||
when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);
|
||||
|
||||
doReturn(mTelephonyManager).when(mContext)
|
||||
.getSystemService(Context.TELEPHONY_SERVICE);
|
||||
|
||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||
mController = spy(new SimStatusPreferenceController(mContext, mFragment));
|
||||
final List<Preference> preferencePool = new ArrayList<Preference>();
|
||||
preferencePool.add(mFirstSimPreference);
|
||||
preferencePool.add(mSecondSimPreference);
|
||||
|
||||
mController = spy(new SimStatusPreferenceController(mContext, mFragment) {
|
||||
@Override
|
||||
public Preference createNewPreference(Context context) {
|
||||
return preferencePool.remove(0);
|
||||
}
|
||||
});
|
||||
doReturn(true).when(mController).isAvailable();
|
||||
when(mScreen.getContext()).thenReturn(mContext);
|
||||
final String categoryKey = "device_detail_category";
|
||||
when(mScreen.findPreference(categoryKey)).thenReturn(mCategory);
|
||||
doReturn(mSecondSimPreference).when(mController).createNewPreference(mContext);
|
||||
ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
final String baseEntryKey = "sim_status";
|
||||
when(mScreen.findPreference(baseEntryKey)).thenReturn(mPreference);
|
||||
final String prefKey = mController.getPreferenceKey();
|
||||
when(mPreference.getKey()).thenReturn(prefKey);
|
||||
when(mPreference.isVisible()).thenReturn(true);
|
||||
|
||||
mController.setSimSlotStatus(-1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -107,8 +124,8 @@ public class SimStatusPreferenceControllerTest {
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
verify(mPreference).setTitle(mContext.getString(R.string.sim_status_title));
|
||||
verify(mPreference).setSummary(anyString());
|
||||
verify(mFirstSimPreference).setTitle(mContext.getString(R.string.sim_status_title));
|
||||
verify(mFirstSimPreference).setSummary(anyString());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -118,11 +135,11 @@ public class SimStatusPreferenceControllerTest {
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
verify(mPreference).setTitle(
|
||||
verify(mFirstSimPreference).setTitle(
|
||||
mContext.getString(R.string.sim_status_title_sim_slot, 1 /* sim slot */));
|
||||
verify(mSecondSimPreference).setTitle(
|
||||
mContext.getString(R.string.sim_status_title_sim_slot, 2 /* sim slot */));
|
||||
verify(mPreference).setSummary(anyString());
|
||||
verify(mFirstSimPreference).setSummary(anyString());
|
||||
verify(mSecondSimPreference).setSummary(anyString());
|
||||
}
|
||||
|
||||
@@ -130,9 +147,10 @@ public class SimStatusPreferenceControllerTest {
|
||||
public void handlePreferenceTreeClick_shouldStartDialogFragment() {
|
||||
when(mFragment.getChildFragmentManager()).thenReturn(
|
||||
mock(FragmentManager.class, Answers.RETURNS_DEEP_STUBS));
|
||||
when(mTelephonyManager.getPhoneCount()).thenReturn(2);
|
||||
mController.displayPreference(mScreen);
|
||||
|
||||
mController.handlePreferenceTreeClick(mPreference);
|
||||
mController.handlePreferenceTreeClick(mFirstSimPreference);
|
||||
|
||||
verify(mFragment).getChildFragmentManager();
|
||||
}
|
||||
|
Reference in New Issue
Block a user