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

Commit a76372c0 authored by Eric Lin's avatar Eric Lin
Browse files

Add config changes consolidation to SettingsLib.

This commit adds a new API to DisplayDensityConfiguration that allows
setting the display density within the context of a batch update.

SimpleModeUtils now calls the new method to consolidate configuration
updates for display size, font size and navigation mode in ag/30875650.

Bug: 356738240
Test: adb shell am start -a com.google.android.settings.matcha.ACCESSIBILITY_APPEARANCE_SETTINGS -c android.intent.category.DEFAULT
Test: adb shell am start -n com.android.settings/com.google.android.settings.simplemode.SimpleModeSettingsActivity
Flag: com.android.window.flags.condense_configuration_change_for_simple_mode
Change-Id: Ia6fd575fc47f73d9c8862b9ddfcb74ca14ce7599
parent d3106796
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -29,13 +29,16 @@ import android.view.Display;
import android.view.DisplayInfo;
import android.view.IWindowManager;
import android.view.WindowManagerGlobal;
import android.window.ConfigurationChangeSetting;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.settingslib.R;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

/**
@@ -340,4 +343,31 @@ public class DisplayDensityUtils {
            }
        });
    }

    /**
     * Returns a list of {@link ConfigurationChangeSetting} object representing the forced display
     * density settings for the displays that satisfy the predicate.
     *
     * @param index the index of the density value in the available density values array.
     * @return a list of {@link ConfigurationChangeSetting} objects.
     * @see IWindowManager#setConfigurationChangeSettingsForUser
     */
    @NonNull
    public List<ConfigurationChangeSetting> getForcedDisplayDensitySetting(final int index) {
        final ArrayList<ConfigurationChangeSetting> settings = new ArrayList<>();
        for (final Display display : mDisplayManager.getDisplays(
                DisplayManager.DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED)) {
            final int displayId = display.getDisplayId();
            final DisplayInfo info = new DisplayInfo();
            if (!display.getDisplayInfo(info)) {
                Log.w(LOG_TAG, "Unable to get display info for display " + displayId);
                continue;
            }
            if (!mPredicate.test(info)) {
                continue;
            }
            settings.add(new ConfigurationChangeSetting.DensitySetting(displayId, mValues[index]));
        }
        return settings;
    }
}