Bug 1359659 - Ensure the complete pinned state is sent from the UI thread to the compositor r=jchen
MozReview-Commit-ID: GXRtfDZ8R17
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/DynamicToolbarAnimator.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/gfx/DynamicToolbarAnimator.java
@@ -25,33 +25,33 @@ public class DynamicToolbarAnimator {
DISABLED(0),
RELAYOUT(1),
ACTION_MODE(2),
FULL_SCREEN(3),
CARET_DRAG(4),
PAGE_LOADING(5),
CUSTOM_TAB(6);
- public final int mValue;
- PinReason(final int value) {
- mValue = value;
+ public final int value;
+ PinReason(final int aValue) {
+ value = aValue;
}
}
public interface MetricsListener {
public void onMetricsChanged(ImmutableViewportMetrics viewport);
}
public interface ToolbarChromeProxy {
public Bitmap getBitmapOfToolbarChrome();
public boolean isToolbarChromeVisible();
public void toggleToolbarChrome(boolean aShow);
}
- private final Set<PinReason> pinFlags = Collections.synchronizedSet(EnumSet.noneOf(PinReason.class));
+ private final Set<PinReason> mPinFlags = Collections.synchronizedSet(EnumSet.noneOf(PinReason.class));
private final GeckoLayerClient mTarget;
private LayerView.Compositor mCompositor;
private final List<MetricsListener> mListeners;
private ToolbarChromeProxy mToolbarChromeProxy;
private int mMaxToolbarHeight;
private boolean mCompositorControllerOpen;
@@ -98,32 +98,32 @@ public class DynamicToolbarAnimator {
}
return 0;
}
/**
* If true, scroll changes will not affect translation.
*/
public boolean isPinned() {
- return !pinFlags.isEmpty();
+ return !mPinFlags.isEmpty();
}
public boolean isPinnedBy(PinReason reason) {
- return pinFlags.contains(reason);
+ return mPinFlags.contains(reason);
}
public void setPinned(boolean pinned, PinReason reason) {
- if ((mCompositor != null) && (pinned != pinFlags.contains(reason))) {
- mCompositor.setPinned(pinned, reason.mValue);
+ if ((mCompositor != null) && (pinned != mPinFlags.contains(reason))) {
+ mCompositor.setPinned(pinned, reason.value);
}
if (pinned) {
- pinFlags.add(reason);
+ mPinFlags.add(reason);
} else {
- pinFlags.remove(reason);
+ mPinFlags.remove(reason);
}
}
public void showToolbar(boolean immediately) {
if (mCompositor != null) {
mCompositor.sendToolbarAnimatorMessage(immediately ?
LayerView.REQUEST_SHOW_TOOLBAR_IMMEDIATELY : LayerView.REQUEST_SHOW_TOOLBAR_ANIMATED);
}
@@ -155,18 +155,18 @@ public class DynamicToolbarAnimator {
private void dumpStateToCompositor() {
if ((mCompositor != null) && mCompositorControllerOpen) {
mCompositor.setMaxToolbarHeight(mMaxToolbarHeight);
if ((mToolbarChromeProxy != null) && mToolbarChromeProxy.isToolbarChromeVisible()) {
mCompositor.sendToolbarAnimatorMessage(LayerView.REQUEST_SHOW_TOOLBAR_IMMEDIATELY);
} else {
mCompositor.sendToolbarAnimatorMessage(LayerView.REQUEST_HIDE_TOOLBAR_IMMEDIATELY);
}
- for (PinReason reason : pinFlags) {
- mCompositor.setPinned(true, reason.mValue);
+ for (PinReason reason : PinReason.values()) {
+ mCompositor.setPinned(mPinFlags.contains(reason), reason.value);
}
} else if ((mCompositor != null) && !mCompositorControllerOpen) {
// Ask the UiCompositorControllerChild if it is open since the open message can
// sometimes be sent to a different instance of the LayerView such as when
// Fennec is being used in custom tabs.
mCompositor.sendToolbarAnimatorMessage(LayerView.IS_COMPOSITOR_CONTROLLER_OPEN);
}
}