Merge "Also factor the floating rotation button into the active touch region" into rvc-qpr-dev
This commit is contained in:
@@ -33,6 +33,8 @@ import com.android.systemui.R;
|
||||
import com.android.systemui.statusbar.policy.KeyButtonDrawable;
|
||||
import com.android.systemui.statusbar.policy.KeyButtonView;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/** Containing logic for the rotation button on the physical left bottom corner of the screen. */
|
||||
public class FloatingRotationButton implements RotationButton {
|
||||
|
||||
@@ -48,6 +50,7 @@ public class FloatingRotationButton implements RotationButton {
|
||||
private boolean mCanShow = true;
|
||||
|
||||
private RotationButtonController mRotationButtonController;
|
||||
private Consumer<Boolean> mVisibilityChangedCallback;
|
||||
|
||||
FloatingRotationButton(Context context) {
|
||||
mContext = context;
|
||||
@@ -67,6 +70,11 @@ public class FloatingRotationButton implements RotationButton {
|
||||
mRotationButtonController = rotationButtonController;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisibilityChangedCallback(Consumer<Boolean> visibilityChangedCallback) {
|
||||
mVisibilityChangedCallback = visibilityChangedCallback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getCurrentView() {
|
||||
return mKeyButtonView;
|
||||
@@ -107,6 +115,16 @@ public class FloatingRotationButton implements RotationButton {
|
||||
mKeyButtonDrawable.resetAnimation();
|
||||
mKeyButtonDrawable.startAnimation();
|
||||
}
|
||||
mKeyButtonView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
|
||||
@Override
|
||||
public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5,
|
||||
int i6, int i7) {
|
||||
if (mIsShowing && mVisibilityChangedCallback != null) {
|
||||
mVisibilityChangedCallback.accept(true);
|
||||
}
|
||||
mKeyButtonView.removeOnLayoutChangeListener(this);
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -117,6 +135,9 @@ public class FloatingRotationButton implements RotationButton {
|
||||
}
|
||||
mWindowManager.removeViewImmediate(mKeyButtonView);
|
||||
mIsShowing = false;
|
||||
if (mVisibilityChangedCallback != null) {
|
||||
mVisibilityChangedCallback.accept(false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -354,15 +354,6 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
|
||||
}
|
||||
};
|
||||
|
||||
private final ContextButtonListener mRotationButtonListener = (button, visible) -> {
|
||||
if (visible) {
|
||||
// If the button will actually become visible and the navbar is about to hide,
|
||||
// tell the statusbar to keep it around for longer
|
||||
mAutoHideController.touchAutoHide();
|
||||
mNavigationBarView.notifyActiveTouchRegions();
|
||||
}
|
||||
};
|
||||
|
||||
private final Runnable mAutoDim = () -> getBarTransitions().setAutoDim(true);
|
||||
|
||||
private final ContentObserver mAssistContentObserver = new ContentObserver(
|
||||
@@ -522,8 +513,6 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
|
||||
|
||||
// Currently there is no accelerometer sensor on non-default display.
|
||||
if (mIsOnDefaultDisplay) {
|
||||
mNavigationBarView.getRotateSuggestionButton().setListener(mRotationButtonListener);
|
||||
|
||||
final RotationButtonController rotationButtonController =
|
||||
mNavigationBarView.getRotationButtonController();
|
||||
rotationButtonController.addRotationCallback(mRotationWatcher);
|
||||
@@ -1316,6 +1305,7 @@ public class NavigationBarFragment extends LifecycleFragment implements Callback
|
||||
if (mAutoHideController != null) {
|
||||
mAutoHideController.setNavigationBar(mAutoHideUiElement);
|
||||
}
|
||||
mNavigationBarView.setAutoHideController(autoHideController);
|
||||
}
|
||||
|
||||
private boolean isTransientShown() {
|
||||
|
||||
@@ -126,6 +126,7 @@ public class NavigationBarView extends FrameLayout implements
|
||||
private boolean mDeadZoneConsuming = false;
|
||||
private final NavigationBarTransitions mBarTransitions;
|
||||
private final OverviewProxyService mOverviewProxyService;
|
||||
private AutoHideController mAutoHideController;
|
||||
|
||||
// performs manual animation in sync with layout transitions
|
||||
private final NavTransitionListener mTransitionListener = new NavTransitionListener();
|
||||
@@ -271,6 +272,15 @@ public class NavigationBarView extends FrameLayout implements
|
||||
info.touchableRegion.setEmpty();
|
||||
};
|
||||
|
||||
private final Consumer<Boolean> mRotationButtonListener = (visible) -> {
|
||||
if (visible) {
|
||||
// If the button will actually become visible and the navbar is about to hide,
|
||||
// tell the statusbar to keep it around for longer
|
||||
mAutoHideController.touchAutoHide();
|
||||
}
|
||||
notifyActiveTouchRegions();
|
||||
};
|
||||
|
||||
public NavigationBarView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
@@ -301,7 +311,8 @@ public class NavigationBarView extends FrameLayout implements
|
||||
mFloatingRotationButton = new FloatingRotationButton(context);
|
||||
mRotationButtonController = new RotationButtonController(context,
|
||||
R.style.RotateButtonCCWStart90,
|
||||
isGesturalMode ? mFloatingRotationButton : rotateSuggestionButton);
|
||||
isGesturalMode ? mFloatingRotationButton : rotateSuggestionButton,
|
||||
mRotationButtonListener);
|
||||
|
||||
mConfiguration = new Configuration();
|
||||
mTmpLastConfiguration = new Configuration();
|
||||
@@ -349,6 +360,10 @@ public class NavigationBarView extends FrameLayout implements
|
||||
});
|
||||
}
|
||||
|
||||
public void setAutoHideController(AutoHideController autoHideController) {
|
||||
mAutoHideController = autoHideController;
|
||||
}
|
||||
|
||||
public NavigationBarTransitions getBarTransitions() {
|
||||
return mBarTransitions;
|
||||
}
|
||||
@@ -936,7 +951,15 @@ public class NavigationBarView extends FrameLayout implements
|
||||
updateButtonLocation(getBackButton());
|
||||
updateButtonLocation(getHomeButton());
|
||||
updateButtonLocation(getRecentsButton());
|
||||
updateButtonLocation(getRotateSuggestionButton());
|
||||
updateButtonLocation(getImeSwitchButton());
|
||||
updateButtonLocation(getAccessibilityButton());
|
||||
if (mFloatingRotationButton.isVisible()) {
|
||||
View floatingRotationView = mFloatingRotationButton.getCurrentView();
|
||||
floatingRotationView.getBoundsOnScreen(mTmpBounds);
|
||||
mActiveRegion.op(mTmpBounds, Op.UNION);
|
||||
} else {
|
||||
updateButtonLocation(getRotateSuggestionButton());
|
||||
}
|
||||
mOverviewProxyService.onActiveNavBarRegionChanges(mActiveRegion);
|
||||
}
|
||||
|
||||
@@ -1208,6 +1231,7 @@ public class NavigationBarView extends FrameLayout implements
|
||||
dumpButton(pw, "rcnt", getRecentsButton());
|
||||
dumpButton(pw, "rota", getRotateSuggestionButton());
|
||||
dumpButton(pw, "a11y", getAccessibilityButton());
|
||||
dumpButton(pw, "ime", getImeSwitchButton());
|
||||
|
||||
pw.println(" }");
|
||||
pw.println(" mScreenOn: " + mScreenOn);
|
||||
|
||||
@@ -20,9 +20,12 @@ import android.view.View;
|
||||
|
||||
import com.android.systemui.statusbar.policy.KeyButtonDrawable;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/** Interface of a rotation button that interacts {@link RotationButtonController}. */
|
||||
interface RotationButton {
|
||||
void setRotationButtonController(RotationButtonController rotationButtonController);
|
||||
void setVisibilityChangedCallback(Consumer<Boolean> visibilityChangedCallback);
|
||||
View getCurrentView();
|
||||
boolean show();
|
||||
boolean hide();
|
||||
|
||||
@@ -117,7 +117,8 @@ public class RotationButtonController {
|
||||
return (disable2Flags & StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS) != 0;
|
||||
}
|
||||
|
||||
RotationButtonController(Context context, @StyleRes int style, RotationButton rotationButton) {
|
||||
RotationButtonController(Context context, @StyleRes int style, RotationButton rotationButton,
|
||||
Consumer<Boolean> visibilityChangedCallback) {
|
||||
mContext = context;
|
||||
mRotationButton = rotationButton;
|
||||
mRotationButton.setRotationButtonController(this);
|
||||
@@ -131,6 +132,7 @@ public class RotationButtonController {
|
||||
mTaskStackListener = new TaskStackListenerImpl();
|
||||
mRotationButton.setOnClickListener(this::onRotateSuggestionClick);
|
||||
mRotationButton.setOnHoverListener(this::onRotateSuggestionHover);
|
||||
mRotationButton.setVisibilityChangedCallback(visibilityChangedCallback);
|
||||
}
|
||||
|
||||
void registerListeners() {
|
||||
|
||||
@@ -26,6 +26,8 @@ import android.view.View;
|
||||
|
||||
import com.android.systemui.statusbar.policy.KeyButtonDrawable;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/** Containing logic for the rotation button in nav bar. */
|
||||
public class RotationContextButton extends ContextualButton implements
|
||||
NavigationModeController.ModeChangedListener, RotationButton {
|
||||
@@ -43,6 +45,18 @@ public class RotationContextButton extends ContextualButton implements
|
||||
mRotationButtonController = rotationButtonController;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisibilityChangedCallback(Consumer<Boolean> visibilityChangedCallback) {
|
||||
setListener(new ContextButtonListener() {
|
||||
@Override
|
||||
public void onVisibilityChanged(ContextualButton button, boolean visible) {
|
||||
if (visibilityChangedCallback != null) {
|
||||
visibilityChangedCallback.accept(visible);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisibility(int visibility) {
|
||||
super.setVisibility(visibility);
|
||||
|
||||
@@ -60,7 +60,8 @@ public class NavigationBarRotationContextTest extends SysuiTestCase {
|
||||
final View view = new View(mContext);
|
||||
mRotationButton = mock(RotationButton.class);
|
||||
mRotationButtonController = spy(
|
||||
new RotationButtonController(mContext, RES_UNDEF, mRotationButton));
|
||||
new RotationButtonController(mContext, RES_UNDEF, mRotationButton,
|
||||
(visibility) -> {}));
|
||||
final KeyButtonDrawable kbd = mock(KeyButtonDrawable.class);
|
||||
doReturn(view).when(mRotationButton).getCurrentView();
|
||||
doReturn(true).when(mRotationButton).acceptRotationProposal();
|
||||
|
||||
Reference in New Issue
Block a user