Merge "Update subtext for require unlock for NFC" into sc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8b1a6b3..b548f44 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2847,6 +2847,10 @@
<string name="adaptive_sleep_contextual_slice_title">Turn on screen attention</string>
<!-- Description about the contextual adaptive sleep card [CHAR LIMIT=NONE]-->
<string name="adaptive_sleep_contextual_slice_summary">Keep screen on when looking at it</string>
+ <!-- auto_rotate settings screen, title about the required permission is missing [CHAR LIMIT=NONE]-->
+ <string name="auto_rotate_summary_no_permission">Camera access is required for Face Detection. Tap to manage permissions for Device Personalization Services</string>
+ <!-- auto_rotate settings screen, text for the camera permission button [CHAR LIMIT=NONE]-->
+ <string name="auto_rotate_manage_permission_button">Manage permissions</string>
<!-- Night display screen, setting option name to enable night display (renamed "Night Light" with title caps). [CHAR LIMIT=30] -->
<string name="night_display_title">Night Light</string>
diff --git a/res/xml/auto_rotate_settings.xml b/res/xml/auto_rotate_settings.xml
index a316b8f..7c46d29 100644
--- a/res/xml/auto_rotate_settings.xml
+++ b/res/xml/auto_rotate_settings.xml
@@ -20,11 +20,10 @@
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/accelerometer_title" >
- <Preference
+ <com.android.settingslib.widget.BannerMessagePreference
android:key="face_rotate_permission"
android:title="@string/adaptive_sleep_title_no_permission"
- android:summary="@string/adaptive_sleep_summary_no_permission"
- android:icon="@drawable/ic_info_outline_24"
+ android:summary="@string/auto_rotate_summary_no_permission"
settings:controller="com.android.settings.display.SmartAutoRotatePermissionController" />
<SwitchPreference
diff --git a/src/com/android/settings/datausage/OWNERS b/src/com/android/settings/datausage/OWNERS
index 1ec66b3..d71b165 100644
--- a/src/com/android/settings/datausage/OWNERS
+++ b/src/com/android/settings/datausage/OWNERS
@@ -1,6 +1,7 @@
# Default reviewers for this and subdirectories.
andychou@google.com
bonianchen@google.com
+changbetty@google.com
goldmanj@google.com
songferngwang@google.com
wengsu@google.com
diff --git a/src/com/android/settings/development/AdbIpAddressPreferenceController.java b/src/com/android/settings/development/AdbIpAddressPreferenceController.java
index dbc329e..45fe51b 100644
--- a/src/com/android/settings/development/AdbIpAddressPreferenceController.java
+++ b/src/com/android/settings/development/AdbIpAddressPreferenceController.java
@@ -126,7 +126,7 @@
* @return the formatted and newline-separated IP addresses, or null if none.
*/
private static String getDefaultIpAddresses(ConnectivityManager cm) {
- LinkProperties prop = cm.getActiveLinkProperties();
+ LinkProperties prop = cm.getLinkProperties(cm.getActiveNetwork());
return formatIpAddresses(prop);
}
diff --git a/src/com/android/settings/display/SmartAutoRotatePermissionController.java b/src/com/android/settings/display/SmartAutoRotatePermissionController.java
index 484db31..caa306d 100644
--- a/src/com/android/settings/display/SmartAutoRotatePermissionController.java
+++ b/src/com/android/settings/display/SmartAutoRotatePermissionController.java
@@ -22,11 +22,12 @@
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
-import android.text.TextUtils;
-import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.widget.BannerMessagePreference;
/**
* The controller of camera based rotate permission warning preference. The preference appears when
@@ -45,19 +46,22 @@
}
@Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final BannerMessagePreference preference =
+ (BannerMessagePreference) screen.findPreference(getPreferenceKey());
+ preference
+ .setPositiveButtonText(R.string.auto_rotate_manage_permission_button)
+ .setPositiveButtonOnClickListener(v -> {
+ mContext.startActivity(mIntent);
+ });
+ }
+
+ @Override
@AvailabilityStatus
public int getAvailabilityStatus() {
return isRotationResolverServiceAvailable(mContext) && !hasSufficientPermission(mContext)
? AVAILABLE_UNSEARCHABLE
: UNSUPPORTED_ON_DEVICE;
}
-
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- if (TextUtils.equals(getPreferenceKey(), preference.getKey())) {
- mContext.startActivity(mIntent);
- return true;
- }
- return super.handlePreferenceTreeClick(preference);
- }
}
diff --git a/src/com/android/settings/display/SmartAutoRotatePreferenceController.java b/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
index 01c8379..0e2e013 100644
--- a/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
+++ b/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
@@ -21,7 +21,6 @@
import android.content.Context;
import android.os.UserHandle;
import android.provider.Settings;
-import android.util.Log;
import androidx.preference.Preference;
@@ -34,8 +33,6 @@
*/
public class SmartAutoRotatePreferenceController extends BasePreferenceController {
- private static final String TAG = "SmartAutoRotatePreferenceController";
-
public SmartAutoRotatePreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
}
@@ -54,16 +51,12 @@
public CharSequence getSummary() {
int activeStringId = R.string.auto_rotate_option_off;
if (!RotationPolicy.isRotationLocked(mContext)) {
- try {
- final int cameraRotate = Settings.Secure.getIntForUser(
- mContext.getContentResolver(),
- CAMERA_AUTOROTATE,
- UserHandle.USER_CURRENT);
- activeStringId = cameraRotate == 1 ? R.string.auto_rotate_option_face_based
- : R.string.auto_rotate_option_on;
- } catch (Settings.SettingNotFoundException e) {
- Log.w(TAG, "CAMERA_AUTOROTATE setting not found", e);
- }
+ final int cameraRotate = Settings.Secure.getIntForUser(
+ mContext.getContentResolver(),
+ CAMERA_AUTOROTATE,
+ 0, UserHandle.USER_CURRENT);
+ activeStringId = cameraRotate == 1 ? R.string.auto_rotate_option_face_based
+ : R.string.auto_rotate_option_on;
}
return mContext.getString(activeStringId);
}
diff --git a/src/com/android/settings/network/OWNERS b/src/com/android/settings/network/OWNERS
index 8b16bc9..ee5b494 100644
--- a/src/com/android/settings/network/OWNERS
+++ b/src/com/android/settings/network/OWNERS
@@ -2,6 +2,7 @@
allenwtsu@google.com
andychou@google.com
bonianchen@google.com
+changbetty@google.com
goldmanj@google.com
leechou@google.com
songferngwang@google.com
diff --git a/src/com/android/settings/security/CredentialManagementAppButtonsController.java b/src/com/android/settings/security/CredentialManagementAppButtonsController.java
index c6afded..fe5e45b 100644
--- a/src/com/android/settings/security/CredentialManagementAppButtonsController.java
+++ b/src/com/android/settings/security/CredentialManagementAppButtonsController.java
@@ -16,11 +16,8 @@
package com.android.settings.security;
-import android.app.AppOpsManager;
import android.app.admin.DevicePolicyEventLogger;
import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Looper;
import android.os.RemoteException;
@@ -29,6 +26,7 @@
import android.stats.devicepolicy.DevicePolicyEnums;
import android.util.Log;
+import androidx.fragment.app.Fragment;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
@@ -48,16 +46,15 @@
private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
private final Handler mHandler = new Handler(Looper.getMainLooper());
-
- private final PackageManager mPackageManager;
- private final AppOpsManager mAppOpsManager;
private boolean mHasCredentialManagerPackage;
- private String mCredentialManagerPackageName;
+ private Fragment mFragment;
public CredentialManagementAppButtonsController(Context context, String preferenceKey) {
super(context, preferenceKey);
- mPackageManager = context.getPackageManager();
- mAppOpsManager = context.getSystemService(AppOpsManager.class);
+ }
+
+ public void setParentFragment(Fragment fragment) {
+ mFragment = fragment;
}
@Override
@@ -73,7 +70,6 @@
try {
IKeyChainService service = KeyChain.bind(mContext).getService();
mHasCredentialManagerPackage = service.hasCredentialManagementApp();
- mCredentialManagerPackageName = service.getCredentialManagementAppPackageName();
} catch (InterruptedException | RemoteException e) {
Log.e(TAG, "Unable to display credential management app buttons");
}
@@ -91,24 +87,17 @@
}
private void removeCredentialManagementApp() {
- try {
- ApplicationInfo appInfo = mPackageManager.getApplicationInfo(
- mCredentialManagerPackageName, 0);
- mAppOpsManager.setMode(AppOpsManager.OP_MANAGE_CREDENTIALS,
- appInfo.uid, mCredentialManagerPackageName, AppOpsManager.MODE_DEFAULT);
- mExecutor.execute(() -> {
- try {
- IKeyChainService service = KeyChain.bind(mContext).getService();
- service.removeCredentialManagementApp();
- DevicePolicyEventLogger
- .createEvent(DevicePolicyEnums.CREDENTIAL_MANAGEMENT_APP_REMOVED)
- .write();
- } catch (InterruptedException | RemoteException e) {
- Log.e(TAG, "Unable to remove the credential management app");
- }
- });
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(TAG, "Unable to remove the credential management app");
- }
+ mExecutor.execute(() -> {
+ try {
+ IKeyChainService service = KeyChain.bind(mContext).getService();
+ service.removeCredentialManagementApp();
+ DevicePolicyEventLogger
+ .createEvent(DevicePolicyEnums.CREDENTIAL_MANAGEMENT_APP_REMOVED)
+ .write();
+ mFragment.getActivity().finish();
+ } catch (InterruptedException | RemoteException e) {
+ Log.e(TAG, "Unable to remove the credential management app");
+ }
+ });
}
}
diff --git a/src/com/android/settings/security/CredentialManagementAppFragment.java b/src/com/android/settings/security/CredentialManagementAppFragment.java
index 5544ee6..74ce003 100644
--- a/src/com/android/settings/security/CredentialManagementAppFragment.java
+++ b/src/com/android/settings/security/CredentialManagementAppFragment.java
@@ -17,6 +17,7 @@
package com.android.settings.security;
import android.app.settings.SettingsEnums;
+import android.content.Context;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
@@ -47,6 +48,12 @@
return SettingsEnums.CREDENTIAL_MANAGEMENT_APP;
}
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ use(CredentialManagementAppButtonsController.class).setParentFragment(this);
+ }
+
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.credential_management_app_fragment);
}
diff --git a/src/com/android/settings/wifi/OWNERS b/src/com/android/settings/wifi/OWNERS
index d15cd78..7f39cc7 100644
--- a/src/com/android/settings/wifi/OWNERS
+++ b/src/com/android/settings/wifi/OWNERS
@@ -1,6 +1,7 @@
# Default reviewers for this and subdirectories.
andychou@google.com
arcwang@google.com
+changbetty@google.com
goldmanj@google.com
songferngwang@google.com
wengsu@google.com
diff --git a/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java
index b65785f..cc3b20d 100644
--- a/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceControllerTest.java
@@ -108,6 +108,25 @@
}
@Test
+ public void updatePreference_settingsIsOff_noSmartAuto_shouldTurnOffToggle() {
+ disableAutoRotation();
+ Settings.Secure.putStringForUser(mContentResolver,
+ CAMERA_AUTOROTATE, null, UserHandle.USER_CURRENT);
+
+ assertThat(mController.getSummary()).isEqualTo("Off");
+
+ }
+
+ @Test
+ public void updatePreference_settingsIsOn_noSmartAuto_shouldTurnOnToggle() {
+ enableAutoRotation();
+ Settings.Secure.putStringForUser(mContentResolver,
+ CAMERA_AUTOROTATE, null, UserHandle.USER_CURRENT);
+
+ assertThat(mController.getSummary()).isEqualTo("On");
+ }
+
+ @Test
public void testGetAvailabilityStatus() {
assertThat(mController.getAvailabilityStatus()).isEqualTo(BasePreferenceController
.UNSUPPORTED_ON_DEVICE);