diff options
23 files changed, 151 insertions, 96 deletions
diff --git a/Android.mk b/Android.mk index dbafcbceb..ab445acaf 100644 --- a/Android.mk +++ b/Android.mk @@ -173,7 +173,57 @@ LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.* include $(BUILD_PACKAGE) +# +# Build rule for Launcher3 Go app with quickstep for Android Go devices. +# +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional + +LOCAL_STATIC_JAVA_LIBRARIES := \ + android-support-v4 \ + android-support-v7-recyclerview \ + android-support-dynamic-animation \ + libSharedSystemUI + +LOCAL_SRC_FILES := \ + $(call all-java-files-under, src) \ + $(call all-java-files-under, quickstep/src) \ + $(call all-java-files-under, go/src_flags) \ + $(call all-proto-files-under, protos) \ + $(call all-proto-files-under, proto_overrides) + +LOCAL_RESOURCE_DIR := \ + $(LOCAL_PATH)/quickstep/res \ + $(LOCAL_PATH)/go/res \ + $(LOCAL_PATH)/res \ + prebuilts/sdk/current/support/v7/recyclerview/res \ +LOCAL_PROGUARD_ENABLED := disabled + +LOCAL_PROTOC_OPTIMIZE_TYPE := nano +LOCAL_PROTOC_FLAGS := --proto_path=$(LOCAL_PATH)/protos/ --proto_path=$(LOCAL_PATH)/proto_overrides/ +LOCAL_PROTO_JAVA_OUTPUT_PARAMS := enum_style=java + +LOCAL_AAPT_FLAGS := \ + --auto-add-overlay \ + --extra-packages android.support.v7.recyclerview \ + +LOCAL_SDK_VERSION := system_current +LOCAL_MIN_SDK_VERSION := 26 +LOCAL_PACKAGE_NAME := Launcher3QuickStepGo +LOCAL_PRIVILEGED_MODULE := true +LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3 + +LOCAL_FULL_LIBS_MANIFEST_FILES := \ + $(LOCAL_PATH)/go/AndroidManifest.xml \ + $(LOCAL_PATH)/AndroidManifest.xml \ + $(LOCAL_PATH)/AndroidManifest-common.xml + +LOCAL_MANIFEST_FILE := quickstep/AndroidManifest.xml +LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.launcher3.* + +include $(BUILD_PACKAGE) # ================================================== diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml index ad5f767be..ed18bf5e3 100644 --- a/quickstep/res/values/dimens.xml +++ b/quickstep/res/values/dimens.xml @@ -21,6 +21,7 @@ <dimen name="task_menu_background_radius">12dp</dimen> <dimen name="task_corner_radius">2dp</dimen> <dimen name="recents_page_spacing">10dp</dimen> + <dimen name="quickscrub_adjacent_visible_width">20dp</dimen> <!-- The speed in dp/s at which the user needs to be scrolling in recents such that we start loading full resolution screenshots. --> diff --git a/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java b/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java index d86ba6aa6..1eaa8bc92 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/AllAppsState.java @@ -18,8 +18,6 @@ package com.android.launcher3.uioverrides; import static com.android.launcher3.LauncherAnimUtils.ALL_APPS_TRANSITION_MS; import static com.android.launcher3.anim.Interpolators.DEACCEL_2; -import android.view.View; - import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; @@ -62,11 +60,6 @@ public class AllAppsState extends LauncherState { } @Override - public View getFinalFocus(Launcher launcher) { - return launcher.getAppsView(); - } - - @Override public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { float[] scaleAndTranslation = LauncherState.OVERVIEW.getWorkspaceScaleAndTranslation( launcher); diff --git a/quickstep/src/com/android/launcher3/uioverrides/FastOverviewState.java b/quickstep/src/com/android/launcher3/uioverrides/FastOverviewState.java index da85990bb..43d982230 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/FastOverviewState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/FastOverviewState.java @@ -15,8 +15,13 @@ */ package com.android.launcher3.uioverrides; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Rect; + import com.android.launcher3.DeviceProfile; import com.android.launcher3.Launcher; +import com.android.launcher3.R; import com.android.quickstep.QuickScrubController; import com.android.quickstep.views.RecentsView; @@ -25,6 +30,12 @@ import com.android.quickstep.views.RecentsView; */ public class FastOverviewState extends OverviewState { + private static final float MAX_PREVIEW_SCALE_UP = 1.3f; + /** + * Vertical transition of the task previews relative to the full container. + */ + public static final float OVERVIEW_TRANSLATION_FACTOR = 0.5f; + private static final int STATE_FLAGS = FLAG_DISABLE_RESTORE | FLAG_DISABLE_INTERACTION | FLAG_OVERVIEW_UI | FLAG_HIDE_BACK_BUTTON | FLAG_DISABLE_ACCESSIBILITY; @@ -46,15 +57,23 @@ public class FastOverviewState extends OverviewState { @Override public float[] getOverviewScaleAndTranslationYFactor(Launcher launcher) { - return new float[] {getOverviewScale(launcher.getDeviceProfile()), 0.5f}; + RecentsView recentsView = launcher.getOverviewPanel(); + recentsView.getTaskSize(sTempRect); + + return new float[] {getOverviewScale(launcher.getDeviceProfile(), sTempRect, launcher), + OVERVIEW_TRANSLATION_FACTOR}; } - public static float getOverviewScale(DeviceProfile dp) { - if (dp.isMultiWindowMode || dp.isVerticalBarLayout()) { + public static float getOverviewScale(DeviceProfile dp, Rect taskRect, Context context) { + if (dp.isVerticalBarLayout()) { return 1f; } - // TODO: Calculate it dynamically based on available space - return 1.3f; + Resources res = context.getResources(); + float usedHeight = taskRect.height() + res.getDimension(R.dimen.task_thumbnail_top_margin); + float usedWidth = taskRect.width() + 2 * (res.getDimension(R.dimen.recents_page_spacing) + + res.getDimension(R.dimen.quickscrub_adjacent_visible_width)); + return Math.min(Math.min(dp.availableHeightPx / usedHeight, + dp.availableWidthPx / usedWidth), MAX_PREVIEW_SCALE_UP); } } diff --git a/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java b/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java index 0116a8e0e..9169ffbc1 100644 --- a/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java +++ b/quickstep/src/com/android/launcher3/uioverrides/OverviewState.java @@ -83,11 +83,6 @@ public class OverviewState extends LauncherState { DiscoveryBounce.showForOverviewIfNeeded(launcher); } - @Override - public View getFinalFocus(Launcher launcher) { - return launcher.getOverviewPanel(); - } - public PageAlphaProvider getWorkspacePageAlphaProvider(Launcher launcher) { return new PageAlphaProvider(DEACCEL_2) { @Override diff --git a/quickstep/src/com/android/quickstep/ActivityControlHelper.java b/quickstep/src/com/android/quickstep/ActivityControlHelper.java index d47fec5fc..e202c574a 100644 --- a/quickstep/src/com/android/quickstep/ActivityControlHelper.java +++ b/quickstep/src/com/android/quickstep/ActivityControlHelper.java @@ -153,8 +153,8 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> { @Override public float getTranslationYForQuickScrub(Launcher activity) { LauncherRecentsView recentsView = activity.getOverviewPanel(); - float transYFactor = FAST_OVERVIEW.getOverviewScaleAndTranslationYFactor(activity)[1]; - return recentsView.computeTranslationYForFactor(transYFactor); + return recentsView.computeTranslationYForFactor( + FastOverviewState.OVERVIEW_TRANSLATION_FACTOR); } @Override @@ -167,7 +167,7 @@ public interface ActivityControlHelper<T extends BaseDraggingActivity> { @InteractionType int interactionType, TransformedRect outRect) { LayoutUtils.calculateLauncherTaskSize(context, dp, outRect.rect); if (interactionType == INTERACTION_QUICK_SCRUB) { - outRect.scale = FastOverviewState.getOverviewScale(dp); + outRect.scale = FastOverviewState.getOverviewScale(dp, outRect.rect, context); } if (dp.isVerticalBarLayout()) { Rect targetInsets = dp.getInsets(); diff --git a/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java b/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java index a2aa4b947..9ba332831 100644 --- a/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java +++ b/quickstep/src/com/android/quickstep/OtherActivityTouchConsumer.java @@ -265,12 +265,10 @@ public class OtherActivityTouchConsumer extends ContextWrapper implements TouchC if (Looper.myLooper() != Looper.getMainLooper()) { startActivity.run(); - if (!mIsDeferredDownTarget) { - try { - drawWaitLock.await(LAUNCHER_DRAW_TIMEOUT_MS, TimeUnit.MILLISECONDS); - } catch (Exception e) { - // We have waited long enough for launcher to draw - } + try { + drawWaitLock.await(LAUNCHER_DRAW_TIMEOUT_MS, TimeUnit.MILLISECONDS); + } catch (Exception e) { + // We have waited long enough for launcher to draw } } else { // We should almost always get touch-town on background thread. This is an edge case diff --git a/quickstep/src/com/android/quickstep/QuickScrubController.java b/quickstep/src/com/android/quickstep/QuickScrubController.java index abb479dea..8e1a3d5d8 100644 --- a/quickstep/src/com/android/quickstep/QuickScrubController.java +++ b/quickstep/src/com/android/quickstep/QuickScrubController.java @@ -49,7 +49,7 @@ public class QuickScrubController implements OnAlarmListener { * Snap to a new page when crossing these thresholds. The first and last auto-advance. */ private static final float[] QUICK_SCRUB_THRESHOLDS = new float[] { - 0.04f, 0.27f, 0.50f, 0.73f, 0.96f + 0.05f, 0.20f, 0.35f, 0.50f, 0.65f, 0.80f, 0.95f }; private static final String TAG = "QuickScrubController"; diff --git a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java index e93c80789..191c237f6 100644 --- a/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -273,8 +273,8 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> { | STATE_SCALED_CONTROLLER_APP, this::notifyTransitionCancelled); - mStateCallback.addCallback(STATE_LAUNCHER_STARTED | STATE_QUICK_SCRUB_START, - this::onQuickScrubStart); + mStateCallback.addCallback(STATE_LAUNCHER_STARTED | STATE_QUICK_SCRUB_START + | STATE_APP_CONTROLLER_RECEIVED, this::onQuickScrubStart); mStateCallback.addCallback(STATE_LAUNCHER_STARTED | STATE_QUICK_SCRUB_START | STATE_SCALED_CONTROLLER_RECENTS, this::onFinishedTransitionToQuickScrub); mStateCallback.addCallback(STATE_LAUNCHER_STARTED | STATE_CURRENT_TASK_FINISHED diff --git a/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java b/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java index cc24f1d8a..a654482f9 100644 --- a/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java +++ b/quickstep/src/com/android/quickstep/util/ClipAnimationHelper.java @@ -227,12 +227,16 @@ public class ClipAnimationHelper { dl.getDescendantRectRelativeToSelf(ttv, targetRect.rect); updateTargetRect(targetRect); - // Transform the clip relative to the target rect. - float scale = mTargetRect.width() / mSourceRect.width(); - mSourceWindowClipInsets.left = mSourceWindowClipInsets.left * scale; - mSourceWindowClipInsets.top = mSourceWindowClipInsets.top * scale; - mSourceWindowClipInsets.right = mSourceWindowClipInsets.right * scale; - mSourceWindowClipInsets.bottom = mSourceWindowClipInsets.bottom * scale; + if (target == null) { + // Transform the clip relative to the target rect. Only do this in the case where we + // aren't applying the insets to the app windows (where the clip should be in target app + // space) + float scale = mTargetRect.width() / mSourceRect.width(); + mSourceWindowClipInsets.left = mSourceWindowClipInsets.left * scale; + mSourceWindowClipInsets.top = mSourceWindowClipInsets.top * scale; + mSourceWindowClipInsets.right = mSourceWindowClipInsets.right * scale; + mSourceWindowClipInsets.bottom = mSourceWindowClipInsets.bottom * scale; + } } private void updateStackBoundsToMultiWindowTaskSize(BaseDraggingActivity activity) { diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java index 4f169fb47..dee15d0d7 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/src/com/android/quickstep/views/RecentsView.java @@ -271,6 +271,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl .getDimensionPixelSize(R.dimen.recents_empty_message_text_padding); setWillNotDraw(false); updateEmptyMessage(); + setFocusable(false); } public boolean isRtl() { @@ -931,16 +932,6 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl return true; } - @Override - public void onVisibilityAggregated(boolean isVisible) { - super.onVisibilityAggregated(isVisible); - if (isVisible && !isFocused()) { - // Having focus, even in touch mode, keeps us from losing [Alt+]Tab by preventing - // switching to keyboard mode. - requestFocus(); - } - } - private void runDismissAnimation(PendingAnimation pendingAnim) { AnimatorPlaybackController controller = AnimatorPlaybackController.wrap( pendingAnim.anim, DISMISS_TASK_DURATION); @@ -1285,6 +1276,7 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl private void onChildViewsChanged() { final int childCount = getChildCount(); mClearAllButton.setVisibility(childCount == 0 ? INVISIBLE : VISIBLE); + setFocusable(childCount != 0); } public void revealClearAllButton() { @@ -1315,8 +1307,9 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl super.onInitializeAccessibilityEvent(event); if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_SCROLLED) { - event.setFromIndex(getCurrentPage()); - event.setToIndex(getCurrentPage()); + final int visiblePageNumber = getChildCount() - getCurrentPage() - 1; + event.setFromIndex(visiblePageNumber); + event.setToIndex(visiblePageNumber); event.setItemCount(getChildCount()); } } diff --git a/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java b/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java index 3391214de..31c8b6448 100644 --- a/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java +++ b/quickstep/src/com/android/quickstep/views/RecentsViewContainer.java @@ -113,8 +113,15 @@ public class RecentsViewContainer extends InsettableFrameLayout { @Override public void addFocusables(ArrayList<View> views, int direction, int focusableMode) { - // Carousel is first in tab order. - views.add(mRecentsView); - views.add(mClearAllButton); + if (mRecentsView.getChildCount() > 0) { + // Carousel is first in tab order. + views.add(mRecentsView); + views.add(mClearAllButton); + } + } + + public boolean requestFocus(int direction, Rect previouslyFocusedRect) { + return mRecentsView.requestFocus(direction, previouslyFocusedRect) || + super.requestFocus(direction, previouslyFocusedRect); } }
\ No newline at end of file diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index 213d9cb59..5413a1319 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -325,7 +325,8 @@ public class TaskView extends FrameLayout implements TaskCallbacks, PageCallback final AccessibilityNodeInfo.CollectionItemInfo itemInfo = AccessibilityNodeInfo.CollectionItemInfo.obtain( - 0, 1, recentsView.indexOfChild(this), 1, false); + 0, 1, recentsView.getChildCount() - recentsView.indexOfChild(this) - 1, 1, + false); info.setCollectionItemInfo(itemInfo); } diff --git a/res/values/styles.xml b/res/values/styles.xml index 631626f44..2b760f349 100644 --- a/res/values/styles.xml +++ b/res/values/styles.xml @@ -45,7 +45,7 @@ <style name="LauncherTheme" parent="@style/BaseLauncherThemeWithCustomAttrs"></style> - <style name="LauncherThemeDarkText" parent="@style/LauncherTheme"> + <style name="LauncherTheme.DarkText" parent="@style/LauncherTheme"> <item name="workspaceTextColor">#FF212121</item> <item name="workspaceShadowColor">@android:color/transparent</item> <item name="workspaceAmbientShadowColor">@android:color/transparent</item> @@ -70,6 +70,15 @@ <item name="isMainColorDark">true</item> </style> + <style name="LauncherThemeDark.DarKText" parent="@style/LauncherThemeDark"> + <item name="workspaceTextColor">#FF212121</item> + <item name="workspaceShadowColor">@android:color/transparent</item> + <item name="workspaceAmbientShadowColor">@android:color/transparent</item> + <item name="workspaceKeyShadowColor">@android:color/transparent</item> + <item name="isWorkspaceDarkText">true</item> + <item name="workspaceStatusBarScrim">@null</item> + </style> + <!-- Theme overrides to element on homescreen, i.e., which are drawn on top on wallpaper. Various foreground colors are overridden to be workspaceTextColor so that they are properly diff --git a/src/com/android/launcher3/BaseDraggingActivity.java b/src/com/android/launcher3/BaseDraggingActivity.java index d9e7d2033..8af9acc24 100644 --- a/src/com/android/launcher3/BaseDraggingActivity.java +++ b/src/com/android/launcher3/BaseDraggingActivity.java @@ -90,11 +90,11 @@ public abstract class BaseDraggingActivity extends BaseActivity protected int getThemeRes(WallpaperColorInfo wallpaperColorInfo) { if (wallpaperColorInfo.isDark()) { - return R.style.LauncherThemeDark; - } else if (wallpaperColorInfo.supportsDarkText()) { - return R.style.LauncherThemeDarkText; + return wallpaperColorInfo.supportsDarkText() ? + R.style.LauncherThemeDark_DarKText : R.style.LauncherThemeDark; } else { - return R.style.LauncherTheme; + return wallpaperColorInfo.supportsDarkText() ? + R.style.LauncherTheme_DarkText : R.style.LauncherTheme; } } diff --git a/src/com/android/launcher3/LauncherState.java b/src/com/android/launcher3/LauncherState.java index 76681f280..5b010dc2d 100644 --- a/src/com/android/launcher3/LauncherState.java +++ b/src/com/android/launcher3/LauncherState.java @@ -18,11 +18,11 @@ package com.android.launcher3; import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_AUTO; import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS; import static android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; + import static com.android.launcher3.anim.Interpolators.ACCEL_2; import static com.android.launcher3.states.RotationHelper.REQUEST_NONE; import android.graphics.Rect; -import android.view.View; import android.view.animation.Interpolator; import com.android.launcher3.states.SpringLoadedState; @@ -196,10 +196,6 @@ public class LauncherState { public void onStateDisabled(Launcher launcher) { } - public View getFinalFocus(Launcher launcher) { - return launcher.getWorkspace(); - } - public int getVisibleElements(Launcher launcher) { if (launcher.getDeviceProfile().isVerticalBarLayout()) { return HOTSEAT_ICONS | VERTICAL_SWIPE_INDICATOR; diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index 3fcdee934..b5eef8bd3 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -17,6 +17,7 @@ package com.android.launcher3; import static android.view.View.VISIBLE; + import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_FADE; import static com.android.launcher3.anim.AnimatorSetBuilder.ANIM_OVERVIEW_SCALE; @@ -35,7 +36,6 @@ import android.animation.AnimatorSet; import android.os.Handler; import android.os.Looper; import android.support.annotation.IntDef; -import android.view.View; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorPlaybackController; @@ -251,7 +251,7 @@ public class LauncherStateManager { prepareForAtomicAnimation(mState, state, builder); AnimatorSet animation = createAnimationToNewWorkspaceInternal( state, builder, onCompleteRunnable); - Runnable runnable = new StartAnimRunnable(animation, state.getFinalFocus(mLauncher)); + Runnable runnable = new StartAnimRunnable(animation); if (delay > 0) { mUiHandler.postDelayed(runnable, delay); } else { @@ -348,20 +348,15 @@ public class LauncherStateManager { } @Override - public void onAnimationEnd(Animator animation) { - super.onAnimationEnd(animation); - for (int i = mListeners.size() - 1; i >= 0; i--) { - mListeners.get(i).onStateTransitionComplete(state); - } - } - - @Override public void onAnimationSuccess(Animator animator) { // Run any queued runnables if (onCompleteRunnable != null) { onCompleteRunnable.run(); } onStateTransitionEnd(state); + for (int i = mListeners.size() - 1; i >= 0; i--) { + mListeners.get(i).onStateTransitionComplete(state); + } } }); mConfig.setAnimation(animation, state); @@ -397,6 +392,8 @@ public class LauncherStateManager { } UiFactory.onLauncherStateOrResumeChanged(mLauncher); + + mLauncher.getDragLayer().requestFocus(); } public void onWindowFocusChanged() { @@ -480,11 +477,9 @@ public class LauncherStateManager { private class StartAnimRunnable implements Runnable { private final AnimatorSet mAnim; - private final View mViewToFocus; - public StartAnimRunnable(AnimatorSet anim, View viewToFocus) { + public StartAnimRunnable(AnimatorSet anim) { mAnim = anim; - mViewToFocus = viewToFocus; } @Override @@ -492,9 +487,6 @@ public class LauncherStateManager { if (mConfig.mCurrentAnimation != mAnim) { return; } - if (mViewToFocus != null) { - mViewToFocus.requestFocus(); - } mAnim.start(); } } diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java index 42e8fde3b..06eb82e3e 100644 --- a/src/com/android/launcher3/Workspace.java +++ b/src/com/android/launcher3/Workspace.java @@ -1552,6 +1552,14 @@ public class Workspace extends PagedView<WorkspacePageIndicator> public DragView beginDragShared(View child, DragSource source, ItemInfo dragObject, DragPreviewProvider previewProvider, DragOptions dragOptions) { + float iconScale = 1f; + if (child instanceof BubbleTextView) { + Drawable icon = ((BubbleTextView) child).getIcon(); + if (icon instanceof FastBitmapDrawable) { + iconScale = ((FastBitmapDrawable) icon).getAnimatedScale(); + } + } + child.clearFocus(); child.setPressed(false); mOutlineProvider = previewProvider; @@ -1603,7 +1611,7 @@ public class Workspace extends PagedView<WorkspacePageIndicator> } DragView dv = mDragController.startDrag(b, dragLayerX, dragLayerY, source, - dragObject, dragVisualizeOffset, dragRect, scale, dragOptions); + dragObject, dragVisualizeOffset, dragRect, scale * iconScale, scale, dragOptions); dv.setIntrinsicIconScaleFactor(dragOptions.intrinsicIconScaleFactor); return dv; } diff --git a/src/com/android/launcher3/dragndrop/DragController.java b/src/com/android/launcher3/dragndrop/DragController.java index 5c6946c47..8a216fc17 100644 --- a/src/com/android/launcher3/dragndrop/DragController.java +++ b/src/com/android/launcher3/dragndrop/DragController.java @@ -138,7 +138,7 @@ public class DragController implements DragDriver.EventListener, TouchController */ public DragView startDrag(Bitmap b, int dragLayerX, int dragLayerY, DragSource source, ItemInfo dragInfo, Point dragOffset, Rect dragRegion, - float initialDragViewScale, DragOptions options) { + float initialDragViewScale, float dragViewScaleOnDrop, DragOptions options) { if (PROFILE_DRAWING_DURING_DRAG) { android.os.Debug.startMethodTracing("Launcher"); } @@ -169,7 +169,7 @@ public class DragController implements DragDriver.EventListener, TouchController final float scaleDps = mIsInPreDrag ? res.getDimensionPixelSize(R.dimen.pre_drag_view_scale) : 0f; final DragView dragView = mDragObject.dragView = new DragView(mLauncher, b, registrationX, - registrationY, initialDragViewScale, scaleDps); + registrationY, initialDragViewScale, dragViewScaleOnDrop, scaleDps); dragView.setItemInfo(dragInfo); mDragObject.dragComplete = false; if (mOptions.isAccessibleDrag) { diff --git a/src/com/android/launcher3/dragndrop/DragView.java b/src/com/android/launcher3/dragndrop/DragView.java index 1e5f8545b..551567ae7 100644 --- a/src/com/android/launcher3/dragndrop/DragView.java +++ b/src/com/android/launcher3/dragndrop/DragView.java @@ -89,6 +89,7 @@ public class DragView extends View { private final int mRegistrationX; private final int mRegistrationY; private final float mInitialScale; + private final float mScaleOnDrop; private final int[] mTempLoc = new int[2]; private Point mDragVisualizeOffset = null; @@ -131,7 +132,7 @@ public class DragView extends View { * @param registrationY The y coordinate of the registration point. */ public DragView(Launcher launcher, Bitmap bitmap, int registrationX, int registrationY, - final float initialScale, final float finalScaleDps) { + final float initialScale, final float scaleOnDrop, final float finalScaleDps) { super(launcher); mLauncher = launcher; mDragLayer = launcher.getDragLayer(); @@ -180,6 +181,7 @@ public class DragView extends View { mRegistrationY = registrationY; mInitialScale = initialScale; + mScaleOnDrop = scaleOnDrop; // Force a measure, because Workspace uses getMeasuredHeight() before the layout pass int ms = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); @@ -596,7 +598,7 @@ public class DragView extends View { public void animateTo(int toTouchX, int toTouchY, Runnable onCompleteRunnable, int duration) { mTempLoc[0] = toTouchX - mRegistrationX; mTempLoc[1] = toTouchY - mRegistrationY; - mDragLayer.animateViewIntoPosition(this, mTempLoc, 1f, mInitialScale, mInitialScale, + mDragLayer.animateViewIntoPosition(this, mTempLoc, 1f, mScaleOnDrop, mScaleOnDrop, DragLayer.ANIMATION_END_DISAPPEAR, onCompleteRunnable, duration); } diff --git a/src/com/android/launcher3/states/SpringLoadedState.java b/src/com/android/launcher3/states/SpringLoadedState.java index aa7d0d5a3..35f7f8831 100644 --- a/src/com/android/launcher3/states/SpringLoadedState.java +++ b/src/com/android/launcher3/states/SpringLoadedState.java @@ -19,7 +19,6 @@ import static com.android.launcher3.LauncherAnimUtils.SPRING_LOADED_TRANSITION_M import static com.android.launcher3.states.RotationHelper.REQUEST_LOCK; import android.graphics.Rect; -import android.view.View; import com.android.launcher3.DeviceProfile; import com.android.launcher3.InstallShortcutReceiver; @@ -98,9 +97,4 @@ public class SpringLoadedState extends LauncherState { InstallShortcutReceiver.disableAndFlushInstallQueue( InstallShortcutReceiver.FLAG_DRAG_AND_DROP, launcher); } - - @Override - public View getFinalFocus(Launcher launcher) { - return null; - } } diff --git a/src/com/android/launcher3/widget/PendingItemDragHelper.java b/src/com/android/launcher3/widget/PendingItemDragHelper.java index aa5b7855c..74ab14f55 100644 --- a/src/com/android/launcher3/widget/PendingItemDragHelper.java +++ b/src/com/android/launcher3/widget/PendingItemDragHelper.java @@ -149,7 +149,7 @@ public class PendingItemDragHelper extends DragPreviewProvider { // Start the drag launcher.getDragController().startDrag(preview, dragLayerX, dragLayerY, source, mAddInfo, - dragOffset, dragRegion, scale, options); + dragOffset, dragRegion, scale, scale, options); } @Override diff --git a/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java b/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java index 4a2f544e8..f7bb25456 100644 --- a/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java +++ b/src_ui_overrides/com/android/launcher3/uioverrides/AllAppsState.java @@ -19,8 +19,6 @@ import static com.android.launcher3.LauncherAnimUtils.ALL_APPS_TRANSITION_MS; import static com.android.launcher3.allapps.DiscoveryBounce.HOME_BOUNCE_SEEN; import static com.android.launcher3.anim.Interpolators.DEACCEL_2; -import android.view.View; - import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherState; @@ -68,11 +66,6 @@ public class AllAppsState extends LauncherState { } @Override - public View getFinalFocus(Launcher launcher) { - return launcher.getAppsView(); - } - - @Override public float[] getWorkspaceScaleAndTranslation(Launcher launcher) { return new float[] { 1f, 0, -launcher.getAllAppsController().getShiftRange() * PARALLAX_COEFFICIENT}; |