diff --git a/mobile/android/app/mobile.js b/mobile/android/app/mobile.js index 318c495e73d..4e3bdabd782 100644 --- a/mobile/android/app/mobile.js +++ b/mobile/android/app/mobile.js @@ -362,6 +362,9 @@ pref("gfx.displayport.strategy_pb.threshold", -1); // velocity threshold in inch // (see bug 700023, bug 846832, bug 847344) pref("gfx.font_rendering.graphite.enabled", false); +// Allow 24-bit colour when the hardware supports it +pref("gfx.android.rgb16.force", false); + // don't allow JS to move and resize existing windows pref("dom.disable_window_move_resize", true); diff --git a/mobile/android/base/GeckoApp.java b/mobile/android/base/GeckoApp.java index 118f00eb7a3..f481676a1f9 100644 --- a/mobile/android/base/GeckoApp.java +++ b/mobile/android/base/GeckoApp.java @@ -2191,6 +2191,15 @@ abstract public class GeckoApp } protected void connectGeckoLayerClient() { + // See if we want to force 16-bit colour before doing anything + PrefsHelper.getPref("gfx.android.rgb16.force", new PrefsHelper.PrefHandlerBase() { + @Override public void prefValue(String pref, boolean force16bit) { + if (force16bit) { + GeckoAppShell.setScreenDepthOverride(16); + } + } + }); + mLayerView.getLayerClient().notifyGeckoReady(); mLayerView.addTouchInterceptor(this); diff --git a/mobile/android/base/GeckoAppShell.java b/mobile/android/base/GeckoAppShell.java index 7392c64e984..cdd2344581d 100644 --- a/mobile/android/base/GeckoAppShell.java +++ b/mobile/android/base/GeckoAppShell.java @@ -1385,7 +1385,7 @@ public class GeckoAppShell * Returns the colour depth of the default screen. This will either be * 24 or 16. */ - public static int getScreenDepth() { + public static synchronized int getScreenDepth() { if (sScreenDepth == 0) { switch (GeckoApp.mAppContext.getWindowManager().getDefaultDisplay().getPixelFormat()) { case PixelFormat.RGBA_8888 : @@ -1402,6 +1402,15 @@ public class GeckoAppShell return sScreenDepth; } + public static synchronized void setScreenDepthOverride(int aScreenDepth) { + if (sScreenDepth != 0) { + Log.e(LOGTAG, "Tried to override screen depth after it's already been set"); + return; + } + + sScreenDepth = aScreenDepth; + } + public static void setFullScreen(boolean fullscreen) { if (getGeckoInterface() != null) getGeckoInterface().setFullScreen(fullscreen);