Bug 779366 - Part 2: Move DisplayMetrics to ConfigurationUtils. r=sriram

This commit is contained in:
Chris Peterson 2012-07-30 16:05:44 -07:00
parent 4251f0fb5a
commit 84fdc2c235
11 changed files with 61 additions and 27 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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);
}

View File

@ -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) {

View File

@ -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:

View File

@ -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)

View File

@ -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;
}

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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);
}
}