DivestOS/Patches/LineageOS-14.1/android_frameworks_base/0001-Reduced_Resolution.patch

204 lines
7.6 KiB
Diff
Raw Normal View History

2017-10-20 23:57:01 +00:00
From 1f5d2697b801e4f4ddfdd4edad464b09f39c416e Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
2017-10-20 23:57:01 +00:00
Date: Fri, 20 Oct 2017 19:54:57 -0400
Subject: [PATCH] Reduced Resolution Feature 2/2
2017-10-20 23:57:01 +00:00
Change-Id: Iafa177e66dca11da1a595ea6c1bbc3171b71eb67
---
2017-10-20 23:57:01 +00:00
core/java/android/os/IPowerManager.aidl | 3 +
core/java/android/os/PowerManager.java | 32 ++++++++++
.../android/server/power/PowerManagerService.java | 73 ++++++++++++++++++++++
3 files changed, 108 insertions(+)
2017-10-20 20:54:46 +00:00
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
2017-10-20 23:57:01 +00:00
index 26eb7f169a0..d6051d0db74 100644
2017-10-20 20:54:46 +00:00
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
2017-10-20 23:57:01 +00:00
@@ -75,4 +75,7 @@ interface IPowerManager
void setKeyboardLight(boolean on, int key);
void wakeUpWithProximityCheck(long time, String reason, String opPackageName);
+
2017-10-20 23:00:24 +00:00
+ boolean isReducedResolution();
+ boolean setReducedResolution(boolean mode);
2017-10-20 23:57:01 +00:00
}
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
2017-10-20 23:57:01 +00:00
index 5c8effec0ed..8c1d2fdf65b 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
2017-10-20 23:57:01 +00:00
@@ -988,6 +988,38 @@ public final class PowerManager {
2017-10-20 20:54:46 +00:00
}
}
2017-10-20 23:00:24 +00:00
+ /**
+ * Returns true if the WindowManager is running at a reduced resolution
+ *
+ * @return Returns true if WindowManager is set to a reduced resolution, else false.
2017-10-20 23:57:01 +00:00
+ *
+ * @hide
2017-10-20 23:00:24 +00:00
+ */
2017-10-20 20:54:46 +00:00
+ public boolean isReducedResolution() {
+ try {
+ return mService.isReducedResolution();
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
2017-10-20 23:00:24 +00:00
+ /**
+ * Set the reduced resolution mode
+ *
+ * @return True if the set was allowed.
+ *
+ * @see #isReducedResolution()
+ *
+ * @hide
+ */
2017-10-20 20:54:46 +00:00
+ public boolean setReducedResolution(boolean mode) {
+ try {
+ return mService.setReducedResolution(mode);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
2017-10-20 20:54:46 +00:00
/**
* Returns true if the device is currently in idle mode. This happens when a device
* has been sitting unused and unmoving for a sufficiently long period of time, so that
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
2017-10-20 23:57:01 +00:00
index 55d0809ee4e..c1620ea74f8 100644
2017-10-20 20:54:46 +00:00
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -29,6 +29,7 @@ import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.ContentObserver;
+import android.graphics.Point;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
2017-10-20 23:57:01 +00:00
@@ -49,6 +50,7 @@ import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.Process;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.Trace;
@@ -67,6 +69,7 @@ import android.util.Slog;
2017-10-20 20:54:46 +00:00
import android.util.SparseIntArray;
import android.util.TimeUtils;
import android.view.Display;
+import android.view.IWindowManager;
import android.view.WindowManagerPolicy;
import com.android.internal.app.IAppOpsService;
2017-10-20 23:57:01 +00:00
@@ -203,6 +206,7 @@ public final class PowerManagerService extends SystemService
2017-10-20 20:54:46 +00:00
private final Context mContext;
private final ServiceThread mHandlerThread;
private final PowerManagerHandler mHandler;
+ private final IWindowManager mWm;
private LightsManager mLightsManager;
private BatteryManagerInternal mBatteryManagerInternal;
2017-10-20 23:57:01 +00:00
@@ -583,6 +587,8 @@ public final class PowerManagerService extends SystemService
2017-10-20 20:54:46 +00:00
Process.THREAD_PRIORITY_DISPLAY, false /*allowIo*/);
mHandlerThread.start();
mHandler = new PowerManagerHandler(mHandlerThread.getLooper());
+ mWm = IWindowManager.Stub.asInterface(ServiceManager.checkService(
+ Context.WINDOW_SERVICE));
2017-10-20 20:54:46 +00:00
qcNsrmPowExt = new QCNsrmPowerExtension(this);
synchronized (mLock) {
mWakeLockSuspendBlocker = createSuspendBlockerLocked("PowerManagerService.WakeLocks");
2017-10-20 23:57:01 +00:00
@@ -2658,6 +2664,46 @@ public final class PowerManagerService extends SystemService
}
}
2017-10-20 20:54:46 +00:00
+ private boolean isReducedResolutionInternal() {
+ synchronized (mLock) {
+ Point initialSize = new Point();
+ Point baseSize = new Point();
+
+ mWm.getInitialDisplaySize(Display.DEFAULT_DISPLAY, initialSize);
+ mWm.getBaseDisplaySize(Display.DEFAULT_DISPLAY, baseSize);
+
+ return !initialSize.equals(baseSize);
+ }
+ }
+
2017-10-20 23:57:01 +00:00
+ private boolean setReducedResolutionInternal(boolean mode) {
2017-10-20 20:54:46 +00:00
+ synchronized (mLock) {
+ if (mode) {
+ Point initialSize = new Point();
+ mWm.getInitialDisplaySize(Display.DEFAULT_DISPLAY, initialSize);
+
+ Point newSize;
+
2017-10-20 23:00:24 +00:00
+ if (initialSize.x == 1440 && initialSize.y == 2560) {//16:9
+ newSize = new Point(1080, 1920);//.75
+ } else if(initialSize.x == 1200 && initialSize.y == 1920) {//16:10
+ newSize = new Point(900, 1440);//.75
+ } else if(initialSize.x == 1080 && initialSize.y == 1920) {//16:9
+ newSize = new Point(720, 1280);//.50
+ } else if(initialSize.x == 768 && initialSize.y == 1280) {//5:3
+ newSize = new Point(576, 960);//.75
+ } else {
+ return false;
+ }
+
+ mWm.setForcedDisplaySize(Display.DEFAULT_DISPLAY, newSize.x, newSize.y);
+ } else {
+ mWm.clearForcedDisplaySize(Display.DEFAULT_DISPLAY);
+ }
2017-10-20 20:54:46 +00:00
+ return isReducedResolutionInternal();
+ }
+ }
+
2017-10-20 20:54:46 +00:00
boolean isDeviceIdleModeInternal() {
synchronized (mLock) {
return mDeviceIdleMode;
2017-10-20 23:57:01 +00:00
@@ -3833,6 +3879,28 @@ public final class PowerManagerService extends SystemService
2017-10-20 20:54:46 +00:00
}
}
+ @Override // Binder call
2017-10-20 23:57:01 +00:00
+ public boolean isReducedResolution() {
2017-10-20 20:54:46 +00:00
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ return isReducedResolutionInternal();
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ @Override // Binder call
2017-10-20 23:57:01 +00:00
+ public boolean setReducedResolution(boolean mode) {
2017-10-20 20:54:46 +00:00
+ mContext.enforceCallingOrSelfPermission(
+ android.Manifest.permission.DEVICE_POWER, null);
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ return setReducedResolutionInternal(mode);
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
@Override // Binder call
public boolean isDeviceIdleMode() {
final long ident = Binder.clearCallingIdentity();
2017-10-20 23:57:01 +00:00
@@ -4214,6 +4282,11 @@ public final class PowerManagerService extends SystemService
2017-10-20 20:54:46 +00:00
return setLowPowerModeInternal(mode);
}
+ @Override
+ public boolean setReducedResolution(boolean mode) {
+ return setReducedResolutionInternal(mode);
+ }
+
@Override
public int getFeature(int featureId) {
return nativeGetFeature(featureId);
--
2.14.2