From 84fdc2c2358816c575da866c808dafeb9aeaf8f6 Mon Sep 17 00:00:00 2001 From: Chris Peterson Date: Mon, 30 Jul 2012 16:05:44 -0700 Subject: [PATCH] Bug 779366 - Part 2: Move DisplayMetrics to ConfigurationUtils. r=sriram --- mobile/android/base/GeckoApp.java | 10 ++---- mobile/android/base/GeckoAppShell.java | 5 +-- mobile/android/base/GeckoEvent.java | 3 +- mobile/android/base/GeckoInputConnection.java | 9 ++--- .../base/GeckoScreenOrientationListener.java | 4 ++- mobile/android/base/LauncherShortcuts.java.in | 4 +-- mobile/android/base/Makefile.in | 1 + mobile/android/base/gfx/LayerController.java | 5 ++- mobile/android/base/gfx/ViewportMetrics.java | 12 +++---- mobile/android/base/ui/PanZoomController.java | 2 +- .../android/base/util/ConfigurationUtils.java | 33 +++++++++++++++++++ 11 files changed, 61 insertions(+), 27 deletions(-) create mode 100644 mobile/android/base/util/ConfigurationUtils.java diff --git a/mobile/android/base/GeckoApp.java b/mobile/android/base/GeckoApp.java index dafa81cbcc7..d71e1f91cb1 100644 --- a/mobile/android/base/GeckoApp.java +++ b/mobile/android/base/GeckoApp.java @@ -13,6 +13,7 @@ import org.mozilla.gecko.gfx.LayerView; import org.mozilla.gecko.gfx.PluginLayer; import org.mozilla.gecko.gfx.PointUtils; import org.mozilla.gecko.ui.PanZoomController; +import org.mozilla.gecko.util.ConfigurationUtils; import org.json.JSONArray; import org.json.JSONException; @@ -476,8 +477,7 @@ abstract public class GeckoApp protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); - DisplayMetrics metrics = new DisplayMetrics(); - ((Activity) GeckoApp.mAppContext).getWindowManager().getDefaultDisplay().getMetrics(metrics); + DisplayMetrics metrics = ConfigurationUtils.getDisplayMetrics(mAppContext); // heightPixels changes during rotation. int restrictedHeightSpec = MeasureSpec.makeMeasureSpec((int) (0.75 * metrics.heightPixels), MeasureSpec.AT_MOST); @@ -605,12 +605,6 @@ abstract public class GeckoApp outState.putString(SAVED_STATE_TITLE, tab.getDisplayTitle()); } - public DisplayMetrics getDisplayMetrics() { - DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); - return metrics; - } - public void getAndProcessThumbnailForTab(final Tab tab) { boolean isSelectedTab = Tabs.getInstance().isSelectedTab(tab); final Bitmap bitmap = isSelectedTab ? mLayerClient.getBitmap() : null; diff --git a/mobile/android/base/GeckoAppShell.java b/mobile/android/base/GeckoAppShell.java index 0528309fa8e..7e8535dca0e 100644 --- a/mobile/android/base/GeckoAppShell.java +++ b/mobile/android/base/GeckoAppShell.java @@ -14,6 +14,7 @@ import org.mozilla.gecko.gfx.LayerController; import org.mozilla.gecko.gfx.LayerView; import org.mozilla.gecko.gfx.RectUtils; import org.mozilla.gecko.gfx.ScreenshotLayer; +import org.mozilla.gecko.util.ConfigurationUtils; import org.mozilla.gecko.util.FloatUtils; import org.json.JSONObject; @@ -524,7 +525,7 @@ public class GeckoAppShell if (restoreMode != RESTORE_NONE) combinedArgs += " -restoremode " + restoreMode; - DisplayMetrics metrics = GeckoApp.mAppContext.getDisplayMetrics(); + DisplayMetrics metrics = ConfigurationUtils.getDisplayMetrics(GeckoApp.mAppContext); combinedArgs += " -width " + metrics.widthPixels + " -height " + metrics.heightPixels; GeckoApp.mAppContext.runOnUiThread(new Runnable() { @@ -1395,7 +1396,7 @@ public class GeckoAppShell public static int getDpi() { if (sDensityDpi == 0) { - sDensityDpi = GeckoApp.mAppContext.getDisplayMetrics().densityDpi; + sDensityDpi = ConfigurationUtils.getDisplayMetrics(GeckoApp.mAppContext).densityDpi; } return sDensityDpi; diff --git a/mobile/android/base/GeckoEvent.java b/mobile/android/base/GeckoEvent.java index db0c41392eb..961bd2f5e2e 100644 --- a/mobile/android/base/GeckoEvent.java +++ b/mobile/android/base/GeckoEvent.java @@ -7,6 +7,7 @@ package org.mozilla.gecko; import org.mozilla.gecko.gfx.DisplayPortMetrics; import org.mozilla.gecko.gfx.ViewportMetrics; +import org.mozilla.gecko.util.ConfigurationUtils; import android.graphics.Point; import android.graphics.PointF; @@ -256,7 +257,7 @@ public class GeckoEvent { } } else { float size = event.getSize(eventIndex); - DisplayMetrics displaymetrics = GeckoApp.mAppContext.getDisplayMetrics(); + DisplayMetrics displaymetrics = ConfigurationUtils.getDisplayMetrics(GeckoApp.mAppContext); size = size*Math.min(displaymetrics.heightPixels, displaymetrics.widthPixels); mPointRadii[index] = new Point((int)size,(int)size); mOrientations[index] = 0; diff --git a/mobile/android/base/GeckoInputConnection.java b/mobile/android/base/GeckoInputConnection.java index 4a73f088285..25828518b31 100644 --- a/mobile/android/base/GeckoInputConnection.java +++ b/mobile/android/base/GeckoInputConnection.java @@ -7,6 +7,7 @@ package org.mozilla.gecko; import org.mozilla.gecko.gfx.InputConnectionHandler; import org.mozilla.gecko.gfx.LayerController; +import org.mozilla.gecko.util.ConfigurationUtils; import android.R; import android.content.Context; @@ -839,8 +840,8 @@ public class GeckoInputConnection else if (mIMEActionHint != null && mIMEActionHint.length() != 0) outAttrs.actionLabel = mIMEActionHint; - GeckoApp app = GeckoApp.mAppContext; - DisplayMetrics metrics = app.getDisplayMetrics(); + GeckoApp context = GeckoApp.mAppContext; + DisplayMetrics metrics = ConfigurationUtils.getDisplayMetrics(context); if (Math.min(metrics.widthPixels, metrics.heightPixels) > INLINE_IME_MIN_DISPLAY_SIZE) { // prevent showing full-screen keyboard only when the screen is tall enough // to show some reasonable amount of the page (see bug 752709) @@ -856,11 +857,11 @@ public class GeckoInputConnection } String prevInputMethod = mCurrentInputMethod; - mCurrentInputMethod = InputMethods.getCurrentInputMethod(app); + mCurrentInputMethod = InputMethods.getCurrentInputMethod(context); // If the user has changed IMEs, then notify input method observers. if (mCurrentInputMethod != prevInputMethod) { - FormAssistPopup popup = app.mFormAssistPopup; + FormAssistPopup popup = context.mFormAssistPopup; if (popup != null) { popup.onInputMethodChanged(mCurrentInputMethod); } diff --git a/mobile/android/base/GeckoScreenOrientationListener.java b/mobile/android/base/GeckoScreenOrientationListener.java index d51c611b7e9..1db3cc22e54 100644 --- a/mobile/android/base/GeckoScreenOrientationListener.java +++ b/mobile/android/base/GeckoScreenOrientationListener.java @@ -4,6 +4,8 @@ package org.mozilla.gecko; +import org.mozilla.gecko.util.ConfigurationUtils; + import android.content.Context; import android.content.pm.ActivityInfo; import android.util.Log; @@ -103,7 +105,7 @@ public class GeckoScreenOrientationListener // NOTE: this is public so OrientationEventListenerImpl can access it. // Unfortunately, Java doesn't know about friendship. public void updateScreenOrientation() { - int rotation = GeckoApp.mAppContext.getWindowManager().getDefaultDisplay().getRotation(); + int rotation = ConfigurationUtils.getDefaultDisplay(GeckoApp.mAppContext).getRotation(); short previousOrientation = mOrientation; if (rotation == Surface.ROTATION_0) { diff --git a/mobile/android/base/LauncherShortcuts.java.in b/mobile/android/base/LauncherShortcuts.java.in index 9c15f912098..91bb96356d1 100644 --- a/mobile/android/base/LauncherShortcuts.java.in +++ b/mobile/android/base/LauncherShortcuts.java.in @@ -28,6 +28,7 @@ import org.mozilla.gecko.GeckoApp; import org.mozilla.gecko.GeckoProfile; import org.mozilla.gecko.R; import org.mozilla.gecko.WebAppAllocator; +import org.mozilla.gecko.util.ConfigurationUtils; import java.io.BufferedReader; import java.io.File; @@ -94,8 +95,7 @@ public class LauncherShortcuts extends Activity { intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, title); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutintent); - DisplayMetrics dm = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(dm); + DisplayMetrics dm = ConfigurationUtils.getDisplayMetrics(this); int size; switch (dm.densityDpi) { case DisplayMetrics.DENSITY_MEDIUM: diff --git a/mobile/android/base/Makefile.in b/mobile/android/base/Makefile.in index 36d8e4605bd..aa6175c4f6b 100644 --- a/mobile/android/base/Makefile.in +++ b/mobile/android/base/Makefile.in @@ -17,6 +17,7 @@ DIST_FILES = package-name.txt include $(topsrcdir)/mobile/android/base/android-sync-files.mk UTIL_JAVA_FILES := \ + util/ConfigurationUtils.java \ util/FloatUtils.java \ $(NULL) diff --git a/mobile/android/base/gfx/LayerController.java b/mobile/android/base/gfx/LayerController.java index 8f6d6d43945..680d17bdfcc 100644 --- a/mobile/android/base/gfx/LayerController.java +++ b/mobile/android/base/gfx/LayerController.java @@ -7,6 +7,7 @@ package org.mozilla.gecko.gfx; import org.mozilla.gecko.ui.PanZoomController; import org.mozilla.gecko.ui.SimpleScaleGestureDetector; +import org.mozilla.gecko.util.ConfigurationUtils; import android.content.Context; import android.content.res.Resources; @@ -15,6 +16,7 @@ import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.PointF; import android.graphics.RectF; +import android.util.DisplayMetrics; import android.view.GestureDetector; /** @@ -67,7 +69,8 @@ public class LayerController { mContext = context; mForceRedraw = true; - mViewportMetrics = new ImmutableViewportMetrics(new ViewportMetrics()); + DisplayMetrics metrics = ConfigurationUtils.getDisplayMetrics(context); + mViewportMetrics = new ImmutableViewportMetrics(new ViewportMetrics(metrics)); mPanZoomController = new PanZoomController(this); mCheckerboardShouldShowChecks = true; } diff --git a/mobile/android/base/gfx/ViewportMetrics.java b/mobile/android/base/gfx/ViewportMetrics.java index 7efb0f50a9e..0a077b0a82e 100644 --- a/mobile/android/base/gfx/ViewportMetrics.java +++ b/mobile/android/base/gfx/ViewportMetrics.java @@ -5,7 +5,6 @@ package org.mozilla.gecko.gfx; -import org.mozilla.gecko.GeckoApp; import org.mozilla.gecko.util.FloatUtils; import org.json.JSONException; @@ -19,7 +18,7 @@ import android.util.DisplayMetrics; * ViewportMetrics manages state and contains some utility functions related to * the page viewport for the Gecko layer client to use. */ -public class ViewportMetrics { +public final class ViewportMetrics { private static final String LOGTAG = "GeckoViewportMetrics"; private RectF mPageRect; @@ -27,9 +26,7 @@ public class ViewportMetrics { private RectF mViewportRect; private float mZoomFactor; - public ViewportMetrics() { - DisplayMetrics metrics = GeckoApp.mAppContext.getDisplayMetrics(); - + public ViewportMetrics(DisplayMetrics metrics) { mPageRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels); mCssPageRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels); mViewportRect = new RectF(0, 0, metrics.widthPixels, metrics.heightPixels); @@ -59,7 +56,6 @@ public class ViewportMetrics { mZoomFactor = viewport.zoomFactor; } - public ViewportMetrics(JSONObject json) throws JSONException { float x = (float)json.getDouble("x"); float y = (float)json.getDouble("y"); @@ -81,6 +77,9 @@ public class ViewportMetrics { mZoomFactor = zoom; } + private ViewportMetrics() { + } + public PointF getOrigin() { return new PointF(mViewportRect.left, mViewportRect.top); } @@ -227,4 +226,3 @@ public class ViewportMetrics { return buff.toString(); } } - diff --git a/mobile/android/base/ui/PanZoomController.java b/mobile/android/base/ui/PanZoomController.java index d3a3db2e0fa..c160e8ea3ac 100644 --- a/mobile/android/base/ui/PanZoomController.java +++ b/mobile/android/base/ui/PanZoomController.java @@ -10,8 +10,8 @@ import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoEvent; import org.mozilla.gecko.GeckoEventListener; import org.mozilla.gecko.gfx.LayerController; -import org.mozilla.gecko.gfx.ViewportMetrics; import org.mozilla.gecko.gfx.PointUtils; +import org.mozilla.gecko.gfx.ViewportMetrics; import org.mozilla.gecko.util.FloatUtils; import org.json.JSONArray; diff --git a/mobile/android/base/util/ConfigurationUtils.java b/mobile/android/base/util/ConfigurationUtils.java new file mode 100644 index 00000000000..bfad045d11c --- /dev/null +++ b/mobile/android/base/util/ConfigurationUtils.java @@ -0,0 +1,33 @@ +/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.gecko.util; + +import android.content.Context; +import android.util.DisplayMetrics; +import android.view.Display; +import android.view.WindowManager; + +public final class ConfigurationUtils { + private ConfigurationUtils() {} + + public static DisplayMetrics getDisplayMetrics(Context context) { + DisplayMetrics metrics = new DisplayMetrics(); + getDefaultDisplay(context).getMetrics(metrics); + return metrics; + } + + public static int getDisplayRotation(Context context) { + return getDefaultDisplay(context).getRotation(); + } + + public static Display getDefaultDisplay(Context context) { + return getWindowManager(context).getDefaultDisplay(); + } + + private static WindowManager getWindowManager(Context context) { + return (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + } +}