diff options
3 files changed, 37 insertions, 31 deletions
diff --git a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java index 4f0beb9767bd..d88e7eabe270 100755 --- a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java +++ b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java @@ -54,8 +54,6 @@ public class LibreOfficeMainActivity extends AppCompatActivity { private static final String ENABLE_EXPERIMENTAL_PREFS_KEY = "ENABLE_EXPERIMENTAL"; private static final String ASSETS_EXTRACTED_PREFS_KEY = "ASSETS_EXTRACTED"; - //TODO WIP: removing this static Context (in the following commits) - public static LibreOfficeMainActivity mAppContext; //TODO "public static" is a temporary workaround public static LOKitThread loKitThread; @@ -100,7 +98,6 @@ public class LibreOfficeMainActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { Log.w(LOGTAG, "onCreate.."); - mAppContext = this; super.onCreate(savedInstanceState); SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); diff --git a/android/source/src/java/org/mozilla/gecko/gfx/DisplayPortCalculator.java b/android/source/src/java/org/mozilla/gecko/gfx/DisplayPortCalculator.java index 838286b669a8..717aaec5d0c1 100644 --- a/android/source/src/java/org/mozilla/gecko/gfx/DisplayPortCalculator.java +++ b/android/source/src/java/org/mozilla/gecko/gfx/DisplayPortCalculator.java @@ -36,24 +36,30 @@ final class DisplayPortCalculator { private static final String PREF_DISPLAYPORT_VB_DANGER_Y_INCR = "gfx.displayport.strategy_vb.danger_y_incr"; private static final String PREF_DISPLAYPORT_PB_VELOCITY_THRESHOLD = "gfx.displayport.strategy_pb.threshold"; - private static DisplayPortStrategy sStrategy = new VelocityBiasStrategy(null); + private DisplayPortStrategy sStrategy; + private final LibreOfficeMainActivity mMainActivity; - static DisplayPortMetrics calculate(ImmutableViewportMetrics metrics, PointF velocity) { + DisplayPortCalculator(LibreOfficeMainActivity context) { + this.mMainActivity = context; + sStrategy = new VelocityBiasStrategy(mMainActivity, null); + } + + DisplayPortMetrics calculate(ImmutableViewportMetrics metrics, PointF velocity) { return sStrategy.calculate(metrics, (velocity == null ? ZERO_VELOCITY : velocity)); } - static boolean aboutToCheckerboard(ImmutableViewportMetrics metrics, PointF velocity, DisplayPortMetrics displayPort) { + boolean aboutToCheckerboard(ImmutableViewportMetrics metrics, PointF velocity, DisplayPortMetrics displayPort) { if (displayPort == null) { return true; } return sStrategy.aboutToCheckerboard(metrics, (velocity == null ? ZERO_VELOCITY : velocity), displayPort); } - static boolean drawTimeUpdate(long millis, int pixels) { + boolean drawTimeUpdate(long millis, int pixels) { return sStrategy.drawTimeUpdate(millis, pixels); } - static void resetPageState() { + void resetPageState() { sStrategy.resetPageState(); } @@ -77,7 +83,7 @@ final class DisplayPortCalculator { * See the gfx.displayport.strategy pref in mobile/android/app/mobile.js to see the * mapping between ints and strategies. */ - static boolean setStrategy(Map<String, Integer> prefs) { + boolean setStrategy(Map<String, Integer> prefs) { Integer strategy = prefs.get(PREF_DISPLAYPORT_STRATEGY); if (strategy == null) { return false; @@ -88,16 +94,16 @@ final class DisplayPortCalculator { sStrategy = new FixedMarginStrategy(prefs); break; case 1: - sStrategy = new VelocityBiasStrategy(prefs); + sStrategy = new VelocityBiasStrategy(mMainActivity, prefs); break; case 2: - sStrategy = new DynamicResolutionStrategy(prefs); + sStrategy = new DynamicResolutionStrategy(mMainActivity, prefs); break; case 3: sStrategy = new NoMarginStrategy(prefs); break; case 4: - sStrategy = new PredictionBiasStrategy(prefs); + sStrategy = new PredictionBiasStrategy(mMainActivity, prefs); break; default: Log.e(LOGTAG, "Invalid strategy index specified"); @@ -337,10 +343,9 @@ final class DisplayPortCalculator { private final float DANGER_ZONE_INCR_X_MULTIPLIER; private final float DANGER_ZONE_INCR_Y_MULTIPLIER; - VelocityBiasStrategy(Map<String, Integer> prefs) { + VelocityBiasStrategy(LibreOfficeMainActivity context, Map<String, Integer> prefs) { SIZE_MULTIPLIER = getFloatPref(prefs, PREF_DISPLAYPORT_VB_MULTIPLIER, 2000); - //TODO remove static reference to context - VELOCITY_THRESHOLD = LOKitShell.getDpi(LibreOfficeMainActivity.mAppContext) * getFloatPref(prefs, PREF_DISPLAYPORT_VB_VELOCITY_THRESHOLD, 32); + VELOCITY_THRESHOLD = LOKitShell.getDpi(context) * getFloatPref(prefs, PREF_DISPLAYPORT_VB_VELOCITY_THRESHOLD, 32); REVERSE_BUFFER = getFloatPref(prefs, PREF_DISPLAYPORT_VB_REVERSE_BUFFER, 200); DANGER_ZONE_BASE_X_MULTIPLIER = getFloatPref(prefs, PREF_DISPLAYPORT_VB_DANGER_X_BASE, 1000); DANGER_ZONE_BASE_Y_MULTIPLIER = getFloatPref(prefs, PREF_DISPLAYPORT_VB_DANGER_Y_BASE, 1000); @@ -448,14 +453,21 @@ final class DisplayPortCalculator { * where we draw less but never even show it on the screen. */ private static class DynamicResolutionStrategy extends DisplayPortStrategy { - // The length of each axis of the display port will be the corresponding view length - // multiplied by this factor. - private static final float SIZE_MULTIPLIER = 1.5f; // The velocity above which we start zooming out the display port to keep up // with the panning. - //TODO remove static reference to context - private static final float VELOCITY_EXPANSION_THRESHOLD = LOKitShell.getDpi(LibreOfficeMainActivity.mAppContext) / 16f; + private final float VELOCITY_EXPANSION_THRESHOLD; + + + DynamicResolutionStrategy(LibreOfficeMainActivity context, Map<String, Integer> prefs) { + // ignore prefs for now + VELOCITY_EXPANSION_THRESHOLD = LOKitShell.getDpi(context) / 16f; + VELOCITY_FAST_THRESHOLD = VELOCITY_EXPANSION_THRESHOLD * 2.0f; + } + + // The length of each axis of the display port will be the corresponding view length + // multiplied by this factor. + private static final float SIZE_MULTIPLIER = 1.5f; // How much we increase the display port based on velocity. Assuming no friction and // splitting (see below), this should be the number of frames (@60fps) between us @@ -481,7 +493,7 @@ final class DisplayPortCalculator { // assumption that if the user is panning fast, they are less likely to reverse directions // and go backwards, so we should spend more of our display port buffer in the direction of // panning. - private static final float VELOCITY_FAST_THRESHOLD = VELOCITY_EXPANSION_THRESHOLD * 2.0f; + private final float VELOCITY_FAST_THRESHOLD; private static final float FAST_SPLIT_FACTOR = 0.95f; private static final float SLOW_SPLIT_FACTOR = 0.8f; @@ -500,10 +512,6 @@ final class DisplayPortCalculator { private static final float PREDICTION_VELOCITY_MULTIPLIER = 30.0f; private static final float DANGER_ZONE_MULTIPLIER = 0.20f; // must be less than (SIZE_MULTIPLIER - 1.0f) - DynamicResolutionStrategy(Map<String, Integer> prefs) { - // ignore prefs for now - } - public DisplayPortMetrics calculate(ImmutableViewportMetrics metrics, PointF velocity) { float displayPortWidth = metrics.getWidth() * SIZE_MULTIPLIER; float displayPortHeight = metrics.getHeight() * SIZE_MULTIPLIER; @@ -655,9 +663,8 @@ final class DisplayPortCalculator { private int mMinFramesToDraw; // minimum number of frames we take to draw private int mMaxFramesToDraw; // maximum number of frames we take to draw - PredictionBiasStrategy(Map<String, Integer> prefs) { - //TODO remove static reference to context - VELOCITY_THRESHOLD = LOKitShell.getDpi(LibreOfficeMainActivity.mAppContext) * getFloatPref(prefs, PREF_DISPLAYPORT_PB_VELOCITY_THRESHOLD, 16); + PredictionBiasStrategy(LibreOfficeMainActivity context, Map<String, Integer> prefs) { + VELOCITY_THRESHOLD = LOKitShell.getDpi(context) * getFloatPref(prefs, PREF_DISPLAYPORT_PB_VELOCITY_THRESHOLD, 16); resetPageState(); } diff --git a/android/source/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java b/android/source/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java index 12c939690200..ad73d50f4c36 100644 --- a/android/source/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java +++ b/android/source/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java @@ -49,6 +49,7 @@ public class GeckoLayerClient implements PanZoomTarget { private PanZoomController mPanZoomController; private LayerView mView; + private final DisplayPortCalculator mDisplayPortCalculator; public GeckoLayerClient(LibreOfficeMainActivity context) { // we can fill these in with dummy values because they are always written @@ -56,6 +57,7 @@ public class GeckoLayerClient implements PanZoomTarget { mContext = context; mScreenSize = new IntSize(0, 0); mDisplayPort = new DisplayPortMetrics(); + mDisplayPortCalculator = new DisplayPortCalculator(mContext); mForceRedraw = true; DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); @@ -112,7 +114,7 @@ public class GeckoLayerClient implements PanZoomTarget { if (!mPanZoomController.getRedrawHint()) { return false; } - return DisplayPortCalculator.aboutToCheckerboard(mViewportMetrics, mPanZoomController.getVelocityVector(), getDisplayPort()); + return mDisplayPortCalculator.aboutToCheckerboard(mViewportMetrics, mPanZoomController.getVelocityVector(), getDisplayPort()); } /** @@ -175,7 +177,7 @@ public class GeckoLayerClient implements PanZoomTarget { ImmutableViewportMetrics clampedMetrics = metrics.clamp(); if (displayPort == null) { - displayPort = DisplayPortCalculator.calculate(metrics, mPanZoomController.getVelocityVector()); + displayPort = mDisplayPortCalculator.calculate(metrics, mPanZoomController.getVelocityVector()); } mDisplayPort = displayPort; @@ -258,7 +260,7 @@ public class GeckoLayerClient implements PanZoomTarget { // immediately request a draw of that area by setting the display port // accordingly. This way we should have the content pre-rendered by the // time the animation is done. - DisplayPortMetrics displayPort = DisplayPortCalculator.calculate(viewport, null); + DisplayPortMetrics displayPort = mDisplayPortCalculator.calculate(viewport, null); adjustViewport(displayPort); } } |