DO NOT MERGE - Merge qt-qpr1-dev-plus-aosp@6304901 into stage-aosp-master

Bug: 151763422
Change-Id: I2f38724f862817185ae93dd79736791540251a60
This commit is contained in:
Xin Li
2020-03-19 10:10:41 -07:00
97 changed files with 329840 additions and 330251 deletions

View File

@@ -121,6 +121,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
"accessibility_shortcut_preference";
private static final String HEARING_AID_PREFERENCE =
"hearing_aid_preference";
private static final String RTT_SETTINGS_SCREEN = "rtt_setting";
private static final String CAPTIONING_PREFERENCE_SCREEN =
"captioning_preference_screen";
private static final String DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN =
@@ -240,6 +241,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
private Preference mAccessibilityShortcutPreferenceScreen;
private Preference mDisplayDaltonizerPreferenceScreen;
private Preference mHearingAidPreference;
private Preference mRTTPreference;
private Preference mVibrationPreferenceScreen;
private Preference mLiveCaptionPreference;
private SwitchPreference mToggleInversionPreference;
@@ -248,6 +250,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
private SwitchPreference mDarkUIModePreference;
private DarkUIPreferenceController mDarkUIPreferenceController;
private LiveCaptionPreferenceController mLiveCaptionPreferenceController;
private RTTSettingPreferenceController mRTTSettingPreferenceController;
private int mLongPressTimeoutDefault;
@@ -309,6 +312,9 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
mLiveCaptionPreferenceController = new LiveCaptionPreferenceController(context,
LIVE_CAPTION_PREFERENCE_KEY);
mRTTSettingPreferenceController =
new RTTSettingPreferenceController(context, RTT_SETTINGS_SCREEN);
}
@Override
@@ -503,6 +509,11 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
mHearingAidPreference = findPreference(HEARING_AID_PREFERENCE);
mHearingAidPreferenceController.displayPreference(getPreferenceScreen());
// RTT Setting
mRTTPreference = findPreference(RTT_SETTINGS_SCREEN);
mRTTSettingPreferenceController.displayPreference(getPreferenceScreen());
// Captioning.
mCaptioningPreferenceScreen = findPreference(CAPTIONING_PREFERENCE_SCREEN);
@@ -787,6 +798,8 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
mHearingAidPreferenceController.updateState(mHearingAidPreference);
mRTTSettingPreferenceController.updateState(mRTTPreference);
mLiveCaptionPreferenceController.updateState(mLiveCaptionPreference);
updateFeatureSummary(Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED,

View File

@@ -0,0 +1,87 @@
/*
* Copyright (C) 2020 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.accessibility;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.provider.Settings;
import android.telecom.TelecomManager;
import android.text.TextUtils;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import java.util.List;
/** A controller to control the status for RTT setting in Accessibility screen.*/
public class RTTSettingPreferenceController extends BasePreferenceController {
private static final String DIALER_RTT_CONFIGURATION = "dialer_rtt_configuration";
private final Context mContext;
private final PackageManager mPackageManager;
private final TelecomManager mTelecomManager;
private final CharSequence[] mModes;
private final String mDialerPackage;
@VisibleForTesting
Intent mRTTIntent;
public RTTSettingPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
mContext = context;
mModes = mContext.getResources().getTextArray(R.array.rtt_setting_mode);
mDialerPackage = mContext.getString(R.string.config_rtt_setting_package_name);
mPackageManager = context.getPackageManager();
mTelecomManager = context.getSystemService(TelecomManager.class);
mRTTIntent = new Intent(context.getString(R.string.config_rtt_setting_intent_action));
}
@Override
public int getAvailabilityStatus() {
final List<ResolveInfo> resolved =
mPackageManager.queryIntentActivities(mRTTIntent, 0 /* flags */);
return resolved != null && !resolved.isEmpty() && isDialerSupportRTTSetting()
? AVAILABLE
: UNSUPPORTED_ON_DEVICE;
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
final Preference pref = screen.findPreference(getPreferenceKey());
pref.setIntent(mRTTIntent);
}
@Override
public CharSequence getSummary() {
final int option = Settings.Secure.getInt(mContext.getContentResolver(),
DIALER_RTT_CONFIGURATION, 1 /* not visible */);
return mModes[option];
}
@VisibleForTesting
boolean isDialerSupportRTTSetting() {
return TextUtils.equals(mTelecomManager.getDefaultDialerPackage(), mDialerPackage);
}
}

View File

@@ -37,6 +37,7 @@ import androidx.appcompat.app.AlertDialog;
import com.android.settings.R;
import java.util.Arrays;
import java.util.List;
public class ResetAppsHelper implements DialogInterface.OnClickListener,
@@ -109,10 +110,17 @@ public class ResetAppsHelper implements DialogInterface.OnClickListener,
AsyncTask.execute(new Runnable() {
@Override
public void run() {
List<ApplicationInfo> apps = mPm.getInstalledApplications(
final List<ApplicationInfo> apps = mPm.getInstalledApplications(
PackageManager.GET_DISABLED_COMPONENTS);
final List<String> whiteList = Arrays.asList(
mContext.getResources().getStringArray(
R.array.config_skip_reset_apps_package_name));
for (int i = 0; i < apps.size(); i++) {
ApplicationInfo app = apps.get(i);
if (whiteList.contains(app.packageName)) {
continue;
}
try {
mNm.clearData(app.packageName, app.uid, false);
} catch (android.os.RemoteException ex) {

View File

@@ -63,7 +63,7 @@ public class SettingsBaseActivity extends FragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (isLockTaskModePinned() && !isSettingsRunOnTop()) {
if (isLockTaskModePinned() && !isSettingsRunOnTop() && !isLaunchableInTaskModePinned()) {
Log.w(TAG, "Devices lock task mode pinned.");
finish();
}
@@ -147,6 +147,13 @@ public class SettingsBaseActivity extends FragmentActivity {
((ViewGroup) findViewById(R.id.content_frame)).addView(view, params);
}
/**
* @return whether or not the activity can be launched from other apps in the pinning screen.
*/
public boolean isLaunchableInTaskModePinned() {
return false;
}
private void onCategoriesChanged() {
final int N = mCategoryListeners.size();
for (int i = 0; i < N; i++) {

View File

@@ -118,7 +118,8 @@ public class ImeiInfoDialogController {
mDialog.setText(ID_PRL_VERSION_VALUE, getCdmaPrlVersion());
if (mSubscriptionInfo != null && isCdmaLteEnabled()) {
if ((mSubscriptionInfo != null && isCdmaLteEnabled()) ||
(mSubscriptionInfo == null && isSimPresent(mSlotId))) {
// Show IMEI for LTE device
mDialog.setText(ID_IMEI_VALUE,
getTextAsDigits(mTelephonyManager.getImei(mSlotId)));
@@ -149,6 +150,15 @@ public class ImeiInfoDialogController {
return mTelephonyManager.isGlobalModeEnabled();
}
boolean isSimPresent(int slotId) {
final int simState = mTelephonyManager.getSimState(slotId);
if ((simState != TelephonyManager.SIM_STATE_ABSENT) &&
(simState != TelephonyManager.SIM_STATE_UNKNOWN)) {
return true;
}
return false;
}
@VisibleForTesting
String getMeid() {
return mTelephonyManager.getMeid(mSlotId);

View File

@@ -88,6 +88,8 @@ public class PreferredNetworkModePreferenceController extends TelephonyBasePrefe
Settings.Global.putInt(mContext.getContentResolver(),
Settings.Global.PREFERRED_NETWORK_MODE + mSubId,
settingsMode);
final ListPreference listPreference = (ListPreference) preference;
listPreference.setSummary(getPreferredNetworkModeSummaryResId(settingsMode));
return true;
}

View File

@@ -188,6 +188,11 @@ public abstract class ConfirmDeviceCredentialBaseActivity extends SettingsActivi
}
}
@Override
public boolean isLaunchableInTaskModePinned() {
return true;
}
public void prepareEnterAnimation() {
getFragment().prepareEnterAnimation();
}

View File

@@ -317,6 +317,14 @@ public class SliceBuilderUtils {
ListBuilder.ICON_IMAGE, sliceData.getTitle());
final Set<String> keywords = buildSliceKeywords(sliceData);
int cur = sliderController.getSliderPosition();
if (cur < sliderController.getMin()) {
cur = sliderController.getMin();
}
if (cur > sliderController.getMax()) {
cur = sliderController.getMax();
}
return new ListBuilder(context, sliceData.getUri(), ListBuilder.INFINITY)
.setAccentColor(color)
.addInputRange(new InputRangeBuilder()
@@ -325,7 +333,7 @@ public class SliceBuilderUtils {
.setPrimaryAction(primaryAction)
.setMax(sliderController.getMax())
.setMin(sliderController.getMin())
.setValue(sliderController.getSliderPosition())
.setValue(cur)
.setInputAction(actionIntent))
.setKeywords(keywords)
.build();

View File

@@ -19,6 +19,8 @@ import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.Log;
import com.android.settings.bluetooth.BluetoothSliceBuilder;
@@ -71,6 +73,12 @@ public class SliceDeepLinkSpringBoard extends Activity {
}
private static Uri parse(Uri uri) {
return Uri.parse(uri.getQueryParameter(EXTRA_SLICE));
final String sliceParameter = uri.getQueryParameter(EXTRA_SLICE);
if (TextUtils.isEmpty(sliceParameter)) {
EventLog.writeEvent(0x534e4554, "122836081", -1, "");
return null;
} else {
return Uri.parse(sliceParameter);
}
}
}

View File

@@ -74,6 +74,7 @@ import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.stream.Collectors;
/**
* The class for allowing UIs like {@link WifiDialog} and {@link WifiConfigUiBase} to
@@ -113,18 +114,30 @@ public class WifiConfigController implements TextWatcher,
public static final int WIFI_EAP_METHOD_AKA_PRIME = 6;
/* These values come from "wifi_peap_phase2_entries" resource array */
public static final int WIFI_PEAP_PHASE2_NONE = 0;
public static final int WIFI_PEAP_PHASE2_MSCHAPV2 = 1;
public static final int WIFI_PEAP_PHASE2_GTC = 2;
public static final int WIFI_PEAP_PHASE2_SIM = 3;
public static final int WIFI_PEAP_PHASE2_AKA = 4;
public static final int WIFI_PEAP_PHASE2_AKA_PRIME = 5;
public static final int WIFI_PEAP_PHASE2_MSCHAPV2 = 0;
public static final int WIFI_PEAP_PHASE2_GTC = 1;
public static final int WIFI_PEAP_PHASE2_SIM = 2;
public static final int WIFI_PEAP_PHASE2_AKA = 3;
public static final int WIFI_PEAP_PHASE2_AKA_PRIME = 4;
/* These values come from "wifi_ttls_phase2_entries" resource array */
public static final int WIFI_TTLS_PHASE2_PAP = 0;
public static final int WIFI_TTLS_PHASE2_MSCHAP = 1;
public static final int WIFI_TTLS_PHASE2_MSCHAPV2 = 2;
public static final int WIFI_TTLS_PHASE2_GTC = 3;
private static final String UNDESIRED_CERTIFICATE_MACRANDSECRET = "MacRandSecret";
private static final String UNDESIRED_CERTIFICATE_MACRANDSAPSECRET = "MacRandSapSecret";
@VisibleForTesting
static final String[] UNDESIRED_CERTIFICATES = {
UNDESIRED_CERTIFICATE_MACRANDSECRET,
UNDESIRED_CERTIFICATE_MACRANDSAPSECRET
};
/* Phase2 methods supported by PEAP are limited */
private ArrayAdapter<String> mPhase2PeapAdapter;
/* Full list of phase2 methods */
private ArrayAdapter<String> mPhase2FullAdapter;
private ArrayAdapter<CharSequence> mPhase2PeapAdapter;
/* Phase2 methods supported by TTLS are limited */
private ArrayAdapter<CharSequence> mPhase2TtlsAdapter;
// e.g. AccessPoint.SECURITY_NONE
@VisibleForTesting
@@ -145,8 +158,8 @@ public class WifiConfigController implements TextWatcher,
private Spinner mEapCaCertSpinner;
private TextView mEapDomainView;
private Spinner mPhase2Spinner;
// Associated with mPhase2Spinner, one of mPhase2FullAdapter or mPhase2PeapAdapter
private ArrayAdapter<String> mPhase2Adapter;
// Associated with mPhase2Spinner, one of mPhase2TtlsAdapter or mPhase2PeapAdapter
private ArrayAdapter<CharSequence> mPhase2Adapter;
private Spinner mEapUserCertSpinner;
private TextView mEapIdentityView;
private TextView mEapAnonymousView;
@@ -221,20 +234,20 @@ public class WifiConfigController implements TextWatcher,
mLevels = res.getStringArray(R.array.wifi_signal);
if (Utils.isWifiOnly(mContext) || !mContext.getResources().getBoolean(
com.android.internal.R.bool.config_eap_sim_based_auth_supported)) {
mPhase2PeapAdapter = new ArrayAdapter<String>(
mPhase2PeapAdapter = new ArrayAdapter<CharSequence>(
mContext, android.R.layout.simple_spinner_item,
res.getStringArray(R.array.wifi_peap_phase2_entries));
} else {
mPhase2PeapAdapter = new ArrayAdapter<String>(
mPhase2PeapAdapter = new ArrayAdapter<CharSequence>(
mContext, android.R.layout.simple_spinner_item,
res.getStringArray(R.array.wifi_peap_phase2_entries_with_sim_auth));
}
mPhase2PeapAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mPhase2FullAdapter = new ArrayAdapter<String>(
mPhase2TtlsAdapter = new ArrayAdapter<CharSequence>(
mContext, android.R.layout.simple_spinner_item,
res.getStringArray(R.array.wifi_phase2_entries));
mPhase2FullAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
res.getStringArray(R.array.wifi_ttls_phase2_entries));
mPhase2TtlsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mUnspecifiedCertString = mContext.getString(R.string.wifi_unspecified);
mMultipleCertSetString = mContext.getString(R.string.wifi_multiple_cert_added);
@@ -662,9 +675,6 @@ public class WifiConfigController implements TextWatcher,
// Map the index from the mPhase2PeapAdapter to the one used
// by the API which has the full list of PEAP methods.
switch(phase2Method) {
case WIFI_PEAP_PHASE2_NONE:
config.enterpriseConfig.setPhase2Method(Phase2.NONE);
break;
case WIFI_PEAP_PHASE2_MSCHAPV2:
config.enterpriseConfig.setPhase2Method(Phase2.MSCHAPV2);
break;
@@ -685,9 +695,27 @@ public class WifiConfigController implements TextWatcher,
break;
}
break;
case Eap.TTLS:
// The default index from mPhase2TtlsAdapter maps to the API
switch(phase2Method) {
case WIFI_TTLS_PHASE2_PAP:
config.enterpriseConfig.setPhase2Method(Phase2.PAP);
break;
case WIFI_TTLS_PHASE2_MSCHAP:
config.enterpriseConfig.setPhase2Method(Phase2.MSCHAP);
break;
case WIFI_TTLS_PHASE2_MSCHAPV2:
config.enterpriseConfig.setPhase2Method(Phase2.MSCHAPV2);
break;
case WIFI_TTLS_PHASE2_GTC:
config.enterpriseConfig.setPhase2Method(Phase2.GTC);
break;
default:
Log.e(TAG, "Unknown phase2 method" + phase2Method);
break;
}
break;
default:
// The default index from mPhase2FullAdapter maps to the API
config.enterpriseConfig.setPhase2Method(phase2Method);
break;
}
@@ -1024,9 +1052,6 @@ public class WifiConfigController implements TextWatcher,
switch (eapMethod) {
case Eap.PEAP:
switch (phase2Method) {
case Phase2.NONE:
mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_NONE);
break;
case Phase2.MSCHAPV2:
mPhase2Spinner.setSelection(WIFI_PEAP_PHASE2_MSCHAPV2);
break;
@@ -1047,8 +1072,26 @@ public class WifiConfigController implements TextWatcher,
break;
}
break;
case Eap.TTLS:
switch (phase2Method) {
case Phase2.PAP:
mPhase2Spinner.setSelection(WIFI_TTLS_PHASE2_PAP);
break;
case Phase2.MSCHAP:
mPhase2Spinner.setSelection(WIFI_TTLS_PHASE2_MSCHAP);
break;
case Phase2.MSCHAPV2:
mPhase2Spinner.setSelection(WIFI_TTLS_PHASE2_MSCHAPV2);
break;
case Phase2.GTC:
mPhase2Spinner.setSelection(WIFI_TTLS_PHASE2_GTC);
break;
default:
Log.e(TAG, "Invalid phase 2 method " + phase2Method);
break;
}
break;
default:
mPhase2Spinner.setSelection(phase2Method);
break;
}
if (!TextUtils.isEmpty(enterpriseConfig.getCaPath())) {
@@ -1146,8 +1189,8 @@ public class WifiConfigController implements TextWatcher,
break;
case WIFI_EAP_METHOD_TTLS:
// Reset adapter if needed
if (mPhase2Adapter != mPhase2FullAdapter) {
mPhase2Adapter = mPhase2FullAdapter;
if (mPhase2Adapter != mPhase2TtlsAdapter) {
mPhase2Adapter = mPhase2TtlsAdapter;
mPhase2Spinner.setAdapter(mPhase2Adapter);
}
mView.findViewById(R.id.l_phase2).setVisibility(View.VISIBLE);
@@ -1198,12 +1241,10 @@ public class WifiConfigController implements TextWatcher,
private void setIdentityInvisible() {
mView.findViewById(R.id.l_identity).setVisibility(View.GONE);
mPhase2Spinner.setSelection(Phase2.NONE);
}
private void setPhase2Invisible() {
mView.findViewById(R.id.l_phase2).setVisibility(View.GONE);
mPhase2Spinner.setSelection(Phase2.NONE);
}
private void setCaCertInvisible() {
@@ -1351,7 +1392,8 @@ public class WifiConfigController implements TextWatcher,
return KeyStore.getInstance();
}
private void loadCertificates(
@VisibleForTesting
void loadCertificates(
Spinner spinner,
String prefix,
String noCertificateString,
@@ -1367,12 +1409,24 @@ public class WifiConfigController implements TextWatcher,
if (showUsePreinstalledCertOption) {
certs.add(mUseSystemCertsString);
}
String[] certificateNames = null;
try {
certs.addAll(
Arrays.asList(getKeyStore().list(prefix, android.os.Process.WIFI_UID)));
certificateNames = getKeyStore().list(prefix, android.os.Process.WIFI_UID);
} catch (Exception e) {
Log.e(TAG, "can't get the certificate list from KeyStore");
}
if (certificateNames != null && certificateNames.length != 0) {
certs.addAll(Arrays.stream(certificateNames)
.filter(certificateName -> {
for (String undesired : UNDESIRED_CERTIFICATES) {
if (certificateName.startsWith(undesired)) {
return false;
}
}
return true;
}).collect(Collectors.toList()));
}
if (mAccessPointSecurity != AccessPoint.SECURITY_EAP_SUITE_B) {
certs.add(noCertificateString);