Merge "Fix bugs with hotseat in overview" into ub-launcher3-qt-dev

This commit is contained in:
Tony Wickham
2019-06-18 21:51:54 +00:00
committed by Android (Google) Code Review
7 changed files with 65 additions and 6 deletions

View File

@@ -83,4 +83,16 @@ public class BackgroundAppState extends OverviewState {
public int getVisibleElements(Launcher launcher) {
return super.getVisibleElements(launcher) & ~RECENTS_CLEAR_ALL_BUTTON;
}
@Override
public ScaleAndTranslation getHotseatScaleAndTranslation(Launcher launcher) {
if ((getVisibleElements(launcher) & HOTSEAT_ICONS) != 0) {
// Translate hotseat offscreen if we show it in overview.
ScaleAndTranslation scaleAndTranslation = super.getHotseatScaleAndTranslation(launcher);
scaleAndTranslation.translationY = LayoutUtils.getShelfTrackingDistance(launcher,
launcher.getDeviceProfile());
return scaleAndTranslation;
}
return super.getHotseatScaleAndTranslation(launcher);
}
}

View File

@@ -127,6 +127,10 @@ public class OverviewState extends LauncherState {
// We have no all apps content, so we're still at the fully down progress.
return super.getVerticalProgress(launcher);
}
return getDefaultVerticalProgress(launcher);
}
public static float getDefaultVerticalProgress(Launcher launcher) {
return 1 - (getDefaultSwipeHeight(launcher)
/ launcher.getAllAppsController().getShiftRange());
}

View File

@@ -16,7 +16,6 @@
package com.android.quickstep;
import static android.view.View.TRANSLATION_Y;
import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY;
import static com.android.launcher3.LauncherState.BACKGROUND_APP;
import static com.android.launcher3.LauncherState.NORMAL;
@@ -62,6 +61,7 @@ import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.anim.AnimatorSetBuilder;
import com.android.launcher3.anim.SpringObjectAnimator;
import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.uioverrides.states.OverviewState;
import com.android.launcher3.userevent.nano.LauncherLogProto;
import com.android.launcher3.views.FloatingIconView;
import com.android.quickstep.SysUINavigationMode.Mode;
@@ -260,8 +260,11 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe
}
float shelfHiddenProgress = BACKGROUND_APP.getVerticalProgress(activity);
float shelfOverviewProgress = OVERVIEW.getVerticalProgress(activity);
// Peek based on default overview progress so we can see hotseat if we're showing
// that instead of predictions in overview.
float defaultOverviewProgress = OverviewState.getDefaultVerticalProgress(activity);
float shelfPeekingProgress = shelfHiddenProgress
- (shelfHiddenProgress - shelfOverviewProgress) * 0.25f;
- (shelfHiddenProgress - defaultOverviewProgress) * 0.25f;
float toProgress = mShelfState == ShelfAnimState.HIDE
? shelfHiddenProgress
: mShelfState == ShelfAnimState.PEEK

View File

@@ -33,9 +33,11 @@ import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.Build;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Hotseat;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
import com.android.launcher3.LauncherStateManager.StateListener;
@@ -250,4 +252,16 @@ public class LauncherRecentsView extends RecentsView<Launcher> implements StateL
setDisallowScrollToClearAll(!hasClearAllButton);
}
}
@Override
protected boolean shouldStealTouchFromSiblingsBelow(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// Allow touches to go through to the hotseat.
Hotseat hotseat = mActivity.getHotseat();
boolean touchingHotseat = hotseat.isShown()
&& mActivity.getDragLayer().isEventOverView(hotseat, ev, this);
return !touchingHotseat;
}
return super.shouldStealTouchFromSiblingsBelow(ev);
}
}

View File

@@ -521,6 +521,10 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
// Do not let touch escape to siblings below this view.
return isHandlingTouch() || shouldStealTouchFromSiblingsBelow(ev);
}
protected boolean shouldStealTouchFromSiblingsBelow(MotionEvent ev) {
return true;
}

View File

@@ -2,6 +2,8 @@ package com.android.launcher3.allapps;
import static com.android.launcher3.LauncherState.ALL_APPS_CONTENT;
import static com.android.launcher3.LauncherState.ALL_APPS_HEADER_EXTRA;
import static com.android.launcher3.LauncherState.BACKGROUND_APP;
import static com.android.launcher3.LauncherState.HOTSEAT_ICONS;
import static com.android.launcher3.LauncherState.OVERVIEW;
import static com.android.launcher3.LauncherState.VERTICAL_SWIPE_INDICATOR;
import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_ALL_APPS_FADE;
@@ -28,15 +30,12 @@ import com.android.launcher3.ProgressInterface;
import com.android.launcher3.R;
import com.android.launcher3.anim.AnimationSuccessListener;
import com.android.launcher3.anim.AnimatorSetBuilder;
import com.android.launcher3.anim.SpringObjectAnimator;
import com.android.launcher3.anim.PropertySetter;
import com.android.launcher3.anim.SpringObjectAnimator;
import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.util.MultiValueAlpha;
import com.android.launcher3.util.Themes;
import com.android.launcher3.views.ScrimView;
import androidx.dynamicanimation.animation.FloatPropertyCompat;
/**
* Handles AllApps view transition.
* 1) Slides all apps view using direct manipulation
@@ -139,6 +138,15 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil
} else {
mLauncher.getSystemUiController().updateUiState(UI_STATE_ALL_APPS, 0);
}
if ((OVERVIEW.getVisibleElements(mLauncher) & HOTSEAT_ICONS) != 0) {
// Translate hotseat with the shelf until reaching overview.
float overviewProgress = OVERVIEW.getVerticalProgress(mLauncher);
if (progress >= overviewProgress || mLauncher.isInState(BACKGROUND_APP)) {
float hotseatShift = (progress - overviewProgress) * mShiftRange;
mLauncher.getHotseat().setTranslationY(hotseatShift);
}
}
}
@Override

View File

@@ -116,11 +116,25 @@ public abstract class BaseDragLayer<T extends Context & ActivityContext>
mMultiValueAlpha = new MultiValueAlpha(this, alphaChannelCount);
}
/**
* Same as {@link #isEventOverView(View, MotionEvent, View)} where evView == this drag layer.
*/
public boolean isEventOverView(View view, MotionEvent ev) {
getDescendantRectRelativeToSelf(view, mHitRect);
return mHitRect.contains((int) ev.getX(), (int) ev.getY());
}
/**
* Given a motion event in evView's coordinates, return whether the event is within another
* view's bounds.
*/
public boolean isEventOverView(View view, MotionEvent ev, View evView) {
int[] xy = new int[] {(int) ev.getX(), (int) ev.getY()};
getDescendantCoordRelativeToSelf(evView, xy);
getDescendantRectRelativeToSelf(view, mHitRect);
return mHitRect.contains(xy[0], xy[1]);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();