From 8aa523f18df1ddff586d2f051b49abbe5d1ea050 Mon Sep 17 00:00:00 2001 From: Michael Groover Date: Wed, 30 Jan 2019 13:14:56 -0800 Subject: [PATCH 01/11] Add developer option for device identifier restrictions Bug: 123646983 Test: Manually verified device_config switch was toggled via the new developer option. Change-Id: I6a4e2d1f7bfdaae402e594e7ebc1b845bf12996e --- res/values/strings.xml | 4 ++ res/xml/development_settings.xml | 5 ++ .../DevelopmentSettingsDashboardFragment.java | 1 + ...ccessRestrictionsPreferenceController.java | 70 +++++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 src/com/android/settings/development/DeviceIdentifierAccessRestrictionsPreferenceController.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 10f9ade0d46..3f9bd20e056 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -5830,6 +5830,10 @@ Restrict SMS & call log access Only default phone and messaging apps have SMS & call log permissions + + Enable device identifier restrictions + + Enable the new access restrictions for device identifiers. diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml index 9b43723b10f..31652e50543 100644 --- a/res/xml/development_settings.xml +++ b/res/xml/development_settings.xml @@ -534,6 +534,11 @@ android:key="sms_access_restriction_enabled" android:title="@string/sms_access_restriction_enabled" android:summary="@string/sms_access_restriction_enabled_summary" /> + + Date: Wed, 30 Jan 2019 11:22:45 -0800 Subject: [PATCH 02/11] Use correct uid when querying usage data for specific user. - the data usage list shows usage data for each app, and also the aggregated data for work apps and other user. When user clicks on the app item, we will shows the detail usage data for that item using the app item key. However, if the app item is not for app but for user, the key will not be the app uid, but a key built from the user id. So, querying using the key will not get any data. - for app item corresponding for user, need to sum up all usage data for the uids associated with the user. Change-Id: I1a185ee6b4d59e477f3a03cade97d85d6982e416 Fixes: 122200400 Test: make RunSettingsRoboTests --- .../AppDataUsagePreferenceController.java | 2 +- .../settings/datausage/AppDataUsage.java | 40 ++++++++----- .../settings/datausage/AppDataUsageTest.java | 58 ++++++++++++++++++- 3 files changed, 81 insertions(+), 19 deletions(-) diff --git a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java index 1bfcd7d2b92..7d9fdcf75ad 100644 --- a/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java @@ -89,7 +89,7 @@ public class AppDataUsagePreferenceController extends AppInfoPreferenceControlle public Loader> onCreateLoader(int id, Bundle args) { final NetworkTemplate template = getTemplate(mContext); return NetworkCycleDataForUidLoader.builder(mContext) - .setUid(mParent.getAppEntry().info.uid) + .addUid(mParent.getAppEntry().info.uid) .setRetrieveDetail(false) .setNetworkTemplate(template) .setSubscriberId(template.getSubscriberId()) diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java index 329bf68fe6a..4f388436474 100644 --- a/src/com/android/settings/datausage/AppDataUsage.java +++ b/src/com/android/settings/datausage/AppDataUsage.java @@ -94,10 +94,12 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC private SpinnerPreference mCycle; private RestrictedSwitchPreference mUnrestrictedData; private DataSaverBackend mDataSaverBackend; + private Context mContext; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); + mContext = getContext(); mPackageManager = getPackageManager(); final Bundle args = getArguments(); @@ -105,9 +107,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC mTemplate = (args != null) ? (NetworkTemplate) args.getParcelable(ARG_NETWORK_TEMPLATE) : null; if (mTemplate == null) { - Context context = getContext(); - mTemplate = DataUsageUtils.getDefaultTemplate(context, - DataUsageUtils.getDefaultSubscriptionId(context)); + mTemplate = DataUsageUtils.getDefaultTemplate(mContext, + DataUsageUtils.getDefaultSubscriptionId(mContext)); } if (mAppItem == null) { int uid = (args != null) ? args.getInt(AppInfoBase.ARG_PACKAGE_UID, -1) @@ -131,7 +132,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC mBackgroundUsage = findPreference(KEY_BACKGROUND_USAGE); mCycle = (SpinnerPreference) findPreference(KEY_CYCLE); - mCycleAdapter = new CycleAdapter(getContext(), mCycle, mCycleListener); + mCycleAdapter = new CycleAdapter(mContext, mCycle, mCycleListener); if (mAppItem.key > 0) { if (mPackages.size() != 0) { @@ -155,7 +156,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC KEY_UNRESTRICTED_DATA); mUnrestrictedData.setOnPreferenceChangeListener(this); } - mDataSaverBackend = new DataSaverBackend(getContext()); + mDataSaverBackend = new DataSaverBackend(mContext); mAppSettings = findPreference(KEY_APP_SETTINGS); mAppSettingsIntent = new Intent(Intent.ACTION_MANAGE_NETWORK_USAGE); @@ -256,7 +257,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC private void updatePrefs(boolean restrictBackground, boolean unrestrictData) { final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMeteredDataRestricted( - getContext(), mPackageName, UserHandle.getUserId(mAppItem.key)); + mContext, mPackageName, UserHandle.getUserId(mAppItem.key)); if (mRestrictBackground != null) { mRestrictBackground.setChecked(!restrictBackground); mRestrictBackground.setDisabledByAdmin(admin); @@ -294,11 +295,10 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC foregroundBytes = data.getForegroudUsage(); } final long totalBytes = backgroundBytes + foregroundBytes; - final Context context = getContext(); - mTotalUsage.setSummary(DataUsageUtils.formatDataUsage(context, totalBytes)); - mForegroundUsage.setSummary(DataUsageUtils.formatDataUsage(context, foregroundBytes)); - mBackgroundUsage.setSummary(DataUsageUtils.formatDataUsage(context, backgroundBytes)); + mTotalUsage.setSummary(DataUsageUtils.formatDataUsage(mContext, totalBytes)); + mForegroundUsage.setSummary(DataUsageUtils.formatDataUsage(mContext, foregroundBytes)); + mBackgroundUsage.setSummary(DataUsageUtils.formatDataUsage(mContext, backgroundBytes)); } private boolean getAppRestrictBackground() { @@ -364,16 +364,24 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC } }; - private final LoaderManager.LoaderCallbacks> mUidDataCallbacks = + @VisibleForTesting + final LoaderManager.LoaderCallbacks> mUidDataCallbacks = new LoaderManager.LoaderCallbacks>() { @Override public Loader> onCreateLoader(int id, Bundle args) { - return NetworkCycleDataForUidLoader.builder(getContext()) - .setUid(mAppItem.key) - .setRetrieveDetail(true) + final NetworkCycleDataForUidLoader.Builder builder + = NetworkCycleDataForUidLoader.builder(mContext); + builder.setRetrieveDetail(true) .setNetworkTemplate(mTemplate) - .setSubscriberId(mTemplate.getSubscriberId()) - .build(); + .setSubscriberId(mTemplate.getSubscriberId()); + if (mAppItem.category == AppItem.CATEGORY_USER) { + for (int i = 0; i < mAppItem.uids.size(); i++) { + builder.addUid(mAppItem.uids.keyAt(i)); + } + } else { + builder.addUid(mAppItem.key); + } + return builder.build(); } @Override diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java index 37bb3cdfbc5..12559f4c637 100644 --- a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java +++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java @@ -16,6 +16,8 @@ package com.android.settings.datausage; +import static com.google.common.truth.Truth.assertThat; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; @@ -31,7 +33,9 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.PackageManager; import android.net.NetworkPolicyManager; +import android.net.NetworkTemplate; import android.os.Bundle; +import android.text.format.DateUtils; import android.util.ArraySet; import android.view.View; @@ -47,6 +51,7 @@ import com.android.settingslib.AppItem; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.net.NetworkCycleDataForUid; +import com.android.settingslib.net.NetworkCycleDataForUidLoader; import org.junit.After; import org.junit.Before; @@ -188,7 +193,7 @@ public class AppDataUsageTest { ReflectionHelpers.setField(mFragment, "mBackgroundUsage", preference); ReflectionHelpers.setField(mFragment, "mForegroundUsage", preference); ReflectionHelpers.setField(mFragment, "mTotalUsage", preference); - doReturn(RuntimeEnvironment.application).when(mFragment).getContext(); + ReflectionHelpers.setField(mFragment, "mContext", RuntimeEnvironment.application); mFragment.bindData(0 /* position */); @@ -199,7 +204,7 @@ public class AppDataUsageTest { public void bindData_hasAppUsageData_shouldShowCycleSpinnerAndUpdateUsageSummary() { mFragment = spy(new AppDataUsage()); final Context context = RuntimeEnvironment.application; - doReturn(context).when(mFragment).getContext(); + ReflectionHelpers.setField(mFragment, "mContext", context); final long backgroundBytes = 1234L; final long foregroundBytes = 5678L; final List appUsage = new ArrayList<>(); @@ -223,4 +228,53 @@ public class AppDataUsageTest { verify(backgroundPref).setSummary(DataUsageUtils.formatDataUsage(context, backgroundBytes)); verify(foregroundPref).setSummary(DataUsageUtils.formatDataUsage(context, foregroundBytes)); } + + @Test + public void onCreateLoader_categoryApp_shouldQueryDataUsageUsingAppKey() { + mFragment = new AppDataUsage(); + final Context context = RuntimeEnvironment.application; + final int testUid = 123123; + final AppItem appItem = new AppItem(testUid); + appItem.category = AppItem.CATEGORY_APP; + ReflectionHelpers.setField(mFragment, "mContext", context); + ReflectionHelpers.setField(mFragment, "mAppItem", appItem); + ReflectionHelpers.setField(mFragment, "mTemplate", + NetworkTemplate.buildTemplateWifiWildcard()); + final long end = System.currentTimeMillis(); + final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); + + final NetworkCycleDataForUidLoader loader = (NetworkCycleDataForUidLoader) + mFragment.mUidDataCallbacks.onCreateLoader(0, Bundle.EMPTY); + + final List uids = loader.getUids(); + assertThat(uids).hasSize(1); + assertThat(uids.get(0)).isEqualTo(testUid); + } + + @Test + public void onCreateLoader_categoryUser_shouldQueryDataUsageUsingAssociatedUids() { + mFragment = new AppDataUsage(); + final Context context = RuntimeEnvironment.application; + final int testUserId = 11; + final AppItem appItem = new AppItem(testUserId); + appItem.category = AppItem.CATEGORY_USER; + appItem.addUid(123); + appItem.addUid(456); + appItem.addUid(789); + ReflectionHelpers.setField(mFragment, "mContext", context); + ReflectionHelpers.setField(mFragment, "mAppItem", appItem); + ReflectionHelpers.setField(mFragment, "mTemplate", + NetworkTemplate.buildTemplateWifiWildcard()); + final long end = System.currentTimeMillis(); + final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); + + final NetworkCycleDataForUidLoader loader = (NetworkCycleDataForUidLoader) + mFragment.mUidDataCallbacks.onCreateLoader(0, Bundle.EMPTY); + + final List uids = loader.getUids(); + assertThat(uids).hasSize(3); + assertThat(uids.get(0)).isEqualTo(123); + assertThat(uids.get(1)).isEqualTo(456); + assertThat(uids.get(2)).isEqualTo(789); + } } From 6bf75d288d3532eba2f68cb21f4e51d1d6c86893 Mon Sep 17 00:00:00 2001 From: Joel Galenson Date: Thu, 24 Jan 2019 08:14:09 -0800 Subject: [PATCH 03/11] Check a flag to see whether or not to show permission usage information. Bug: 122615235 Test: Manually set/unset flag, see/don't see usage information. Change-Id: I2d743fc28c5676a2304dac73ae96734241f3fe1d --- res/xml/location_settings.xml | 2 +- ...entLocationAccessPreferenceController.java | 5 +++- ...ermissionBarChartPreferenceController.java | 6 ++++- ...ocationAccessPreferenceControllerTest.java | 24 +++++++++++++++++++ ...ssionBarChartPreferenceControllerTest.java | 22 ++++++++++++++++- .../testutils/shadow/ShadowDeviceConfig.java | 21 ++++++++++++---- 6 files changed, 71 insertions(+), 9 deletions(-) diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml index 72ea3122eb7..29d4048c22f 100644 --- a/res/xml/location_settings.xml +++ b/res/xml/location_settings.xml @@ -28,7 +28,7 @@ + settings:initialExpandedChildrenCount="2"> sPropertyMaps = new HashMap<>(); + + @Resetter + public static void reset() { + sPropertyMaps.clear(); + } @Implementation - protected static boolean setProperty( - String namespace, String name, String value, boolean makeDefault) { - configValue = value; + public static boolean setProperty( + String namespace, String name, String value, boolean makeDefault) { + sPropertyMaps.put(name, value); return true; } @Implementation - protected static String getProperty(String ns, String key) { return configValue; } + public static String getProperty(String namespace, String name) { + return sPropertyMaps.get(name); + } } From d6f1b59c93c87a6b4d74f6e9c9ed0d8550ed11d3 Mon Sep 17 00:00:00 2001 From: Stanley Tng Date: Fri, 1 Feb 2019 18:16:30 -0800 Subject: [PATCH 04/11] Update the Hearing Aids Strings Minor update to the Hearing Aids string by making it plural and also remove a redundant word "currently". Bug: 121036176 Test: Compile Change-Id: I829b8028408f5d07d950580bd4d90ca41bd334f3 --- res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index cacd26b2bf6..aa77e6314b1 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -4596,13 +4596,13 @@ No hearing aids connected - Add hearing aid + Add hearing aids To pair your hearing aids, find and tap your device on the next screen. Make sure your hearing aids are in pairing mode. - %1$s currently active + %1$s active %1$d saved hearing aid From 646dda9b2c2918df718a6e3e7e89f4bc305b9ed5 Mon Sep 17 00:00:00 2001 From: Stanislav Zholnin Date: Fri, 1 Feb 2019 13:00:37 +0000 Subject: [PATCH 05/11] Add READ_DEVICE_CONFIG permission to allow use of DeviceConfig API when permission checks will be introduced. Test: tested locally with permission checks patched. Change-Id: I8d6b99edac1c23f27872c0a9ecc99a00db017124 --- AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index b4579771762..dccd1d03bcc 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -57,6 +57,7 @@ + From e59a5102aba5d0c660e42033cdc8a3fe495cb4f9 Mon Sep 17 00:00:00 2001 From: Joel Galenson Date: Mon, 4 Feb 2019 08:00:28 -0800 Subject: [PATCH 06/11] Show permission group icons in dark mode. Apply the proper tint so that the permission group icons appear in dark mode. Change-Id: Ief36e69ed8ae70608f1df79a0e2a17eb79b9f467 Fixes: 123750886 Test: Can see icons in light and dark mode. --- .../privacy/PermissionBarChartPreferenceController.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java b/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java index e43140f0ef8..daec48abc3b 100644 --- a/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java +++ b/src/com/android/settings/privacy/PermissionBarChartPreferenceController.java @@ -38,6 +38,7 @@ import com.android.settings.core.BasePreferenceController; import com.android.settingslib.widget.BarChartInfo; import com.android.settingslib.widget.BarChartPreference; import com.android.settingslib.widget.BarViewInfo; +import com.android.settingslib.Utils; import java.util.ArrayList; import java.util.Comparator; @@ -143,6 +144,7 @@ public class PermissionBarChartPreferenceController extends BasePreferenceContro try { icon = mPackageManager.getPermissionGroupInfo(permissionGroup.toString(), 0) .loadIcon(mPackageManager); + icon.setTintList(Utils.getColorAttr(mContext, android.R.attr.textColorSecondary)); } catch (PackageManager.NameNotFoundException e) { Log.w(TAG, "Cannot find group icon for " + permissionGroup, e); } From e2815e033d6b398deaccb336c4b232ff22e0c81e Mon Sep 17 00:00:00 2001 From: Amin Shaikh Date: Mon, 4 Feb 2019 14:54:41 -0500 Subject: [PATCH 07/11] Remove duplicate ic_menu_add_white. Bug: 123829919 Test: mp settingsg Change-Id: I88e0dde22762eb6bc019361222ffe783b1c15133 --- res/drawable/ic_menu_add_white.xml | 28 ------------------- res/menu/vpn.xml | 2 +- .../inputmethod/UserDictionarySettings.java | 2 +- .../android/settings/network/ApnSettings.java | 2 +- 4 files changed, 3 insertions(+), 31 deletions(-) delete mode 100644 res/drawable/ic_menu_add_white.xml diff --git a/res/drawable/ic_menu_add_white.xml b/res/drawable/ic_menu_add_white.xml deleted file mode 100644 index 25a8ff0fd1a..00000000000 --- a/res/drawable/ic_menu_add_white.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - diff --git a/res/menu/vpn.xml b/res/menu/vpn.xml index 7b35c702f43..a3b8090f8d9 100644 --- a/res/menu/vpn.xml +++ b/res/menu/vpn.xml @@ -18,6 +18,6 @@ diff --git a/src/com/android/settings/inputmethod/UserDictionarySettings.java b/src/com/android/settings/inputmethod/UserDictionarySettings.java index eccfb3c64fc..c8fb625edd1 100644 --- a/src/com/android/settings/inputmethod/UserDictionarySettings.java +++ b/src/com/android/settings/inputmethod/UserDictionarySettings.java @@ -154,7 +154,7 @@ public class UserDictionarySettings extends ListFragment implements Instrumentab public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { MenuItem actionItem = menu.add(0, OPTIONS_MENU_ADD, 0, R.string.user_dict_settings_add_menu_title) - .setIcon(R.drawable.ic_menu_add_white); + .setIcon(R.drawable.ic_menu_add); actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); } diff --git a/src/com/android/settings/network/ApnSettings.java b/src/com/android/settings/network/ApnSettings.java index 174257b027b..c397600654d 100755 --- a/src/com/android/settings/network/ApnSettings.java +++ b/src/com/android/settings/network/ApnSettings.java @@ -351,7 +351,7 @@ public class ApnSettings extends RestrictedSettingsFragment if (mAllowAddingApns) { menu.add(0, MENU_NEW, 0, getResources().getString(R.string.menu_new)) - .setIcon(R.drawable.ic_menu_add_white) + .setIcon(R.drawable.ic_menu_add) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); } menu.add(0, MENU_RESTORE, 0, From 8f53ad0f3785cd7bfda0ad2bed84351f21f93301 Mon Sep 17 00:00:00 2001 From: Vishwath Mohan Date: Sat, 2 Feb 2019 11:18:30 -0800 Subject: [PATCH 08/11] Move trust agent toggles to developer options This CL moves two toggles for trust agent extend unlock mode from Security > Settings to Developer Options instead. It also updates some of the configuration strings to reflect that this toggles behavior for trust agents in general. No new logic is being added here, this simply moves options intended only for internal dogfooding to a more appropriate location in preparation for the public Beta. Bug: 111435975 Bug: 120871688 Test: Manually verified that the settings show up in Developer Options and work as intended. Change-Id: I2b6705d50fa783089a5c0dfabf76677af44209f7 --- res/values/strings.xml | 4 +- res/xml/development_settings.xml | 11 ++++ res/xml/screen_lock_settings.xml | 13 ----- .../DevelopmentSettingsDashboardFragment.java | 2 + ...gentsExtendUnlockPreferenceController.java | 58 +++++++++++++++++++ ...stLostLocksScreenPreferenceController.java | 58 +++++++++++++++++++ ...gentsExtendUnlockPreferenceController.java | 47 --------------- ...stLostLocksScreenPreferenceController.java | 47 --------------- 8 files changed, 131 insertions(+), 109 deletions(-) create mode 100644 src/com/android/settings/development/TrustAgentsExtendUnlockPreferenceController.java create mode 100644 src/com/android/settings/development/TrustLostLocksScreenPreferenceController.java delete mode 100644 src/com/android/settings/security/trustagent/TrustAgentsExtendUnlockPreferenceController.java delete mode 100644 src/com/android/settings/security/trustagent/TrustLostLocksScreenPreferenceController.java diff --git a/res/values/strings.xml b/res/values/strings.xml index ab52c5cfb19..57cd5c4939f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -820,9 +820,9 @@ Display power button option that turns off Smart Lock, fingerprint unlocking, and notifications on the lock screen - SmartLock only extends unlock + Trust agents only extend unlock - If enabled, SmartLock will keep your device unlocked for longer, but can no longer unlock a locked device. + If enabled, trust agents will keep your device unlocked for longer, but can no longer unlock a locked device. Lock screen when trust is lost diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml index d7fcaec3169..b9e809c3a69 100644 --- a/res/xml/development_settings.xml +++ b/res/xml/development_settings.xml @@ -114,6 +114,17 @@ android:key="quick_settings_tiles" android:title="@string/quick_settings_developer_tiles" android:fragment="com.android.settings.development.qstile.DevelopmentTileConfigFragment" /> + + + + + - - - - - diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java index 5135fbf61fc..48597c64846 100644 --- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java +++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java @@ -497,6 +497,8 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra "android.theme.customization.font")); controllers.add(new OverlayCategoryPreferenceController(context, "android.theme.customization.adaptive_icon_shape")); + controllers.add(new TrustAgentsExtendUnlockPreferenceController(context)); + controllers.add(new TrustLostLocksScreenPreferenceController(context)); return controllers; } diff --git a/src/com/android/settings/development/TrustAgentsExtendUnlockPreferenceController.java b/src/com/android/settings/development/TrustAgentsExtendUnlockPreferenceController.java new file mode 100644 index 00000000000..0834f9b96e2 --- /dev/null +++ b/src/com/android/settings/development/TrustAgentsExtendUnlockPreferenceController.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2018 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.development; + +import android.content.Context; +import android.provider.Settings; + +import androidx.preference.Preference; +import androidx.preference.SwitchPreference; + +import com.android.settings.core.PreferenceControllerMixin; +import com.android.settingslib.development.DeveloperOptionsPreferenceController; + +public class TrustAgentsExtendUnlockPreferenceController extends + DeveloperOptionsPreferenceController implements + Preference.OnPreferenceChangeListener, PreferenceControllerMixin { + + private static final String KEY_TRUST_AGENTS_EXTEND_UNLOCK = + "security_setting_trust_agents_extend_unlock"; + + public TrustAgentsExtendUnlockPreferenceController(Context context) { + super(context); + } + + @Override + public String getPreferenceKey() { + return KEY_TRUST_AGENTS_EXTEND_UNLOCK; + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + final boolean isEnabled = (Boolean) newValue; + Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.TRUST_AGENTS_EXTEND_UNLOCK, isEnabled ? 1 : 0); + return true; + } + + @Override + public void updateState(Preference preference) { + int trustAgentsExtendUnlock = Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.TRUST_AGENTS_EXTEND_UNLOCK, 0); + ((SwitchPreference) mPreference).setChecked(trustAgentsExtendUnlock != 0); + } +} diff --git a/src/com/android/settings/development/TrustLostLocksScreenPreferenceController.java b/src/com/android/settings/development/TrustLostLocksScreenPreferenceController.java new file mode 100644 index 00000000000..3800fd6b881 --- /dev/null +++ b/src/com/android/settings/development/TrustLostLocksScreenPreferenceController.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2018 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.development; + +import android.content.Context; +import android.provider.Settings; + +import androidx.preference.Preference; +import androidx.preference.SwitchPreference; + +import com.android.settings.core.PreferenceControllerMixin; +import com.android.settingslib.development.DeveloperOptionsPreferenceController; + +public class TrustLostLocksScreenPreferenceController + extends DeveloperOptionsPreferenceController implements + Preference.OnPreferenceChangeListener, PreferenceControllerMixin { + + private static final String KEY_TRUST_LOST_LOCKS_SCREEN = + "security_setting_trust_lost_locks_screen"; + + public TrustLostLocksScreenPreferenceController(Context context) { + super(context); + } + + @Override + public String getPreferenceKey() { + return KEY_TRUST_LOST_LOCKS_SCREEN; + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + final boolean isEnabled = (Boolean) newValue; + Settings.Secure.putInt(mContext.getContentResolver(), + Settings.Secure.LOCK_SCREEN_WHEN_TRUST_LOST, isEnabled ? 1 : 0); + return true; + } + + @Override + public void updateState(Preference preference) { + int lockOnTrustLost = Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.LOCK_SCREEN_WHEN_TRUST_LOST, 0); + ((SwitchPreference) mPreference).setChecked(lockOnTrustLost != 0); + } +} diff --git a/src/com/android/settings/security/trustagent/TrustAgentsExtendUnlockPreferenceController.java b/src/com/android/settings/security/trustagent/TrustAgentsExtendUnlockPreferenceController.java deleted file mode 100644 index 036e07f6dc2..00000000000 --- a/src/com/android/settings/security/trustagent/TrustAgentsExtendUnlockPreferenceController.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2018 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.security.trustagent; - -import android.content.Context; -import android.provider.Settings; - -import com.android.settings.core.TogglePreferenceController; - -public class TrustAgentsExtendUnlockPreferenceController extends TogglePreferenceController { - - public TrustAgentsExtendUnlockPreferenceController(Context context, String key) { - super(context, key); - } - - @Override - public int getAvailabilityStatus() { - return AVAILABLE; - } - - @Override - public boolean isChecked() { - return Settings.Secure.getInt(mContext.getContentResolver(), - Settings.Secure.TRUST_AGENTS_EXTEND_UNLOCK, 1) == 1; - } - - @Override - public boolean setChecked(boolean isChecked) { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.TRUST_AGENTS_EXTEND_UNLOCK, isChecked ? 1 : 0); - return true; - } -} diff --git a/src/com/android/settings/security/trustagent/TrustLostLocksScreenPreferenceController.java b/src/com/android/settings/security/trustagent/TrustLostLocksScreenPreferenceController.java deleted file mode 100644 index e0c516891e3..00000000000 --- a/src/com/android/settings/security/trustagent/TrustLostLocksScreenPreferenceController.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2018 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.security.trustagent; - -import android.content.Context; -import android.provider.Settings; - -import com.android.settings.core.TogglePreferenceController; - -public class TrustLostLocksScreenPreferenceController extends TogglePreferenceController { - - public TrustLostLocksScreenPreferenceController(Context context, String key) { - super(context, key); - } - - @Override - public int getAvailabilityStatus() { - return AVAILABLE; - } - - @Override - public boolean isChecked() { - return Settings.Secure.getInt(mContext.getContentResolver(), - Settings.Secure.LOCK_SCREEN_WHEN_TRUST_LOST, 1) == 1; - } - - @Override - public boolean setChecked(boolean isChecked) { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.LOCK_SCREEN_WHEN_TRUST_LOST, isChecked ? 1 : 0); - return true; - } -} From daffbb8e14295957e39e98f9e354efe567b537b7 Mon Sep 17 00:00:00 2001 From: Beverly Date: Tue, 5 Feb 2019 10:10:05 -0500 Subject: [PATCH 09/11] Update char limit on prevent ringing titles Test: manual Bug: 123025152 Change-Id: Icc0c413d94bae1439a1ac7f1b79b1d8e5a4f0efd --- res/values/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 039fb13e070..5908fcb359c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10270,11 +10270,11 @@ - + Prevent ringing - + Press Power & Volume Up together to - + Shortcut to prevent ringing Vibrate From 3304bec9802df986899102926d74ca16d5ca862c Mon Sep 17 00:00:00 2001 From: Amin Shaikh Date: Tue, 5 Feb 2019 13:52:30 -0500 Subject: [PATCH 10/11] Use adaptive icon shapes for settings homeepage - Add AdaptiveIconShapeDrawable for the homepage icon backgrounds - Rename RoundedHomepageIcon -> AdaptiveHomepageIcon to reflect that the adaptive icon shape is used Bug: 123829919 Test: mp settings; manually viewing homepage icons Change-Id: I9fddfbf57461b300200f30f716d861878bbbcc38 --- res/drawable/ic_homepage_about.xml | 11 ++--- res/drawable/ic_homepage_accessibility.xml | 11 ++--- res/drawable/ic_homepage_accounts.xml | 11 ++--- res/drawable/ic_homepage_apps.xml | 11 ++--- res/drawable/ic_homepage_battery.xml | 11 ++--- res/drawable/ic_homepage_connected_device.xml | 11 ++--- res/drawable/ic_homepage_display.xml | 11 ++--- .../ic_homepage_generic_background.xml | 24 ----------- res/drawable/ic_homepage_location.xml | 11 ++--- res/drawable/ic_homepage_network.xml | 11 ++--- res/drawable/ic_homepage_privacy.xml | 11 ++--- res/drawable/ic_homepage_security.xml | 11 ++--- res/drawable/ic_homepage_sound.xml | 11 ++--- res/drawable/ic_homepage_storage.xml | 11 ++--- res/drawable/ic_homepage_support.xml | 11 ++--- res/drawable/ic_homepage_system_dashboard.xml | 11 ++--- .../DashboardFeatureProviderImpl.java | 6 +-- .../homepage/AdaptiveIconShapeDrawable.java | 43 +++++++++++++++++++ ...ageIcon.java => AdaptiveHomepageIcon.java} | 9 ++-- ...est.java => AdaptiveHomepageIconTest.java} | 23 +++++----- 20 files changed, 122 insertions(+), 148 deletions(-) delete mode 100644 res/drawable/ic_homepage_generic_background.xml create mode 100644 src/com/android/settings/homepage/AdaptiveIconShapeDrawable.java rename src/com/android/settings/widget/{RoundedHomepageIcon.java => AdaptiveHomepageIcon.java} (90%) rename tests/robotests/src/com/android/settings/widget/{RoundedHomepageIconTest.java => AdaptiveHomepageIconTest.java} (83%) diff --git a/res/drawable/ic_homepage_about.xml b/res/drawable/ic_homepage_about.xml index d47a740b573..07dbb34b0ea 100644 --- a/res/drawable/ic_homepage_about.xml +++ b/res/drawable/ic_homepage_about.xml @@ -18,13 +18,10 @@ - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - - \ No newline at end of file diff --git a/res/drawable/ic_homepage_location.xml b/res/drawable/ic_homepage_location.xml index 413801b0a56..c5d6e8970ff 100644 --- a/res/drawable/ic_homepage_location.xml +++ b/res/drawable/ic_homepage_location.xml @@ -18,13 +18,10 @@ - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + Date: Tue, 5 Feb 2019 12:43:51 -0800 Subject: [PATCH 11/11] Close slice cursor when done using. Change-Id: I22f2d5fe990fb43e1694879f27d7c0be26675d2b Fixes: 123878106 Test: manual --- .../settings/slices/SlicesDatabaseAccessor.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/slices/SlicesDatabaseAccessor.java b/src/com/android/settings/slices/SlicesDatabaseAccessor.java index ae77dd2a9b9..fcc42e47500 100644 --- a/src/com/android/settings/slices/SlicesDatabaseAccessor.java +++ b/src/com/android/settings/slices/SlicesDatabaseAccessor.java @@ -75,8 +75,9 @@ public class SlicesDatabaseAccessor { if (pathData == null) { throw new IllegalStateException("Invalid Slices uri: " + uri); } - Cursor cursor = getIndexedSliceData(pathData.second /* key */); - return buildSliceData(cursor, uri, pathData.first /* isIntentOnly */); + try (Cursor cursor = getIndexedSliceData(pathData.second /* key */)) { + return buildSliceData(cursor, uri, pathData.first /* isIntentOnly */); + } } /** @@ -85,8 +86,9 @@ public class SlicesDatabaseAccessor { * Used when handling the action of the {@link Slice}. */ public SliceData getSliceDataFromKey(String key) { - Cursor cursor = getIndexedSliceData(key); - return buildSliceData(cursor, null /* uri */, false /* isIntentOnly */); + try (Cursor cursor = getIndexedSliceData(key)) { + return buildSliceData(cursor, null /* uri */, false /* isIntentOnly */); + } } /**