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

Commit e5e7916b authored by Al Sutton's avatar Al Sutton
Browse files

Extract common display density configuraiton code

We're currently importing the whole of SettingsLib into the Settings
Backup Agent just to access a single static method. This seems to
have contributed to a the regression which relates to b/139373401.

This CL separates the 3 related methods out into their own build
target so the amount of code included in SettingsBackupAgent is
much smaller.

A later CL will remove the original location after all usages
have been redirected to this new location

Bug: 139373401
Test: atest SettingsProviderTest SettingsLibRoboTests
Change-Id: I36fbc21daddcf068491b58db01b66f540ac26cf7
parent 57ffe019
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ android_library {
        "SettingsLibAdaptiveIcon",
        "SettingsLibRadioButtonPreference",
        "WifiTrackerLib",
        "SettingsLibDisplayDensityUtils",
    ],

    // ANDROIDMK TRANSLATION ERROR: unsupported assignment to LOCAL_SHARED_JAVA_LIBRARIES
+7 −0
Original line number Diff line number Diff line
android_library {
    name: "SettingsLibDisplayDensityUtils",

    srcs: ["src/**/*.java"],

    min_sdk_version: "21",
}
+21 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (C) 2019 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.
  -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.android.settingslib.display">

</manifest>
+88 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 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.settingslib.display;

import android.os.AsyncTask;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Log;
import android.view.IWindowManager;
import android.view.WindowManagerGlobal;

/** Utility methods for controlling the display density. */
public class DisplayDensityConfiguration {
    private static final String LOG_TAG = "DisplayDensityConfig";

    /**
     * Returns the default density for the specified display.
     *
     * @param displayId the identifier of the display
     * @return the default density of the specified display, or {@code -1} if the display does not
     *     exist or the density could not be obtained
     */
    static int getDefaultDisplayDensity(int displayId) {
        try {
            final IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
            return wm.getInitialDisplayDensity(displayId);
        } catch (RemoteException exc) {
            return -1;
        }
    }

    /**
     * Asynchronously applies display density changes to the specified display.
     *
     * <p>The change will be applied to the user specified by the value of {@link
     * UserHandle#myUserId()} at the time the method is called.
     *
     * @param displayId the identifier of the display to modify
     */
    public static void clearForcedDisplayDensity(final int displayId) {
        final int userId = UserHandle.myUserId();
        AsyncTask.execute(
                () -> {
                    try {
                        final IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
                        wm.clearForcedDisplayDensityForUser(displayId, userId);
                    } catch (RemoteException exc) {
                        Log.w(LOG_TAG, "Unable to clear forced display density setting");
                    }
                });
    }

    /**
     * Asynchronously applies display density changes to the specified display.
     *
     * <p>The change will be applied to the user specified by the value of {@link
     * UserHandle#myUserId()} at the time the method is called.
     *
     * @param displayId the identifier of the display to modify
     * @param density the density to force for the specified display
     */
    public static void setForcedDisplayDensity(final int displayId, final int density) {
        final int userId = UserHandle.myUserId();
        AsyncTask.execute(
                () -> {
                    try {
                        final IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
                        wm.setForcedDisplayDensityForUser(displayId, density, userId);
                    } catch (RemoteException exc) {
                        Log.w(LOG_TAG, "Unable to save forced display density setting");
                    }
                });
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ android_app {
    ],
    static_libs: [
        "junit",
        "SettingsLib",
        "SettingsLibDisplayDensityUtils",
    ],
    platform_apis: true,
    certificate: "platform",
@@ -30,7 +30,7 @@ android_test {
    ],
    static_libs: [
        "androidx.test.rules",
        "SettingsLib",
        "SettingsLibDisplayDensityUtils",
    ],
    libs: [
        "android.test.base",
Loading