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 Diff line number Diff line
@@ -102,8 +102,7 @@
        settings:keywords="@string/keywords_model_and_hardware"
        android:summary="@string/summary_placeholder"
        settings:allowDynamicSummaryInSlice="true"
        settings:controller=
            "com.android.settings.deviceinfo.DeviceModelPreferenceController"/>
        settings:controller="com.android.settings.deviceinfo.DeviceModelPreferenceController"/>

    <!-- IMEI -->
    <Preference
@@ -111,7 +110,8 @@
        android:order="22"
        android:title="@string/status_imei"
        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 -->
    <Preference
+3 −3
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ public class MyDeviceInfoFragment extends DashboardFragment
        super.onAttach(context);
        use(FirmwareVersionPreferenceController.class).setHost(this /* parent */);
        use(DeviceModelPreferenceController.class).setHost(this /* parent */);
        use(ImeiInfoPreferenceController.class).setHost(this /* parent */);
        mBuildNumberPreferenceController = use(BuildNumberPreferenceController.class);
        mBuildNumberPreferenceController.setHost(this /* parent */);
    }
@@ -121,7 +122,6 @@ public class MyDeviceInfoFragment extends DashboardFragment
        }
        controllers.add(deviceNamePreferenceController);
        controllers.add(new SimStatusPreferenceController(context, fragment));
        controllers.add(new ImeiInfoPreferenceController(context, fragment));
        controllers.add(new IpAddressPreferenceController(context, lifecycle));
        controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
        controllers.add(new BluetoothAddressPreferenceController(context, lifecycle));
+35 −19
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settings.deviceinfo.imei;
import static android.telephony.TelephonyManager.PHONE_TYPE_CDMA;

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

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

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

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

    private static final String KEY_IMEI_INFO = "imei_info";
public class ImeiInfoPreferenceController extends BasePreferenceController implements Copyable {

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

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

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

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

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

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

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

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

    @Override
    public boolean handlePreferenceTreeClick(Preference preference) {
        final int simSlot = mPreferenceList.indexOf(preference);
@@ -94,6 +94,22 @@ public class ImeiInfoPreferenceController extends
        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) {
        final int phoneType = mTelephonyManager.getPhoneType();
        if (phoneType == PHONE_TYPE_CDMA) {
+25 −3
Original line number Diff line number Diff line
@@ -16,9 +16,14 @@

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_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.Mockito.doReturn;
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.when;

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

        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);
    }
}