summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsProvider/Android.mk2
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java14
-rw-r--r--packages/SettingsProvider/test/Android.mk4
-rw-r--r--packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java121
4 files changed, 135 insertions, 6 deletions
diff --git a/packages/SettingsProvider/Android.mk b/packages/SettingsProvider/Android.mk
index db57fd162362..ccde5716ef93 100644
--- a/packages/SettingsProvider/Android.mk
+++ b/packages/SettingsProvider/Android.mk
@@ -3,6 +3,8 @@ include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
LOCAL_SRC_FILES := $(call all-java-files-under, src) \
src/com/android/providers/settings/EventLogTags.logtags
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
index 4c98bb8cc2e8..7a994a894a86 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java
@@ -17,7 +17,6 @@
package com.android.providers.settings;
import android.os.Process;
-import com.android.internal.R;
import com.android.internal.app.LocalePicker;
import com.android.internal.annotations.VisibleForTesting;
@@ -30,13 +29,11 @@ import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
-import android.hardware.display.DisplayManager;
import android.icu.util.ULocale;
import android.location.LocationManager;
import android.media.AudioManager;
import android.media.RingtoneManager;
import android.net.Uri;
-import android.os.IPowerManager;
import android.os.LocaleList;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -46,16 +43,16 @@ import android.provider.Settings;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.ArraySet;
-import android.util.Slog;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Locale;
public class SettingsHelper {
private static final String TAG = "SettingsHelper";
private static final String SILENT_RINGTONE = "_silent";
+ private static final float FLOAT_TOLERANCE = 0.01f;
+
private Context mContext;
private AudioManager mAudioManager;
private TelephonyManager mTelephonyManager;
@@ -259,9 +256,14 @@ public class SettingsHelper {
case Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES:
case Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES:
case Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER:
- case Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE:
return !TextUtils.isEmpty(Settings.Secure.getString(
mContext.getContentResolver(), name));
+ case Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE:
+ float defaultScale = mContext.getResources().getFraction(
+ R.fraction.def_accessibility_display_magnification_scale, 1, 1);
+ float currentScale = Settings.Secure.getFloat(
+ mContext.getContentResolver(), name, defaultScale);
+ return Math.abs(currentScale - defaultScale) >= FLOAT_TOLERANCE;
case Settings.System.FONT_SCALE:
return Settings.System.getFloat(mContext.getContentResolver(), name, 1.0f) != 1.0f;
default:
diff --git a/packages/SettingsProvider/test/Android.mk b/packages/SettingsProvider/test/Android.mk
index bd5b1f2c64ef..0d681ed0f37a 100644
--- a/packages/SettingsProvider/test/Android.mk
+++ b/packages/SettingsProvider/test/Android.mk
@@ -14,6 +14,10 @@ LOCAL_STATIC_JAVA_LIBRARIES := android-support-test
LOCAL_JAVA_LIBRARIES := android.test.base
+LOCAL_RESOURCE_DIR := frameworks/base/packages/SettingsProvider/res
+
+LOCAL_AAPT_FLAGS += --auto-add-overlay --extra-packages com.android.providers.settings
+
LOCAL_PACKAGE_NAME := SettingsProviderTest
LOCAL_PRIVATE_PLATFORM_APIS := true
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java
new file mode 100644
index 000000000000..b5324e5509ab
--- /dev/null
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperRestoreTest.java
@@ -0,0 +1,121 @@
+/*
+ * 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.providers.settings;
+
+import static junit.framework.Assert.assertEquals;
+
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.Settings;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for {@link SettingsHelper#restoreValue(Context, ContentResolver, ContentValues, Uri,
+ * String, String, int)}. Specifically verifies that we restore critical accessibility settings only
+ * if the user has not already configured these in SUW.
+ */
+@RunWith(AndroidJUnit4.class)
+public class SettingsHelperRestoreTest {
+ private static final float FLOAT_TOLERANCE = 0.01f;
+
+ private Context mContext;
+ private ContentResolver mContentResolver;
+ private SettingsHelper mSettingsHelper;
+
+ @Before
+ public void setUp() {
+ mContext = InstrumentationRegistry.getContext();
+ mContentResolver = mContext.getContentResolver();
+ mSettingsHelper = new SettingsHelper(mContext);
+ }
+
+ /** Tests for {@link Settings.Secure#ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE}. */
+ @Test
+ public void
+ testRestoreAccessibilityDisplayMagnificationScale_alreadyConfigured_doesNotRestoreValue()
+ throws Exception {
+ float defaultSettingValue = setDefaultAccessibilityDisplayMagnificationScale();
+ String settingName = Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE;
+ float restoreSettingValue = defaultSettingValue + 0.5f;
+
+ // Simulate already configuring setting via SUW.
+ float configuredSettingValue = defaultSettingValue + 1.0f;
+ Settings.Secure.putFloat(mContentResolver, settingName, configuredSettingValue);
+
+ mSettingsHelper.restoreValue(
+ mContext,
+ mContentResolver,
+ new ContentValues(2),
+ Settings.Secure.getUriFor(settingName),
+ settingName,
+ String.valueOf(restoreSettingValue),
+ Build.VERSION.SDK_INT);
+
+ assertEquals(
+ configuredSettingValue,
+ Settings.Secure.getFloat(mContentResolver, settingName),
+ FLOAT_TOLERANCE);
+ }
+
+ @Test
+ public void
+ testRestoreAccessibilityDisplayMagnificationScale_notAlreadyConfigured_restoresValue()
+ throws Exception {
+ float defaultSettingValue = setDefaultAccessibilityDisplayMagnificationScale();
+ String settingName = Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE;
+ float restoreSettingValue = defaultSettingValue + 0.5f;
+
+ mSettingsHelper.restoreValue(
+ mContext,
+ mContentResolver,
+ new ContentValues(2),
+ Settings.Secure.getUriFor(settingName),
+ settingName,
+ String.valueOf(restoreSettingValue),
+ Build.VERSION.SDK_INT);
+
+ assertEquals(
+ restoreSettingValue,
+ Settings.Secure.getFloat(mContentResolver, settingName),
+ FLOAT_TOLERANCE);
+ }
+
+ /**
+ * Simulate {@link Settings.Secure#ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE} value at boot by
+ * loading the default.
+ *
+ * @return the default value.
+ */
+ private float setDefaultAccessibilityDisplayMagnificationScale() {
+ float defaultSettingValue =
+ mContext.getResources()
+ .getFraction(
+ R.fraction.def_accessibility_display_magnification_scale, 1, 1);
+ Settings.Secure.putFloat(
+ mContentResolver,
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_SCALE,
+ defaultSettingValue);
+ return defaultSettingValue;
+ }
+}