Snap for 7563534 from 6850b70226 to sc-release

Change-Id: I7c02200ffd843bfc75dc5424543014b50eb8b04a
This commit is contained in:
Android Build Coastguard Worker
2021-07-20 01:08:57 +00:00
22 changed files with 361 additions and 34 deletions

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

View File

@@ -58,8 +58,8 @@
<!-- Manufacturer backup settings label --> <!-- Manufacturer backup settings label -->
<string name="config_backup_settings_label" translatable="true"></string> <string name="config_backup_settings_label" translatable="true"></string>
<!-- Double twist sensor name and vendor used by gesture setting --> <!-- Double twist sensor type and vendor used by gesture setting -->
<string name="gesture_double_twist_sensor_name" translatable="false"></string> <string name="gesture_double_twist_sensor_type" translatable="false"></string>
<string name="gesture_double_twist_sensor_vendor" translatable="false"></string> <string name="gesture_double_twist_sensor_vendor" translatable="false"></string>
<!-- When true enable gesture setting. --> <!-- When true enable gesture setting. -->

View File

@@ -29,6 +29,8 @@
settings:isPreferenceVisible="false"/> settings:isPreferenceVisible="false"/>
<PreferenceCategory <PreferenceCategory
android:key="basic_info_category"
android:selectable="false"
android:title="@string/my_device_info_basic_info_category_title"> android:title="@string/my_device_info_basic_info_category_title">
<!-- Device name --> <!-- Device name -->
@@ -88,6 +90,8 @@
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory
android:key="device_detail_category"
android:selectable="false"
android:title="@string/my_device_info_device_details_category_title"> android:title="@string/my_device_info_device_details_category_title">
<!-- SIM status --> <!-- SIM status -->

View File

@@ -36,6 +36,7 @@ import com.android.settings.R;
import com.android.settings.SetupWizardUtils; import com.android.settings.SetupWizardUtils;
import com.android.settings.password.ChooseLockGeneric; import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.SetupSkipDialog;
import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton; import com.google.android.setupcompat.template.FooterButton;
@@ -284,13 +285,11 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) { if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) {
if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED) { if (isResultSkipOrFinished(resultCode)) {
onSkipButtonClick(mFooterBarMixin.getSecondaryButtonView()); handleBiometricResultSkipOrFinished(resultCode, data);
return;
} else if (resultCode == RESULT_TIMEOUT) { } else if (resultCode == RESULT_TIMEOUT) {
setResult(resultCode, data); setResult(resultCode, data);
finish(); finish();
return;
} }
} else if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST) { } else if (requestCode == CHOOSE_LOCK_GENERIC_REQUEST) {
mConfirmingCredentials = false; mConfirmingCredentials = false;
@@ -337,8 +336,8 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
overridePendingTransition(R.anim.sud_slide_back_in, R.anim.sud_slide_back_out); overridePendingTransition(R.anim.sud_slide_back_in, R.anim.sud_slide_back_out);
} else if (requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) { } else if (requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) {
Log.d(TAG, "ENROLL_NEXT_BIOMETRIC_REQUEST, result: " + resultCode); Log.d(TAG, "ENROLL_NEXT_BIOMETRIC_REQUEST, result: " + resultCode);
if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED) { if (isResultSkipOrFinished(resultCode)) {
onSkipButtonClick(mFooterBarMixin.getSecondaryButtonView()); handleBiometricResultSkipOrFinished(resultCode, data);
} else if (resultCode != RESULT_CANCELED) { } else if (resultCode != RESULT_CANCELED) {
setResult(resultCode, data); setResult(resultCode, data);
finish(); finish();
@@ -347,6 +346,25 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
} }
private static boolean isResultSkipOrFinished(int resultCode) {
return resultCode == RESULT_SKIP || resultCode == SetupSkipDialog.RESULT_SKIP
|| resultCode == RESULT_FINISHED;
}
private void handleBiometricResultSkipOrFinished(int resultCode, @Nullable Intent data) {
if (data != null
&& data.getBooleanExtra(
MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, false)) {
getIntent().removeExtra(MultiBiometricEnrollHelper.EXTRA_ENROLL_AFTER_FACE);
}
if (resultCode == RESULT_SKIP) {
onEnrollmentSkipped(data);
} else if (resultCode == RESULT_FINISHED) {
onFinishedEnrolling(data);
}
}
/** /**
* Called after confirming credentials. Can be used to prevent the default * Called after confirming credentials. Can be used to prevent the default
* behavior of immediately calling #getChallenge (useful to things like intro * behavior of immediately calling #getChallenge (useful to things like intro
@@ -364,7 +382,16 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
} }
protected void onSkipButtonClick(View view) { protected void onSkipButtonClick(View view) {
setResult(RESULT_SKIP); onEnrollmentSkipped(null /* data */);
}
protected void onEnrollmentSkipped(@Nullable Intent data) {
setResult(RESULT_SKIP, data);
finish();
}
protected void onFinishedEnrolling(@Nullable Intent data) {
setResult(RESULT_FINISHED, data);
finish(); finish();
} }

View File

@@ -37,6 +37,7 @@ public class MultiBiometricEnrollHelper {
private static final int REQUEST_FINGERPRINT_ENROLL = 3001; private static final int REQUEST_FINGERPRINT_ENROLL = 3001;
public static final String EXTRA_ENROLL_AFTER_FACE = "enroll_after_face"; public static final String EXTRA_ENROLL_AFTER_FACE = "enroll_after_face";
public static final String EXTRA_SKIP_PENDING_ENROLL = "skip_pending_enroll";
@NonNull private final FragmentActivity mActivity; @NonNull private final FragmentActivity mActivity;
private final long mGkPwHandle; private final long mGkPwHandle;

View File

@@ -33,6 +33,7 @@ import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase; import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricUtils; import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.SetupSkipDialog;
import com.airbnb.lottie.LottieAnimationView; import com.airbnb.lottie.LottieAnimationView;
import com.google.android.setupcompat.template.FooterBarMixin; import com.google.android.setupcompat.template.FooterBarMixin;
@@ -225,13 +226,17 @@ public class FaceEnrollEducation extends BiometricEnrollBase {
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
mResultIntent = data; mResultIntent = data;
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST) { if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST
|| requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST) {
// If the user finished or skipped enrollment, finish this activity // If the user finished or skipped enrollment, finish this activity
if (resultCode == RESULT_FINISHED || resultCode == RESULT_SKIP if (resultCode == RESULT_SKIP || resultCode == RESULT_FINISHED
|| resultCode == RESULT_TIMEOUT) { || resultCode == SetupSkipDialog.RESULT_SKIP) {
setResult(resultCode, data); setResult(resultCode, data);
finish(); finish();
} }
} else if (resultCode == RESULT_TIMEOUT) {
setResult(resultCode, data);
finish();
} }
} }

View File

@@ -71,6 +71,20 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
} }
} }
@Override
protected void onEnrollmentSkipped(@Nullable Intent data) {
if (!BiometricUtils.tryStartingNextBiometricEnroll(this, ENROLL_NEXT_BIOMETRIC_REQUEST)) {
super.onEnrollmentSkipped(data);
}
}
@Override
protected void onFinishedEnrolling(@Nullable Intent data) {
if (!BiometricUtils.tryStartingNextBiometricEnroll(this, ENROLL_NEXT_BIOMETRIC_REQUEST)) {
super.onFinishedEnrolling(data);
}
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);

View File

@@ -50,6 +50,16 @@ public class FaceEnrollParentalConsent extends FaceEnrollIntroduction {
onConsentResult(false /* granted */); onConsentResult(false /* granted */);
} }
@Override
protected void onEnrollmentSkipped(@Nullable Intent data) {
onConsentResult(false /* granted */);
}
@Override
protected void onFinishedEnrolling(@Nullable Intent data) {
onConsentResult(true /* granted */);
}
private void onConsentResult(boolean granted) { private void onConsentResult(boolean granted) {
final Intent result = new Intent(); final Intent result = new Intent();
result.putExtra(EXTRA_KEY_MODALITY, TYPE_FACE); result.putExtra(EXTRA_KEY_MODALITY, TYPE_FACE);

View File

@@ -51,6 +51,16 @@ public class FingerprintEnrollParentalConsent extends FingerprintEnrollIntroduct
onConsentResult(false /* granted */); onConsentResult(false /* granted */);
} }
@Override
protected void onEnrollmentSkipped(@Nullable Intent data) {
onConsentResult(false /* granted */);
}
@Override
protected void onFinishedEnrolling(@Nullable Intent data) {
onConsentResult(true /* granted */);
}
private void onConsentResult(boolean granted) { private void onConsentResult(boolean granted) {
final Intent result = new Intent(); final Intent result = new Intent();
result.putExtra(EXTRA_KEY_MODALITY, TYPE_FINGERPRINT); result.putExtra(EXTRA_KEY_MODALITY, TYPE_FINGERPRINT);

View File

@@ -29,6 +29,7 @@ import com.android.internal.widget.LockPatternUtils;
import com.android.settings.SetupWizardUtils; import com.android.settings.SetupWizardUtils;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricUtils; import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.biometrics.MultiBiometricEnrollHelper;
import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.password.SetupChooseLockGeneric; import com.android.settings.password.SetupChooseLockGeneric;
import com.android.settings.password.SetupSkipDialog; import com.android.settings.password.SetupSkipDialog;
@@ -72,9 +73,9 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST && isKeyguardSecure()) {
// if lock was already present, do not return intent data since it must have been // if lock was already present, do not return intent data since it must have been
// reported in previous attempts // reported in previous attempts
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST && isKeyguardSecure()) {
if (!mAlreadyHadLockScreenSetup) { if (!mAlreadyHadLockScreenSetup) {
data = getMetricIntent(data); data = getMetricIntent(data);
} }
@@ -85,6 +86,15 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu
} }
} }
// If user has skipped or finished enrolling, don't restart enrollment.
final boolean isEnrollRequest = requestCode == BIOMETRIC_FIND_SENSOR_REQUEST
|| requestCode == ENROLL_NEXT_BIOMETRIC_REQUEST;
final boolean isResultSkipOrFinished = resultCode == RESULT_SKIP
|| resultCode == SetupSkipDialog.RESULT_SKIP || resultCode == RESULT_FINISHED;
if (isEnrollRequest && isResultSkipOrFinished) {
data = setSkipPendingEnroll(data);
}
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
} }
@@ -112,17 +122,33 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu
return data; return data;
} }
private Intent setSkipPendingEnroll(Intent data) {
if (data == null) {
data = new Intent();
}
data.putExtra(MultiBiometricEnrollHelper.EXTRA_SKIP_PENDING_ENROLL, true);
return data;
}
@Override @Override
protected void onCancelButtonClick(View view) { protected void onCancelButtonClick(View view) {
final int resultCode;
Intent data;
if (isKeyguardSecure()) { if (isKeyguardSecure()) {
// If the keyguard is already set up securely (maybe the user added a backup screen // If the keyguard is already set up securely (maybe the user added a backup screen
// lock and skipped fingerprint), return RESULT_SKIP directly. // lock and skipped fingerprint), return RESULT_SKIP directly.
setResult(RESULT_SKIP, mAlreadyHadLockScreenSetup ? null : getMetricIntent(null)); resultCode = RESULT_SKIP;
finish(); data = mAlreadyHadLockScreenSetup ? null : getMetricIntent(null);
} else { } else {
setResult(SetupSkipDialog.RESULT_SKIP); resultCode = SetupSkipDialog.RESULT_SKIP;
finish(); data = null;
} }
// User has explicitly canceled enroll. Don't restart it automatically.
data = setSkipPendingEnroll(data);
setResult(resultCode, data);
finish();
} }
@Override @Override

View File

@@ -29,6 +29,7 @@ import android.widget.Toast;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
@@ -40,7 +41,8 @@ import java.util.List;
public class PhoneNumberPreferenceController extends BasePreferenceController { 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 TelephonyManager mTelephonyManager;
private final SubscriptionManager mSubscriptionManager; private final SubscriptionManager mSubscriptionManager;
@@ -66,6 +68,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
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());
final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY);
mPreferenceList.add(preference); mPreferenceList.add(preference);
final int phonePreferenceOrder = preference.getOrder(); final int phonePreferenceOrder = preference.getOrder();
@@ -76,7 +79,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
multiSimPreference.setOrder(phonePreferenceOrder + simSlotNumber); multiSimPreference.setOrder(phonePreferenceOrder + simSlotNumber);
multiSimPreference.setKey(KEY_PHONE_NUMBER + simSlotNumber); multiSimPreference.setKey(KEY_PHONE_NUMBER + simSlotNumber);
multiSimPreference.setSelectable(false); multiSimPreference.setSelectable(false);
screen.addPreference(multiSimPreference); category.addPreference(multiSimPreference);
mPreferenceList.add(multiSimPreference); mPreferenceList.add(multiSimPreference);
} }
} }

View File

@@ -27,6 +27,7 @@ import android.telephony.TelephonyManager;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
@@ -42,6 +43,8 @@ import java.util.List;
*/ */
public class ImeiInfoPreferenceController extends BasePreferenceController { public class ImeiInfoPreferenceController extends BasePreferenceController {
private static final String KEY_PREFERENCE_CATEGORY = "device_detail_category";
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<>();
@@ -61,6 +64,7 @@ public class ImeiInfoPreferenceController extends BasePreferenceController {
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());
final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY);
mPreferenceList.add(preference); mPreferenceList.add(preference);
updatePreference(preference, 0 /* simSlot */); updatePreference(preference, 0 /* simSlot */);
@@ -72,7 +76,7 @@ public class ImeiInfoPreferenceController extends BasePreferenceController {
final Preference multiSimPreference = createNewPreference(screen.getContext()); final Preference multiSimPreference = createNewPreference(screen.getContext());
multiSimPreference.setOrder(imeiPreferenceOrder + simSlotNumber); multiSimPreference.setOrder(imeiPreferenceOrder + simSlotNumber);
multiSimPreference.setKey(getPreferenceKey() + simSlotNumber); multiSimPreference.setKey(getPreferenceKey() + simSlotNumber);
screen.addPreference(multiSimPreference); category.addPreference(multiSimPreference);
mPreferenceList.add(multiSimPreference); mPreferenceList.add(multiSimPreference);
updatePreference(multiSimPreference, simSlotNumber); updatePreference(multiSimPreference, simSlotNumber);
} }

View File

@@ -24,6 +24,7 @@ import android.telephony.TelephonyManager;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
@@ -37,6 +38,7 @@ public class SimStatusPreferenceController extends
AbstractSimStatusImeiInfoPreferenceController implements PreferenceControllerMixin { AbstractSimStatusImeiInfoPreferenceController implements PreferenceControllerMixin {
private static final String KEY_SIM_STATUS = "sim_status"; 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 TelephonyManager mTelephonyManager;
private final SubscriptionManager mSubscriptionManager; private final SubscriptionManager mSubscriptionManager;
@@ -64,6 +66,7 @@ public class SimStatusPreferenceController extends
if (!isAvailable() || preference == null || !preference.isVisible()) { if (!isAvailable() || preference == null || !preference.isVisible()) {
return; return;
} }
final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY);
mPreferenceList.add(preference); mPreferenceList.add(preference);
@@ -74,7 +77,7 @@ public class SimStatusPreferenceController extends
final Preference multiSimPreference = createNewPreference(screen.getContext()); final Preference multiSimPreference = createNewPreference(screen.getContext());
multiSimPreference.setOrder(simStatusOrder + simSlotNumber); multiSimPreference.setOrder(simStatusOrder + simSlotNumber);
multiSimPreference.setKey(KEY_SIM_STATUS + simSlotNumber); multiSimPreference.setKey(KEY_SIM_STATUS + simSlotNumber);
screen.addPreference(multiSimPreference); category.addPreference(multiSimPreference);
mPreferenceList.add(multiSimPreference); mPreferenceList.add(multiSimPreference);
} }
} }

View File

@@ -53,13 +53,13 @@ public class DoubleTwistPreferenceController extends GesturePreferenceController
public static boolean isGestureAvailable(Context context) { public static boolean isGestureAvailable(Context context) {
final Resources resources = context.getResources(); 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); 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 = final SensorManager sensorManager =
(SensorManager) context.getSystemService(Context.SENSOR_SERVICE); (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
for (Sensor s : sensorManager.getSensorList(Sensor.TYPE_ALL)) { 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; return true;
} }
} }

View File

@@ -33,6 +33,7 @@ import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
@@ -64,6 +65,8 @@ public class PhoneNumberPreferenceControllerTest {
private SubscriptionManager mSubscriptionManager; private SubscriptionManager mSubscriptionManager;
@Mock @Mock
private PreferenceScreen mScreen; private PreferenceScreen mScreen;
@Mock
private PreferenceCategory mCategory;
private Context mContext; private Context mContext;
private PhoneNumberPreferenceController mController; private PhoneNumberPreferenceController mController;
@@ -78,6 +81,8 @@ public class PhoneNumberPreferenceControllerTest {
final String prefKey = mController.getPreferenceKey(); final String prefKey = mController.getPreferenceKey();
when(mScreen.findPreference(prefKey)).thenReturn(mPreference); when(mScreen.findPreference(prefKey)).thenReturn(mPreference);
when(mScreen.getContext()).thenReturn(mContext); when(mScreen.getContext()).thenReturn(mContext);
final String categoryKey = "basic_info_category";
when(mScreen.findPreference(categoryKey)).thenReturn(mCategory);
doReturn(mSubscriptionInfo).when(mController).getSubscriptionInfo(anyInt()); doReturn(mSubscriptionInfo).when(mController).getSubscriptionInfo(anyInt());
doReturn(mSecondPreference).when(mController).createNewPreference(mContext); doReturn(mSecondPreference).when(mController).createNewPreference(mContext);
when(mPreference.isVisible()).thenReturn(true); when(mPreference.isVisible()).thenReturn(true);
@@ -105,7 +110,7 @@ public class PhoneNumberPreferenceControllerTest {
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
verify(mScreen).addPreference(mSecondPreference); verify(mCategory).addPreference(mSecondPreference);
} }
@Test @Test

View File

@@ -39,6 +39,7 @@ import android.telephony.TelephonyManager;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
@@ -68,6 +69,8 @@ public class ImeiInfoPreferenceControllerTest {
private UserManager mUserManager; private UserManager mUserManager;
@Mock @Mock
private Fragment mFragment; private Fragment mFragment;
@Mock
private PreferenceCategory mCategory;
private Context mContext; private Context mContext;
private ImeiInfoPreferenceController mController; private ImeiInfoPreferenceController mController;
@@ -82,6 +85,8 @@ public class ImeiInfoPreferenceControllerTest {
doReturn(AVAILABLE).when(mController).getAvailabilityStatus(); 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);
final String categoryKey = "device_detail_category";
when(mScreen.findPreference(categoryKey)).thenReturn(mCategory);
ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager); ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
final String prefKey = mController.getPreferenceKey(); final String prefKey = mController.getPreferenceKey();
@@ -97,7 +102,7 @@ public class ImeiInfoPreferenceControllerTest {
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
verify(mScreen).addPreference(mSecondSimPreference); verify(mCategory).addPreference(mSecondSimPreference);
} }
@Test @Test

View File

@@ -30,6 +30,7 @@ import android.telephony.TelephonyManager;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.R; import com.android.settings.R;
@@ -59,6 +60,8 @@ public class SimStatusPreferenceControllerTest {
private UserManager mUserManager; private UserManager mUserManager;
@Mock @Mock
private Fragment mFragment; private Fragment mFragment;
@Mock
private PreferenceCategory mCategory;
private Context mContext; private Context mContext;
private SimStatusPreferenceController mController; private SimStatusPreferenceController mController;
@@ -71,6 +74,8 @@ public class SimStatusPreferenceControllerTest {
mController = spy(new SimStatusPreferenceController(mContext, mFragment)); mController = spy(new SimStatusPreferenceController(mContext, mFragment));
doReturn(true).when(mController).isAvailable(); doReturn(true).when(mController).isAvailable();
when(mScreen.getContext()).thenReturn(mContext); when(mScreen.getContext()).thenReturn(mContext);
final String categoryKey = "device_detail_category";
when(mScreen.findPreference(categoryKey)).thenReturn(mCategory);
doReturn(mSecondSimPreference).when(mController).createNewPreference(mContext); doReturn(mSecondSimPreference).when(mController).createNewPreference(mContext);
ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager); ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
@@ -85,7 +90,7 @@ public class SimStatusPreferenceControllerTest {
mController.displayPreference(mScreen); mController.displayPreference(mScreen);
verify(mScreen).addPreference(mSecondSimPreference); verify(mCategory).addPreference(mSecondSimPreference);
} }
@Test @Test

View File

@@ -78,7 +78,7 @@ public class DoubleTwistPreferenceControllerTest {
when(mContext.getResources().getString(anyInt())).thenReturn("test"); when(mContext.getResources().getString(anyInt())).thenReturn("test");
when(mContext.getSystemService(Context.SENSOR_SERVICE)).thenReturn(mSensorManager); when(mContext.getSystemService(Context.SENSOR_SERVICE)).thenReturn(mSensorManager);
when(mSensorManager.getSensorList(anyInt())).thenReturn(sensorList); 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"); when(sensorList.get(0).getVendor()).thenReturn("test");
assertThat(mController.isAvailable()).isTrue(); assertThat(mController.isAvailable()).isTrue();
@@ -97,7 +97,7 @@ public class DoubleTwistPreferenceControllerTest {
when(mContext.getResources().getString(anyInt())).thenReturn("test"); when(mContext.getResources().getString(anyInt())).thenReturn("test");
when(mContext.getSystemService(Context.SENSOR_SERVICE)).thenReturn(mSensorManager); when(mContext.getSystemService(Context.SENSOR_SERVICE)).thenReturn(mSensorManager);
when(mSensorManager.getSensorList(anyInt())).thenReturn(sensorList); 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(); assertThat(mController.isAvailable()).isFalse();
} }
@@ -105,9 +105,9 @@ public class DoubleTwistPreferenceControllerTest {
@Test @Test
public void isSuggestionCompleted_doubleTwist_trueWhenNotAvailable() { public void isSuggestionCompleted_doubleTwist_trueWhenNotAvailable() {
SettingsShadowResources.overrideResource( SettingsShadowResources.overrideResource(
R.string.gesture_double_twist_sensor_name, "nonexistant name"); R.string.gesture_double_twist_sensor_type, "nonexistent type");
SettingsShadowResources.overrideResource( SettingsShadowResources.overrideResource(
R.string.gesture_double_twist_sensor_vendor, "nonexistant vendor"); R.string.gesture_double_twist_sensor_vendor, "nonexistent vendor");
assertThat(DoubleTwistPreferenceController.isSuggestionComplete( assertThat(DoubleTwistPreferenceController.isSuggestionComplete(
RuntimeEnvironment.application, null /* prefs */)) RuntimeEnvironment.application, null /* prefs */))

View File

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