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
This commit is contained in:
@@ -25,6 +25,7 @@ android_library {
|
||||
"SettingsLibAdaptiveIcon",
|
||||
"SettingsLibRadioButtonPreference",
|
||||
"WifiTrackerLib",
|
||||
"SettingsLibDisplayDensityUtils",
|
||||
],
|
||||
|
||||
// ANDROIDMK TRANSLATION ERROR: unsupported assignment to LOCAL_SHARED_JAVA_LIBRARIES
|
||||
|
||||
7
packages/SettingsLib/DisplayDensityUtils/Android.bp
Normal file
7
packages/SettingsLib/DisplayDensityUtils/Android.bp
Normal file
@@ -0,0 +1,7 @@
|
||||
android_library {
|
||||
name: "SettingsLibDisplayDensityUtils",
|
||||
|
||||
srcs: ["src/**/*.java"],
|
||||
|
||||
min_sdk_version: "21",
|
||||
}
|
||||
21
packages/SettingsLib/DisplayDensityUtils/AndroidManifest.xml
Normal file
21
packages/SettingsLib/DisplayDensityUtils/AndroidManifest.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* 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");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -45,7 +45,7 @@ import android.view.Display;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.util.ArrayUtils;
|
||||
import com.android.internal.widget.LockPatternUtils;
|
||||
import com.android.settingslib.display.DisplayDensityUtils;
|
||||
import com.android.settingslib.display.DisplayDensityConfiguration;
|
||||
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
@@ -1035,7 +1035,8 @@ public class SettingsBackupAgent extends BackupAgentHelper {
|
||||
|
||||
if (previousDensity == null || previousDensity != newDensity) {
|
||||
// From nothing to something is a change.
|
||||
DisplayDensityUtils.setForcedDisplayDensity(Display.DEFAULT_DISPLAY, newDensity);
|
||||
DisplayDensityConfiguration.setForcedDisplayDensity(
|
||||
Display.DEFAULT_DISPLAY, newDensity);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user