Snap for 7562406 from c5e5dcff7a to sc-v2-release
Change-Id: I0370d9b4bf41fe5ca95b010fbdf549ef560de5b9
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -58,8 +58,8 @@
|
||||
<!-- Manufacturer backup settings label -->
|
||||
<string name="config_backup_settings_label" translatable="true"></string>
|
||||
|
||||
<!-- Double twist sensor name and vendor used by gesture setting -->
|
||||
<string name="gesture_double_twist_sensor_name" translatable="false"></string>
|
||||
<!-- Double twist sensor type and vendor used by gesture setting -->
|
||||
<string name="gesture_double_twist_sensor_type" translatable="false"></string>
|
||||
<string name="gesture_double_twist_sensor_vendor" translatable="false"></string>
|
||||
|
||||
<!-- When true enable gesture setting. -->
|
||||
|
||||
@@ -5513,7 +5513,7 @@
|
||||
</string>
|
||||
<!-- Title for accessibility preference for configuring feature that performs click action soon after mouse/trackpad pointer stops moving. [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_autoclick_preference_title">Autoclick (dwell timing)</string>
|
||||
<!-- Title for accessibility dwell timing footer. [CHAR LIMIT=35] -->
|
||||
<!-- Title for accessibility dwell timing footer. [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_autoclick_about_title">About autoclick (dwell timing)</string>
|
||||
<!-- Accessibility dwell timing footer link content description [CHAR LIMIT=NONE] -->
|
||||
<string name="accessibility_autoclick_footer_learn_more_content_description">Learn more about autoclick (dwell timing)</string>
|
||||
|
||||
@@ -29,6 +29,8 @@
|
||||
settings:isPreferenceVisible="false"/>
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="basic_info_category"
|
||||
android:selectable="false"
|
||||
android:title="@string/my_device_info_basic_info_category_title">
|
||||
|
||||
<!-- Device name -->
|
||||
@@ -88,6 +90,8 @@
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="device_detail_category"
|
||||
android:selectable="false"
|
||||
android:title="@string/my_device_info_device_details_category_title">
|
||||
|
||||
<!-- SIM status -->
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
@@ -40,7 +41,8 @@ import java.util.List;
|
||||
|
||||
public class PhoneNumberPreferenceController extends BasePreferenceController {
|
||||
|
||||
private final static String KEY_PHONE_NUMBER = "phone_number";
|
||||
private static final String KEY_PHONE_NUMBER = "phone_number";
|
||||
private static final String KEY_PREFERENCE_CATEGORY = "basic_info_category";
|
||||
|
||||
private final TelephonyManager mTelephonyManager;
|
||||
private final SubscriptionManager mSubscriptionManager;
|
||||
@@ -66,6 +68,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
|
||||
public void displayPreference(PreferenceScreen screen) {
|
||||
super.displayPreference(screen);
|
||||
final Preference preference = screen.findPreference(getPreferenceKey());
|
||||
final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY);
|
||||
mPreferenceList.add(preference);
|
||||
|
||||
final int phonePreferenceOrder = preference.getOrder();
|
||||
@@ -76,7 +79,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
|
||||
multiSimPreference.setOrder(phonePreferenceOrder + simSlotNumber);
|
||||
multiSimPreference.setKey(KEY_PHONE_NUMBER + simSlotNumber);
|
||||
multiSimPreference.setSelectable(false);
|
||||
screen.addPreference(multiSimPreference);
|
||||
category.addPreference(multiSimPreference);
|
||||
mPreferenceList.add(multiSimPreference);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.telephony.TelephonyManager;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
@@ -42,6 +43,8 @@ import java.util.List;
|
||||
*/
|
||||
public class ImeiInfoPreferenceController extends BasePreferenceController {
|
||||
|
||||
private static final String KEY_PREFERENCE_CATEGORY = "device_detail_category";
|
||||
|
||||
private final boolean mIsMultiSim;
|
||||
private final TelephonyManager mTelephonyManager;
|
||||
private final List<Preference> mPreferenceList = new ArrayList<>();
|
||||
@@ -61,6 +64,7 @@ public class ImeiInfoPreferenceController extends BasePreferenceController {
|
||||
public void displayPreference(PreferenceScreen screen) {
|
||||
super.displayPreference(screen);
|
||||
final Preference preference = screen.findPreference(getPreferenceKey());
|
||||
final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY);
|
||||
|
||||
mPreferenceList.add(preference);
|
||||
updatePreference(preference, 0 /* simSlot */);
|
||||
@@ -72,7 +76,7 @@ public class ImeiInfoPreferenceController extends BasePreferenceController {
|
||||
final Preference multiSimPreference = createNewPreference(screen.getContext());
|
||||
multiSimPreference.setOrder(imeiPreferenceOrder + simSlotNumber);
|
||||
multiSimPreference.setKey(getPreferenceKey() + simSlotNumber);
|
||||
screen.addPreference(multiSimPreference);
|
||||
category.addPreference(multiSimPreference);
|
||||
mPreferenceList.add(multiSimPreference);
|
||||
updatePreference(multiSimPreference, simSlotNumber);
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.telephony.TelephonyManager;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
@@ -37,6 +38,7 @@ public class SimStatusPreferenceController extends
|
||||
AbstractSimStatusImeiInfoPreferenceController implements PreferenceControllerMixin {
|
||||
|
||||
private static final String KEY_SIM_STATUS = "sim_status";
|
||||
private static final String KEY_PREFERENCE_CATEGORY = "device_detail_category";
|
||||
|
||||
private final TelephonyManager mTelephonyManager;
|
||||
private final SubscriptionManager mSubscriptionManager;
|
||||
@@ -64,6 +66,7 @@ public class SimStatusPreferenceController extends
|
||||
if (!isAvailable() || preference == null || !preference.isVisible()) {
|
||||
return;
|
||||
}
|
||||
final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY);
|
||||
|
||||
mPreferenceList.add(preference);
|
||||
|
||||
@@ -74,7 +77,7 @@ public class SimStatusPreferenceController extends
|
||||
final Preference multiSimPreference = createNewPreference(screen.getContext());
|
||||
multiSimPreference.setOrder(simStatusOrder + simSlotNumber);
|
||||
multiSimPreference.setKey(KEY_SIM_STATUS + simSlotNumber);
|
||||
screen.addPreference(multiSimPreference);
|
||||
category.addPreference(multiSimPreference);
|
||||
mPreferenceList.add(multiSimPreference);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -332,9 +332,12 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
||||
|
||||
mTrapezoidIndex = trapezoidIndex;
|
||||
mHandler.post(() -> {
|
||||
final long start = System.currentTimeMillis();
|
||||
removeAndCacheAllPrefs();
|
||||
addAllPreferences();
|
||||
refreshCategoryTitle();
|
||||
Log.d(TAG, String.format("refreshUi is finished in %d/ms",
|
||||
(System.currentTimeMillis() - start)));
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -53,13 +53,13 @@ public class DoubleTwistPreferenceController extends GesturePreferenceController
|
||||
|
||||
public static boolean isGestureAvailable(Context context) {
|
||||
final Resources resources = context.getResources();
|
||||
final String name = resources.getString(R.string.gesture_double_twist_sensor_name);
|
||||
final String type = resources.getString(R.string.gesture_double_twist_sensor_type);
|
||||
final String vendor = resources.getString(R.string.gesture_double_twist_sensor_vendor);
|
||||
if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(vendor)) {
|
||||
if (!TextUtils.isEmpty(type) && !TextUtils.isEmpty(vendor)) {
|
||||
final SensorManager sensorManager =
|
||||
(SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
|
||||
for (Sensor s : sensorManager.getSensorList(Sensor.TYPE_ALL)) {
|
||||
if (name.equals(s.getName()) && vendor.equals(s.getVendor())) {
|
||||
if (type.equals(s.getStringType()) && vendor.equals(s.getVendor())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +93,8 @@ public class OneHandedActionPullDownPrefController extends BasePreferenceControl
|
||||
return;
|
||||
}
|
||||
if (uri.equals(OneHandedSettingsUtils.ONE_HANDED_MODE_ENABLED_URI)
|
||||
|| uri.equals(OneHandedSettingsUtils.SHORTCUT_ENABLED_URI)) {
|
||||
|| uri.equals(OneHandedSettingsUtils.SOFTWARE_SHORTCUT_ENABLED_URI)
|
||||
|| uri.equals(OneHandedSettingsUtils.HARDWARE_SHORTCUT_ENABLED_URI)) {
|
||||
mPreference.setEnabled(OneHandedSettingsUtils.canEnableController(mContext));
|
||||
} else if (uri.equals(OneHandedSettingsUtils.SHOW_NOTIFICATION_ENABLED_URI)) {
|
||||
updateState(mPreference);
|
||||
|
||||
@@ -93,7 +93,8 @@ public class OneHandedActionShowNotificationPrefController extends BasePreferenc
|
||||
return;
|
||||
}
|
||||
if (uri.equals(OneHandedSettingsUtils.ONE_HANDED_MODE_ENABLED_URI)
|
||||
|| uri.equals(OneHandedSettingsUtils.SHORTCUT_ENABLED_URI)) {
|
||||
|| uri.equals(OneHandedSettingsUtils.SOFTWARE_SHORTCUT_ENABLED_URI)
|
||||
|| uri.equals(OneHandedSettingsUtils.HARDWARE_SHORTCUT_ENABLED_URI)) {
|
||||
mPreference.setEnabled(OneHandedSettingsUtils.canEnableController(mContext));
|
||||
} else if (uri.equals(OneHandedSettingsUtils.SHOW_NOTIFICATION_ENABLED_URI)) {
|
||||
updateState(mPreference);
|
||||
|
||||
@@ -27,6 +27,7 @@ import android.os.Looper;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
@@ -45,8 +46,10 @@ public class OneHandedSettingsUtils {
|
||||
Settings.Secure.getUriFor(Settings.Secure.ONE_HANDED_MODE_ENABLED);
|
||||
static final Uri SHOW_NOTIFICATION_ENABLED_URI =
|
||||
Settings.Secure.getUriFor(Settings.Secure.SWIPE_BOTTOM_TO_NOTIFICATION_ENABLED);
|
||||
static final Uri SHORTCUT_ENABLED_URI =
|
||||
static final Uri SOFTWARE_SHORTCUT_ENABLED_URI =
|
||||
Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS);
|
||||
static final Uri HARDWARE_SHORTCUT_ENABLED_URI =
|
||||
Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE);
|
||||
|
||||
public enum OneHandedTimeout {
|
||||
NEVER(0), SHORT(4), MEDIUM(8), LONG(12);
|
||||
@@ -238,9 +241,20 @@ public class OneHandedSettingsUtils {
|
||||
* @return true if user enabled one-handed shortcut in settings, false otherwise.
|
||||
*/
|
||||
public static boolean getShortcutEnabled(Context context) {
|
||||
final String targets = Settings.Secure.getStringForUser(context.getContentResolver(),
|
||||
// Checks SOFTWARE_SHORTCUT_KEY
|
||||
final String targetsSW = Settings.Secure.getStringForUser(context.getContentResolver(),
|
||||
Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, sCurrentUserId);
|
||||
return targets != null ? targets.contains(ONE_HANDED_MODE_TARGET_NAME) : false;
|
||||
if (!TextUtils.isEmpty(targetsSW) && targetsSW.contains(ONE_HANDED_MODE_TARGET_NAME)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Checks HARDWARE_SHORTCUT_KEY
|
||||
final String targetsHW = Settings.Secure.getStringForUser(context.getContentResolver(),
|
||||
Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, sCurrentUserId);
|
||||
if (!TextUtils.isEmpty(targetsHW) && targetsHW.contains(ONE_HANDED_MODE_TARGET_NAME)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -285,7 +299,8 @@ public class OneHandedSettingsUtils {
|
||||
final ContentResolver resolver = mContext.getContentResolver();
|
||||
resolver.registerContentObserver(ONE_HANDED_MODE_ENABLED_URI, true, this);
|
||||
resolver.registerContentObserver(SHOW_NOTIFICATION_ENABLED_URI, true, this);
|
||||
resolver.registerContentObserver(SHORTCUT_ENABLED_URI, true, this);
|
||||
resolver.registerContentObserver(SOFTWARE_SHORTCUT_ENABLED_URI, true, this);
|
||||
resolver.registerContentObserver(HARDWARE_SHORTCUT_ENABLED_URI, true, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -33,6 +33,7 @@ import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
@@ -64,6 +65,8 @@ public class PhoneNumberPreferenceControllerTest {
|
||||
private SubscriptionManager mSubscriptionManager;
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
@Mock
|
||||
private PreferenceCategory mCategory;
|
||||
|
||||
private Context mContext;
|
||||
private PhoneNumberPreferenceController mController;
|
||||
@@ -78,6 +81,8 @@ public class PhoneNumberPreferenceControllerTest {
|
||||
final String prefKey = mController.getPreferenceKey();
|
||||
when(mScreen.findPreference(prefKey)).thenReturn(mPreference);
|
||||
when(mScreen.getContext()).thenReturn(mContext);
|
||||
final String categoryKey = "basic_info_category";
|
||||
when(mScreen.findPreference(categoryKey)).thenReturn(mCategory);
|
||||
doReturn(mSubscriptionInfo).when(mController).getSubscriptionInfo(anyInt());
|
||||
doReturn(mSecondPreference).when(mController).createNewPreference(mContext);
|
||||
when(mPreference.isVisible()).thenReturn(true);
|
||||
@@ -105,7 +110,7 @@ public class PhoneNumberPreferenceControllerTest {
|
||||
|
||||
mController.displayPreference(mScreen);
|
||||
|
||||
verify(mScreen).addPreference(mSecondPreference);
|
||||
verify(mCategory).addPreference(mSecondPreference);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -39,6 +39,7 @@ import android.telephony.TelephonyManager;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
@@ -68,6 +69,8 @@ public class ImeiInfoPreferenceControllerTest {
|
||||
private UserManager mUserManager;
|
||||
@Mock
|
||||
private Fragment mFragment;
|
||||
@Mock
|
||||
private PreferenceCategory mCategory;
|
||||
|
||||
private Context mContext;
|
||||
private ImeiInfoPreferenceController mController;
|
||||
@@ -82,6 +85,8 @@ public class ImeiInfoPreferenceControllerTest {
|
||||
doReturn(AVAILABLE).when(mController).getAvailabilityStatus();
|
||||
when(mScreen.getContext()).thenReturn(mContext);
|
||||
doReturn(mSecondSimPreference).when(mController).createNewPreference(mContext);
|
||||
final String categoryKey = "device_detail_category";
|
||||
when(mScreen.findPreference(categoryKey)).thenReturn(mCategory);
|
||||
ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
|
||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||
final String prefKey = mController.getPreferenceKey();
|
||||
@@ -97,7 +102,7 @@ public class ImeiInfoPreferenceControllerTest {
|
||||
|
||||
mController.displayPreference(mScreen);
|
||||
|
||||
verify(mScreen).addPreference(mSecondSimPreference);
|
||||
verify(mCategory).addPreference(mSecondSimPreference);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -30,6 +30,7 @@ import android.telephony.TelephonyManager;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
@@ -59,6 +60,8 @@ public class SimStatusPreferenceControllerTest {
|
||||
private UserManager mUserManager;
|
||||
@Mock
|
||||
private Fragment mFragment;
|
||||
@Mock
|
||||
private PreferenceCategory mCategory;
|
||||
|
||||
private Context mContext;
|
||||
private SimStatusPreferenceController mController;
|
||||
@@ -71,6 +74,8 @@ public class SimStatusPreferenceControllerTest {
|
||||
mController = spy(new SimStatusPreferenceController(mContext, mFragment));
|
||||
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);
|
||||
@@ -85,7 +90,7 @@ public class SimStatusPreferenceControllerTest {
|
||||
|
||||
mController.displayPreference(mScreen);
|
||||
|
||||
verify(mScreen).addPreference(mSecondSimPreference);
|
||||
verify(mCategory).addPreference(mSecondSimPreference);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -78,7 +78,7 @@ public class DoubleTwistPreferenceControllerTest {
|
||||
when(mContext.getResources().getString(anyInt())).thenReturn("test");
|
||||
when(mContext.getSystemService(Context.SENSOR_SERVICE)).thenReturn(mSensorManager);
|
||||
when(mSensorManager.getSensorList(anyInt())).thenReturn(sensorList);
|
||||
when(sensorList.get(0).getName()).thenReturn("test");
|
||||
when(sensorList.get(0).getStringType()).thenReturn("test");
|
||||
when(sensorList.get(0).getVendor()).thenReturn("test");
|
||||
|
||||
assertThat(mController.isAvailable()).isTrue();
|
||||
@@ -97,7 +97,7 @@ public class DoubleTwistPreferenceControllerTest {
|
||||
when(mContext.getResources().getString(anyInt())).thenReturn("test");
|
||||
when(mContext.getSystemService(Context.SENSOR_SERVICE)).thenReturn(mSensorManager);
|
||||
when(mSensorManager.getSensorList(anyInt())).thenReturn(sensorList);
|
||||
when(sensorList.get(0).getName()).thenReturn("not_test");
|
||||
when(sensorList.get(0).getStringType()).thenReturn("not_test");
|
||||
|
||||
assertThat(mController.isAvailable()).isFalse();
|
||||
}
|
||||
@@ -105,9 +105,9 @@ public class DoubleTwistPreferenceControllerTest {
|
||||
@Test
|
||||
public void isSuggestionCompleted_doubleTwist_trueWhenNotAvailable() {
|
||||
SettingsShadowResources.overrideResource(
|
||||
R.string.gesture_double_twist_sensor_name, "nonexistant name");
|
||||
R.string.gesture_double_twist_sensor_type, "nonexistent type");
|
||||
SettingsShadowResources.overrideResource(
|
||||
R.string.gesture_double_twist_sensor_vendor, "nonexistant vendor");
|
||||
R.string.gesture_double_twist_sensor_vendor, "nonexistent vendor");
|
||||
|
||||
assertThat(DoubleTwistPreferenceController.isSuggestionComplete(
|
||||
RuntimeEnvironment.application, null /* prefs */))
|
||||
|
||||
@@ -0,0 +1,201 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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.deviceinfo;
|
||||
|
||||
import static android.content.Context.CLIPBOARD_SERVICE;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.doNothing;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipboardManager;
|
||||
import android.content.Context;
|
||||
import android.os.Looper;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import android.telephony.SubscriptionManager;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceCategory;
|
||||
import androidx.preference.PreferenceManager;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.test.annotation.UiThreadTest;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.testutils.ResourcesUtils;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class PhoneNumberPreferenceControllerTest {
|
||||
|
||||
private Preference mPreference;
|
||||
@Mock
|
||||
private Preference mSecondPreference;
|
||||
@Mock
|
||||
private TelephonyManager mTelephonyManager;
|
||||
@Mock
|
||||
private SubscriptionInfo mSubscriptionInfo;
|
||||
@Mock
|
||||
private SubscriptionManager mSubscriptionManager;
|
||||
private PreferenceScreen mScreen;
|
||||
private PreferenceCategory mCategory;
|
||||
|
||||
private Context mContext;
|
||||
private PhoneNumberPreferenceController mController;
|
||||
private ClipboardManager mClipboardManager;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||
mClipboardManager = (ClipboardManager) spy(mContext.getSystemService(CLIPBOARD_SERVICE));
|
||||
doReturn(mClipboardManager).when(mContext).getSystemService(CLIPBOARD_SERVICE);
|
||||
when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
|
||||
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
|
||||
mController = spy(new PhoneNumberPreferenceController(mContext, "phone_number"));
|
||||
|
||||
if (Looper.myLooper() == null) {
|
||||
Looper.prepare();
|
||||
}
|
||||
final PreferenceManager preferenceManager = new PreferenceManager(mContext);
|
||||
mScreen = preferenceManager.createPreferenceScreen(mContext);
|
||||
mPreference = spy(new Preference(mContext));
|
||||
mPreference.setKey(mController.getPreferenceKey());
|
||||
mPreference.setVisible(true);
|
||||
mScreen.addPreference(mPreference);
|
||||
final String categoryKey = "basic_info_category";
|
||||
mCategory = new PreferenceCategory(mContext);
|
||||
mCategory.setKey(categoryKey);
|
||||
mScreen.addPreference(mCategory);
|
||||
|
||||
doReturn(mSubscriptionInfo).when(mController).getSubscriptionInfo(anyInt());
|
||||
doReturn(mSecondPreference).when(mController).createNewPreference(mContext);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAvailabilityStatus_isVoiceCapable_shouldBeAVAILABLE() {
|
||||
when(mTelephonyManager.isVoiceCapable()).thenReturn(true);
|
||||
|
||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.AVAILABLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAvailabilityStatus_isNotVoiceCapable_shouldBeUNSUPPORTED_ON_DEVICE() {
|
||||
when(mTelephonyManager.isVoiceCapable()).thenReturn(false);
|
||||
|
||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void displayPreference_multiSim_shouldAddSecondPreference() {
|
||||
when(mTelephonyManager.getPhoneCount()).thenReturn(2);
|
||||
|
||||
final Preference sim1Preference = new Preference(mContext);
|
||||
mCategory.addItemFromInflater(sim1Preference);
|
||||
mController.displayPreference(mScreen);
|
||||
|
||||
assertThat(mCategory.getPreferenceCount()).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateState_singleSim_shouldUpdateTitleAndPhoneNumber() {
|
||||
final String phoneNumber = "1111111111";
|
||||
doReturn(phoneNumber).when(mController).getFormattedPhoneNumber(mSubscriptionInfo);
|
||||
when(mTelephonyManager.getPhoneCount()).thenReturn(1);
|
||||
mController.displayPreference(mScreen);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
verify(mPreference).setTitle(ResourcesUtils.getResourcesString(mContext, "status_number"));
|
||||
verify(mPreference).setSummary(phoneNumber);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateState_multiSim_shouldUpdateTitleAndPhoneNumberOfMultiplePreferences() {
|
||||
final String phoneNumber = "1111111111";
|
||||
doReturn(phoneNumber).when(mController).getFormattedPhoneNumber(mSubscriptionInfo);
|
||||
when(mTelephonyManager.getPhoneCount()).thenReturn(2);
|
||||
mController.displayPreference(mScreen);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
verify(mPreference).setTitle(ResourcesUtils.getResourcesString(
|
||||
mContext, "status_number_sim_slot", 1 /* sim slot */));
|
||||
verify(mPreference).setSummary(phoneNumber);
|
||||
verify(mSecondPreference).setTitle(ResourcesUtils.getResourcesString(
|
||||
mContext, "status_number_sim_slot", 2 /* sim slot */));
|
||||
verify(mSecondPreference).setSummary(phoneNumber);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_cannotGetActiveSubscriptionInfo_shouldShowUnknown() {
|
||||
when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(null);
|
||||
|
||||
CharSequence primaryNumber = mController.getSummary();
|
||||
|
||||
assertThat(primaryNumber).isNotNull();
|
||||
assertThat(primaryNumber).isEqualTo(ResourcesUtils.getResourcesString(
|
||||
mContext, "device_info_default"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_getEmptySubscriptionInfo_shouldShowUnknown() {
|
||||
List<SubscriptionInfo> infos = new ArrayList<>();
|
||||
when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(infos);
|
||||
|
||||
CharSequence primaryNumber = mController.getSummary();
|
||||
|
||||
assertThat(primaryNumber).isEqualTo(ResourcesUtils.getResourcesString(
|
||||
mContext, "device_info_default"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@UiThreadTest
|
||||
public void copy_shouldCopyPhoneNumberToClipboard() {
|
||||
final List<SubscriptionInfo> list = new ArrayList<>();
|
||||
list.add(mSubscriptionInfo);
|
||||
when(mSubscriptionManager.getActiveSubscriptionInfoList()).thenReturn(list);
|
||||
final String phoneNumber = "1111111111";
|
||||
doReturn(phoneNumber).when(mController).getFormattedPhoneNumber(mSubscriptionInfo);
|
||||
ArgumentCaptor<ClipData> captor = ArgumentCaptor.forClass(ClipData.class);
|
||||
doNothing().when(mClipboardManager).setPrimaryClip(captor.capture());
|
||||
|
||||
mController.copy();
|
||||
|
||||
final CharSequence data = captor.getValue().getItemAt(0).getText();
|
||||
assertThat(phoneNumber.contentEquals(data)).isTrue();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user