Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb735f29 authored by Stanley Wang's avatar Stanley Wang Committed by Android (Google) Code Review
Browse files

Merge "Implement the Copyable interface to ImeiInfoPreferenceController"

parents 43bb34e1 76ab6e9a
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -102,8 +102,7 @@
        settings:keywords="@string/keywords_model_and_hardware"
        settings:keywords="@string/keywords_model_and_hardware"
        android:summary="@string/summary_placeholder"
        android:summary="@string/summary_placeholder"
        settings:allowDynamicSummaryInSlice="true"
        settings:allowDynamicSummaryInSlice="true"
        settings:controller=
        settings:controller="com.android.settings.deviceinfo.DeviceModelPreferenceController"/>
            "com.android.settings.deviceinfo.DeviceModelPreferenceController"/>


    <!-- IMEI -->
    <!-- IMEI -->
    <Preference
    <Preference
@@ -111,7 +110,8 @@
        android:order="22"
        android:order="22"
        android:title="@string/status_imei"
        android:title="@string/status_imei"
        settings:keywords="@string/keywords_imei_info"
        settings:keywords="@string/keywords_imei_info"
        android:summary="@string/summary_placeholder"/>
        android:summary="@string/summary_placeholder"
        settings:controller="com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController"/>


    <!-- Android version -->
    <!-- Android version -->
    <Preference
    <Preference
+3 −3
Original line number Original line Diff line number Diff line
@@ -81,6 +81,7 @@ public class MyDeviceInfoFragment extends DashboardFragment
        super.onAttach(context);
        super.onAttach(context);
        use(FirmwareVersionPreferenceController.class).setHost(this /* parent */);
        use(FirmwareVersionPreferenceController.class).setHost(this /* parent */);
        use(DeviceModelPreferenceController.class).setHost(this /* parent */);
        use(DeviceModelPreferenceController.class).setHost(this /* parent */);
        use(ImeiInfoPreferenceController.class).setHost(this /* parent */);
        mBuildNumberPreferenceController = use(BuildNumberPreferenceController.class);
        mBuildNumberPreferenceController = use(BuildNumberPreferenceController.class);
        mBuildNumberPreferenceController.setHost(this /* parent */);
        mBuildNumberPreferenceController.setHost(this /* parent */);
    }
    }
@@ -121,7 +122,6 @@ public class MyDeviceInfoFragment extends DashboardFragment
        }
        }
        controllers.add(deviceNamePreferenceController);
        controllers.add(deviceNamePreferenceController);
        controllers.add(new SimStatusPreferenceController(context, fragment));
        controllers.add(new SimStatusPreferenceController(context, fragment));
        controllers.add(new ImeiInfoPreferenceController(context, fragment));
        controllers.add(new IpAddressPreferenceController(context, lifecycle));
        controllers.add(new IpAddressPreferenceController(context, lifecycle));
        controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
        controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
        controllers.add(new BluetoothAddressPreferenceController(context, lifecycle));
        controllers.add(new BluetoothAddressPreferenceController(context, lifecycle));
+35 −19
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settings.deviceinfo.imei;
import static android.telephony.TelephonyManager.PHONE_TYPE_CDMA;
import static android.telephony.TelephonyManager.PHONE_TYPE_CDMA;


import android.content.Context;
import android.content.Context;
import android.os.UserManager;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;


import androidx.annotation.VisibleForTesting;
import androidx.annotation.VisibleForTesting;
@@ -27,8 +28,9 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.preference.PreferenceScreen;


import com.android.settings.R;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController;
import com.android.settings.slices.Copyable;
import com.android.settingslib.Utils;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
@@ -36,39 +38,30 @@ import java.util.List;
/**
/**
 * Controller that manages preference for single and multi sim devices.
 * Controller that manages preference for single and multi sim devices.
 */
 */
public class ImeiInfoPreferenceController extends
public class ImeiInfoPreferenceController extends BasePreferenceController implements Copyable {
        AbstractSimStatusImeiInfoPreferenceController implements PreferenceControllerMixin {

    private static final String KEY_IMEI_INFO = "imei_info";


    private final boolean mIsMultiSim;
    private final boolean mIsMultiSim;
    private final TelephonyManager mTelephonyManager;
    private final TelephonyManager mTelephonyManager;
    private final List<Preference> mPreferenceList = new ArrayList<>();
    private final List<Preference> mPreferenceList = new ArrayList<>();
    private final Fragment mFragment;
    private Fragment mFragment;

    public ImeiInfoPreferenceController(Context context, Fragment fragment) {
        super(context);


        mFragment = fragment;
    public ImeiInfoPreferenceController(Context context, String key) {
        super(context, key);
        mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        mIsMultiSim = mTelephonyManager.getPhoneCount() > 1;
        mIsMultiSim = mTelephonyManager.getPhoneCount() > 1;
    }
    }


    @Override
    public void setHost(Fragment fragment) {
    public String getPreferenceKey() {
        mFragment = fragment;
        return KEY_IMEI_INFO;
    }
    }


    @Override
    @Override
    public void displayPreference(PreferenceScreen screen) {
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        super.displayPreference(screen);
        final Preference preference = screen.findPreference(getPreferenceKey());
        final Preference preference = screen.findPreference(getPreferenceKey());
        if (!isAvailable() || preference == null || !preference.isVisible()) {
            return;
        }


        mPreferenceList.add(preference);
        mPreferenceList.add(preference);
        updatePreference(preference, 0 /* sim slot */);
        updatePreference(preference, 0 /* simSlot */);


        final int imeiPreferenceOrder = preference.getOrder();
        final int imeiPreferenceOrder = preference.getOrder();
        // Add additional preferences for each sim in the device
        // Add additional preferences for each sim in the device
@@ -76,13 +69,20 @@ public class ImeiInfoPreferenceController extends
                simSlotNumber++) {
                simSlotNumber++) {
            final Preference multiSimPreference = createNewPreference(screen.getContext());
            final Preference multiSimPreference = createNewPreference(screen.getContext());
            multiSimPreference.setOrder(imeiPreferenceOrder + simSlotNumber);
            multiSimPreference.setOrder(imeiPreferenceOrder + simSlotNumber);
            multiSimPreference.setKey(KEY_IMEI_INFO + simSlotNumber);
            multiSimPreference.setKey(getPreferenceKey() + simSlotNumber);
            screen.addPreference(multiSimPreference);
            screen.addPreference(multiSimPreference);
            mPreferenceList.add(multiSimPreference);
            mPreferenceList.add(multiSimPreference);
            updatePreference(multiSimPreference, simSlotNumber);
            updatePreference(multiSimPreference, simSlotNumber);
        }
        }
    }
    }


    @Override
    public CharSequence getSummary() {
        final int phoneType = mTelephonyManager.getPhoneType();
        return phoneType == PHONE_TYPE_CDMA ? mTelephonyManager.getMeid()
                : mTelephonyManager.getImei();
    }

    @Override
    @Override
    public boolean handlePreferenceTreeClick(Preference preference) {
    public boolean handlePreferenceTreeClick(Preference preference) {
        final int simSlot = mPreferenceList.indexOf(preference);
        final int simSlot = mPreferenceList.indexOf(preference);
@@ -94,6 +94,22 @@ public class ImeiInfoPreferenceController extends
        return true;
        return true;
    }
    }


    @Override
    public int getAvailabilityStatus() {
        return mContext.getSystemService(UserManager.class).isAdminUser()
                && !Utils.isWifiOnly(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
    }

    @Override
    public boolean isSliceable() {
        return true;
    }

    @Override
    public void copy() {
        Copyable.setCopyContent(mContext, getSummary(), mContext.getText(R.string.status_imei));
    }

    private void updatePreference(Preference preference, int simSlot) {
    private void updatePreference(Preference preference, int simSlot) {
        final int phoneType = mTelephonyManager.getPhoneType();
        final int phoneType = mTelephonyManager.getPhoneType();
        if (phoneType == PHONE_TYPE_CDMA) {
        if (phoneType == PHONE_TYPE_CDMA) {
+25 −3
Original line number Original line Diff line number Diff line
@@ -16,9 +16,14 @@


package com.android.settings.deviceinfo.imei;
package com.android.settings.deviceinfo.imei;


import static android.content.Context.CLIPBOARD_SERVICE;
import static android.telephony.TelephonyManager.PHONE_TYPE_CDMA;
import static android.telephony.TelephonyManager.PHONE_TYPE_CDMA;
import static android.telephony.TelephonyManager.PHONE_TYPE_GSM;
import static android.telephony.TelephonyManager.PHONE_TYPE_GSM;


import static com.android.settings.core.BasePreferenceController.AVAILABLE;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;
@@ -26,6 +31,7 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.content.ClipboardManager;
import android.content.Context;
import android.content.Context;
import android.os.UserManager;
import android.os.UserManager;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
@@ -71,8 +77,9 @@ public class ImeiInfoPreferenceControllerTest {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        mContext = spy(RuntimeEnvironment.application);
        mContext = spy(RuntimeEnvironment.application);
        doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
        doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
        mController = spy(new ImeiInfoPreferenceController(mContext, mFragment));
        mController = spy(new ImeiInfoPreferenceController(mContext, "imei_info"));
        doReturn(true).when(mController).isAvailable();
        mController.setHost(mFragment);
        doReturn(AVAILABLE).when(mController).getAvailabilityStatus();
        when(mScreen.getContext()).thenReturn(mContext);
        when(mScreen.getContext()).thenReturn(mContext);
        doReturn(mSecondSimPreference).when(mController).createNewPreference(mContext);
        doReturn(mSecondSimPreference).when(mController).createNewPreference(mContext);
        ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
        ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
@@ -164,4 +171,19 @@ public class ImeiInfoPreferenceControllerTest {


        verify(mFragment).getChildFragmentManager();
        verify(mFragment).getChildFragmentManager();
    }
    }

    @Test
    public void copy_shouldCopyImeiToClipboard() {
        ReflectionHelpers.setField(mController, "mIsMultiSim", false);
        final String meid = "125132215123";
        when(mTelephonyManager.getPhoneType()).thenReturn(PHONE_TYPE_CDMA);
        when(mTelephonyManager.getMeid()).thenReturn(meid);

        mController.copy();

        final ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(
                CLIPBOARD_SERVICE);
        final CharSequence data = clipboard.getPrimaryClip().getItemAt(0).getText();
        assertThat(data.toString()).isEqualTo(meid);
    }
}
}