Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3adad406 authored by Marcelo Arteiro's avatar Marcelo Arteiro
Browse files

Add setting allowing for contrast level to be clamped

If enabled minimum values will be 0.0.
This is important when restoring from devices that allow contrast_level to be -1.

Bug: 390714217
Change-Id: Id2a2aba2540361560c0cb9425fa6bb65c0c3fc07
Flag: EXEMPT bugfix
Test: SettingsHelperRestoreTest
parent 2d07926f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -341,4 +341,7 @@

    <!-- The default ringer mode. See `AudioManager` for list of valid values. -->
    <integer name="def_ringer_mode">2</integer>

    <!-- Caps minsum contrast from -1.0 (Material API) to 0.0 (Android Support)-->
    <bool name="config_increaseMinContrast">true</bool>
</resources>
+15 −0
Original line number Diff line number Diff line
@@ -1085,6 +1085,21 @@ public class SettingsBackupAgent extends BackupAgentHelper {
                Log.d(TAG, "Restored font scale from: " + toRestore + " to " + value);
            }

            if (Settings.Secure.CONTRAST_LEVEL.equals(key)) {
                boolean increaseMinContrast = getBaseContext().getResources()
                        .getBoolean(R.bool.config_increaseMinContrast);

                float valueFloat;
                try {
                    valueFloat = Float.parseFloat(value);
                } catch (NumberFormatException e) {
                    valueFloat = 0.0f;
                }

                float newValue = Math.max(valueFloat, increaseMinContrast ? 0.0f : -1.0f);
                value = String.valueOf(newValue);
            }

            settingsHelper.restoreValue(this, cr, contentValues, destination, key, value,
                    mRestoredFromSdkInt);

+44 −7
Original line number Diff line number Diff line
@@ -16,15 +16,15 @@

package com.android.providers.settings;

import static com.android.providers.settings.SettingsBackupRestoreKeys.KEY_WIFI_NEW_CONFIG;
import static com.android.providers.settings.SettingsBackupRestoreKeys.KEY_SOFTAP_CONFIG;
import static com.android.providers.settings.SettingsBackupRestoreKeys.KEY_SIM_SPECIFIC_SETTINGS_2;
import static com.android.providers.settings.SettingsBackupRestoreKeys.KEY_SOFTAP_CONFIG;
import static com.android.providers.settings.SettingsBackupRestoreKeys.KEY_WIFI_NEW_CONFIG;
import static com.android.providers.settings.SettingsBackupRestoreKeys.KEY_WIFI_SETTINGS_BACKUP_DATA;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;

import static org.junit.Assert.assertArrayEquals;
@@ -35,12 +35,10 @@ import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.when;

import android.annotation.Nullable;
import android.app.backup.BackupAnnotations.BackupDestination;
import android.app.backup.BackupAnnotations.OperationType;
import android.app.backup.BackupDataInput;
import android.app.backup.BackupDataOutput;
import android.app.backup.BackupRestoreEventLogger;
import android.app.backup.BackupRestoreEventLogger.DataTypeResult;
import android.content.ContentResolver;
import android.content.ContentValues;
@@ -69,13 +67,11 @@ import androidx.test.runner.AndroidJUnit4;

import com.android.window.flags.Flags;

import java.util.List;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;

@@ -330,6 +326,47 @@ public class SettingsBackupAgentTest extends BaseSettingsProviderTest {
        assertEquals("1.5", testedMethod.apply("1.8"));
    }

    @Test
    public void testOnRestore_minContrastLevelIsRestoredToZero() {
        mAgentUnderTest = new TestFriendlySettingsBackupAgent() {
            @Override
            protected Set<String> getBlockedSettings(int blockedSettingsArrayId) {
                return new HashSet<>();
            }
        };
        mAgentUnderTest.attach(mContext);

        TestSettingsHelper settingsHelper = new TestSettingsHelper(mContext);
        mAgentUnderTest.mSettingsHelper = settingsHelper;

        String contrastLevelValue = "-1.0";
        Map<String, String> settingsToRestore = Map.of(Settings.Secure.CONTRAST_LEVEL,
                contrastLevelValue);

        byte[] backupData = generateBackupData(settingsToRestore);
        mAgentUnderTest.restoreSettings(
                backupData,
                /* pos */ 0,
                backupData.length,
                Settings.Secure.CONTENT_URI,
                null,
                null,
                null,
                /* blockedSettingsArrayId */ 0,
                Collections.emptySet(),
                Collections.emptySet(),
                KEY_SECURE);

        // Check that the contrast level has been restored.
        assertTrue(settingsHelper.mWrittenValues.containsKey(Settings.Secure.CONTRAST_LEVEL));

        String restoredContrastLevel = settingsHelper.mWrittenValues.get(
                Settings.Secure.CONTRAST_LEVEL);

        float restoredFloat = Float.parseFloat(restoredContrastLevel);
        assertEquals(0.0f, restoredFloat, 0.001f);
    }

    @Test
    @DisableFlags(com.android.server.backup.Flags.FLAG_ENABLE_METRICS_SETTINGS_BACKUP_AGENTS)
    public void onCreate_metricsFlagIsDisabled_areAgentMetricsEnabledIsFalse() {
+1 −0
Original line number Diff line number Diff line
@@ -948,6 +948,7 @@ public class ThemeOverlayController implements CoreStartable, Dumpable {
    public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
        pw.println("mSystemColors=" + mCurrentColors);
        pw.println("mMainWallpaperColor=" + Integer.toHexString(mMainWallpaperColor));
        pw.println("mContrast=" + mContrast);
        pw.println("mSecondaryOverlay=" + mSecondaryOverlay);
        pw.println("mNeutralOverlay=" + mNeutralOverlay);
        pw.println("mDynamicOverlay=" + mDynamicOverlay);