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

Commit 4c7cc341 authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

Demo hack!

To make a 800 tall screen run like a 720:

adb shell setprop persist.demo.screensizehack 800=720

Note this is a persistent property, so it will (intentionally) remain across boots.

Change-Id: I8a8a9f937399327444e8fb154b91f0e642db116e
parent fb1b2317
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -136,6 +136,11 @@ public class Display
        outMetrics.ydpi         = mDpiY;
    }

    /**
     * @hide Helper for our fake display size hack.
     */
    native public static int unmapDisplaySize(int newSize);
    
    /*
     * We use a class initializer to allow the native code to cache some
     * field offsets.
+30 −3
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
#include <stdio.h>
#include <assert.h>

#include <cutils/properties.h>

#include <surfaceflinger/SurfaceComposerClient.h>
#include <ui/PixelFormat.h>
#include <ui/DisplayInfo.h>
@@ -24,6 +26,7 @@
#include "jni.h"
#include <android_runtime/AndroidRuntime.h>
#include <utils/misc.h>
#include <utils/Log.h>

// ----------------------------------------------------------------------------

@@ -41,6 +44,9 @@ struct offsets_t {
};
static offsets_t offsets;

static int gOldSize = -1;
static int gNewSize = -1;

static void doThrow(JNIEnv* env, const char* exc, const char* msg = NULL)
{
    jclass npeClazz = env->FindClass(exc);
@@ -69,14 +75,16 @@ static jint android_view_Display_getWidth(
        JNIEnv* env, jobject clazz)
{
    DisplayID dpy = env->GetIntField(clazz, offsets.display);
    return SurfaceComposerClient::getDisplayWidth(dpy);
    jint w = SurfaceComposerClient::getDisplayWidth(dpy);
    return w == gOldSize ? gNewSize : w;
}

static jint android_view_Display_getHeight(
        JNIEnv* env, jobject clazz)
{
    DisplayID dpy = env->GetIntField(clazz, offsets.display);
    return SurfaceComposerClient::getDisplayHeight(dpy);
    int h = SurfaceComposerClient::getDisplayHeight(dpy);
    return h == gOldSize ? gNewSize : h;
}

static jint android_view_Display_getOrientation(
@@ -92,6 +100,13 @@ static jint android_view_Display_getDisplayCount(
    return SurfaceComposerClient::getNumberOfDisplays();
}

static jint android_view_Display_unmapDisplaySize(
        JNIEnv* env, jclass clazz, jint newSize)
{
    if (newSize == gNewSize) return gOldSize;
    return newSize;
}

// ----------------------------------------------------------------------------

const char* const kClassPathName = "android/view/Display";
@@ -110,7 +125,9 @@ static JNINativeMethod gMethods[] = {
    {   "getHeight", "()I",
            (void*)android_view_Display_getHeight },
    {   "getOrientation", "()I",
            (void*)android_view_Display_getOrientation }
            (void*)android_view_Display_getOrientation },
    {   "unmapDisplaySize", "(I)I",
            (void*)android_view_Display_unmapDisplaySize }
};

void nativeClassInit(JNIEnv* env, jclass clazz)
@@ -125,6 +142,16 @@ void nativeClassInit(JNIEnv* env, jclass clazz)

int register_android_view_Display(JNIEnv* env)
{
    char buf[PROPERTY_VALUE_MAX];
    int len = property_get("persist.demo.screensizehack", buf, "");
    if (len > 0) {
        int temp1, temp2;
        if (sscanf(buf, "%d=%d", &temp1, &temp2) == 2) {
            gOldSize = temp1;
            gNewSize = temp2;
        }
    }

    return AndroidRuntime::registerNativeMethods(env,
            kClassPathName, gMethods, NELEM(gMethods));
}
+2 −1
Original line number Diff line number Diff line
@@ -6239,7 +6239,8 @@ public class WindowManagerService extends IWindowManager.Stub
            mDisplay = wm.getDefaultDisplay();
            mInitialDisplayWidth = mDisplay.getWidth();
            mInitialDisplayHeight = mDisplay.getHeight();
            mInputManager.setDisplaySize(0, mInitialDisplayWidth, mInitialDisplayHeight);
            mInputManager.setDisplaySize(0, Display.unmapDisplaySize(mInitialDisplayWidth),
                    Display.unmapDisplaySize(mInitialDisplayHeight));
        }

        try {