mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-20 03:08:19 +00:00
Merge "Fix bugs with hotseat in overview" into ub-launcher3-qt-dev
am: 01a4c80c40
Change-Id: Ie6459bf11e0ca0fb059730bf68da11d8e4e853dc
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user