Snap for 7227300 from 5ac61e1a2e to sc-v2-release
Change-Id: I3510d5b4c1f8ee44970dfe1389d4185462f6e570
This commit is contained in:
@@ -887,6 +887,9 @@ public class TouchInteractionService extends Service implements PluginListener<O
|
||||
if (mGestureState != null) {
|
||||
mGestureState.dump(pw);
|
||||
}
|
||||
pw.println("Input state:");
|
||||
pw.println(" mInputMonitorCompat=" + mInputMonitorCompat);
|
||||
pw.println(" mInputEventReceiver=" + mInputEventReceiver);
|
||||
SysUINavigationMode.INSTANCE.get(this).dump(pw);
|
||||
pw.println("TouchState:");
|
||||
BaseDraggingActivity createdOverviewActivity = mOverviewComponentObserver == null ? null
|
||||
|
||||
@@ -101,7 +101,7 @@ public class LauncherRecentsView extends RecentsView<BaseQuickstepLauncher>
|
||||
@Override
|
||||
protected void onTaskLaunchAnimationEnd(boolean success) {
|
||||
if (success) {
|
||||
mActivity.getStateManager().goToState(NORMAL, false /* animate */);
|
||||
mActivity.getStateManager().moveToRestState();
|
||||
} else {
|
||||
LauncherState state = mActivity.getStateManager().getState();
|
||||
mActivity.getAllAppsController().setState(state);
|
||||
|
||||
@@ -1018,6 +1018,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||
mLiveTileTaskViewSimulator.taskSecondaryTranslation.value = 0;
|
||||
mLiveTileTaskViewSimulator.fullScreenProgress.value = 0;
|
||||
mLiveTileTaskViewSimulator.recentsViewScale.value = 1;
|
||||
mLiveTileTaskViewSimulator.gridProgress.value = 0;
|
||||
}
|
||||
if (mRunningTaskTileHidden) {
|
||||
setRunningTaskHidden(mRunningTaskTileHidden);
|
||||
@@ -1740,6 +1741,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||
for (int i = 0; i < taskCount; i++) {
|
||||
getTaskViewAt(i).setGridProgress(gridProgress);
|
||||
}
|
||||
mLiveTileTaskViewSimulator.gridProgress.value = gridProgress;
|
||||
mClearAllButton.setGridProgress(gridProgress);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
/*
|
||||
**
|
||||
** Copyright 2021, The Android Open Source Project
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
-->
|
||||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="?android:attr/colorControlHighlight">
|
||||
<item android:id="@android:id/mask">
|
||||
<shape android:shape="rectangle">
|
||||
<corners
|
||||
android:topLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
|
||||
android:topRightRadius="@dimen/widget_list_top_bottom_corner_radius"
|
||||
android:bottomLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
|
||||
android:bottomRightRadius="@dimen/widget_list_top_bottom_corner_radius" />
|
||||
</shape>
|
||||
</item>
|
||||
<item android:id="@android:id/background">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="?android:attr/colorBackground" />
|
||||
<corners
|
||||
android:topLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
|
||||
android:topRightRadius="@dimen/widget_list_top_bottom_corner_radius"
|
||||
android:bottomLeftRadius="@dimen/widget_list_top_bottom_corner_radius"
|
||||
android:bottomRightRadius="@dimen/widget_list_top_bottom_corner_radius" />
|
||||
</shape>
|
||||
</item>
|
||||
</ripple>
|
||||
+11
-11
@@ -17,17 +17,17 @@
|
||||
*/
|
||||
-->
|
||||
<resources>
|
||||
<color name="popup_color_primary_light">@android:color/system_primary_50</color>
|
||||
<color name="popup_color_secondary_light">@android:color/system_primary_100</color>
|
||||
<color name="popup_color_tertiary_light">@android:color/system_primary_300</color>
|
||||
<color name="popup_color_primary_dark">@android:color/system_primary_800</color>
|
||||
<color name="popup_color_secondary_dark">@android:color/system_primary_900</color>
|
||||
<color name="popup_color_tertiary_dark">@android:color/system_primary_700</color>
|
||||
<color name="popup_color_primary_light">@android:color/system_neutral1_50</color>
|
||||
<color name="popup_color_secondary_light">@android:color/system_neutral2_100</color>
|
||||
<color name="popup_color_tertiary_light">@android:color/system_neutral2_300</color>
|
||||
<color name="popup_color_primary_dark">@android:color/system_neutral1_800</color>
|
||||
<color name="popup_color_secondary_dark">@android:color/system_neutral1_900</color>
|
||||
<color name="popup_color_tertiary_dark">@android:color/system_neutral2_700</color>
|
||||
|
||||
<color name="workspace_text_color_light">@android:color/system_primary_50</color>
|
||||
<color name="workspace_text_color_dark">@android:color/system_primary_900</color>
|
||||
<color name="workspace_text_color_light">@android:color/system_neutral1_50</color>
|
||||
<color name="workspace_text_color_dark">@android:color/system_neutral1_900</color>
|
||||
|
||||
<color name="text_color_primary_dark">@android:color/system_primary_50</color>
|
||||
<color name="text_color_secondary_dark">@android:color/system_primary_200</color>
|
||||
<color name="text_color_tertiary_dark">@android:color/system_primary_400</color>
|
||||
<color name="text_color_primary_dark">@android:color/system_neutral1_50</color>
|
||||
<color name="text_color_secondary_dark">@android:color/system_neutral2_200</color>
|
||||
<color name="text_color_tertiary_dark">@android:color/system_neutral2_400</color>
|
||||
</resources>
|
||||
@@ -21,14 +21,9 @@ import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||
import static com.android.launcher3.LauncherState.NORMAL;
|
||||
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.FloatArrayEvaluator;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.ColorMatrix;
|
||||
import android.graphics.ColorMatrixColorFilter;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.text.TextUtils;
|
||||
@@ -45,10 +40,7 @@ import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.launcher3.dragndrop.DragController;
|
||||
import com.android.launcher3.dragndrop.DragLayer;
|
||||
import com.android.launcher3.dragndrop.DragOptions;
|
||||
import com.android.launcher3.dragndrop.DragView;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.util.Themes;
|
||||
import com.android.launcher3.util.Thunk;
|
||||
|
||||
/**
|
||||
* Implements a DropTarget.
|
||||
@@ -72,6 +64,7 @@ public abstract class ButtonDropTarget extends TextView
|
||||
|
||||
private static final int[] sTempCords = new int[2];
|
||||
private static final int DRAG_VIEW_DROP_DURATION = 285;
|
||||
private static final float DRAG_VIEW_HOVER_OVER_OPACITY = 0.65f;
|
||||
|
||||
public static final int TOOLTIP_DEFAULT = 0;
|
||||
public static final int TOOLTIP_LEFT = 1;
|
||||
@@ -89,9 +82,6 @@ public abstract class ButtonDropTarget extends TextView
|
||||
/** An item must be dragged at least this many pixels before this drop target is enabled. */
|
||||
private final int mDragDistanceThreshold;
|
||||
|
||||
/** The paint applied to the drag view on hover */
|
||||
protected int mHoverColor = 0;
|
||||
|
||||
protected CharSequence mText;
|
||||
protected ColorStateList mOriginalTextColor;
|
||||
protected Drawable mDrawable;
|
||||
@@ -101,7 +91,6 @@ public abstract class ButtonDropTarget extends TextView
|
||||
private int mToolTipLocation;
|
||||
|
||||
private AnimatorSet mCurrentColorAnim;
|
||||
@Thunk ColorMatrix mSrcFilter, mDstFilter, mCurrentFilter;
|
||||
|
||||
public ButtonDropTarget(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, 0);
|
||||
@@ -177,8 +166,7 @@ public abstract class ButtonDropTarget extends TextView
|
||||
mToolTip.showAsDropDown(this, x, y);
|
||||
}
|
||||
|
||||
d.dragView.setColor(mHoverColor);
|
||||
animateTextColor(mHoverColor);
|
||||
d.dragView.setAlpha(DRAG_VIEW_HOVER_OVER_OPACITY);
|
||||
if (d.stateAnnouncer != null) {
|
||||
d.stateAnnouncer.cancel();
|
||||
}
|
||||
@@ -190,51 +178,15 @@ public abstract class ButtonDropTarget extends TextView
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
protected void resetHoverColor() {
|
||||
animateTextColor(mOriginalTextColor.getDefaultColor());
|
||||
}
|
||||
|
||||
private void animateTextColor(int targetColor) {
|
||||
if (mCurrentColorAnim != null) {
|
||||
mCurrentColorAnim.cancel();
|
||||
}
|
||||
|
||||
mCurrentColorAnim = new AnimatorSet();
|
||||
mCurrentColorAnim.setDuration(DragView.COLOR_CHANGE_DURATION);
|
||||
|
||||
if (mSrcFilter == null) {
|
||||
mSrcFilter = new ColorMatrix();
|
||||
mDstFilter = new ColorMatrix();
|
||||
mCurrentFilter = new ColorMatrix();
|
||||
}
|
||||
|
||||
int defaultTextColor = mOriginalTextColor.getDefaultColor();
|
||||
Themes.setColorChangeOnMatrix(defaultTextColor, getTextColor(), mSrcFilter);
|
||||
Themes.setColorChangeOnMatrix(defaultTextColor, targetColor, mDstFilter);
|
||||
|
||||
ValueAnimator anim1 = ValueAnimator.ofObject(
|
||||
new FloatArrayEvaluator(mCurrentFilter.getArray()),
|
||||
mSrcFilter.getArray(), mDstFilter.getArray());
|
||||
anim1.addUpdateListener((anim) -> {
|
||||
mDrawable.setColorFilter(new ColorMatrixColorFilter(mCurrentFilter));
|
||||
invalidate();
|
||||
});
|
||||
|
||||
mCurrentColorAnim.play(anim1);
|
||||
mCurrentColorAnim.play(ObjectAnimator.ofArgb(this, TEXT_COLOR, targetColor));
|
||||
mCurrentColorAnim.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void onDragExit(DragObject d) {
|
||||
hideTooltip();
|
||||
|
||||
if (!d.dragComplete) {
|
||||
d.dragView.setColor(0);
|
||||
resetHoverColor();
|
||||
d.dragView.setAlpha(1f);
|
||||
} else {
|
||||
// Restore the hover color
|
||||
d.dragView.setColor(mHoverColor);
|
||||
d.dragView.setAlpha(DRAG_VIEW_HOVER_OVER_OPACITY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -53,9 +53,6 @@ public class DeleteDropTarget extends ButtonDropTarget {
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
super.onFinishInflate();
|
||||
// Get the hover color
|
||||
mHoverColor = getResources().getColor(R.color.delete_target_hover_tint);
|
||||
|
||||
setDrawable(R.drawable.ic_remove_shadow);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.launcher3;
|
||||
|
||||
import static com.android.launcher3.ResourceUtils.pxFromDp;
|
||||
import static com.android.launcher3.Utilities.dpiFromPx;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
@@ -38,6 +39,8 @@ import com.android.launcher3.util.DisplayController;
|
||||
import com.android.launcher3.util.DisplayController.Info;
|
||||
import com.android.launcher3.util.WindowBounds;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
|
||||
public class DeviceProfile {
|
||||
|
||||
private static final float TABLET_MIN_DPS = 600;
|
||||
@@ -91,8 +94,10 @@ public class DeviceProfile {
|
||||
public float workspaceSpringLoadShrinkFactor;
|
||||
public final int workspaceSpringLoadedBottomSpace;
|
||||
|
||||
private final int extraSpace;
|
||||
public int workspaceTopPadding;
|
||||
public int workspaceBottomPadding;
|
||||
public int extraHotseatBottomPadding;
|
||||
|
||||
// Workspace page indicator
|
||||
public final int workspacePageIndicatorHeight;
|
||||
@@ -109,7 +114,6 @@ public class DeviceProfile {
|
||||
public int workspaceCellPaddingXPx;
|
||||
|
||||
public int cellYPaddingPx;
|
||||
public int cellYPaddingOriginalPx;
|
||||
|
||||
// Folder
|
||||
public float folderLabelTextScale;
|
||||
@@ -199,8 +203,7 @@ public class DeviceProfile {
|
||||
mInfo = info;
|
||||
|
||||
// Constants from resources
|
||||
float swDPs = Utilities.dpiFromPx(
|
||||
Math.min(info.smallestSize.x, info.smallestSize.y), info.metrics);
|
||||
float swDPs = dpiFromPx(Math.min(info.smallestSize.x, info.smallestSize.y), info.metrics);
|
||||
boolean allowRotation = context.getResources().getBoolean(R.bool.allow_rotation);
|
||||
// Tablet UI is built with assumption that simulated landscape is disabled.
|
||||
isTablet = allowRotation && swDPs >= TABLET_MIN_DPS;
|
||||
@@ -295,22 +298,22 @@ public class DeviceProfile {
|
||||
+ (isScalableGrid ? 0 : hotseatExtraVerticalSize)));
|
||||
|
||||
// Calculate all of the remaining variables.
|
||||
int extraSpace = updateAvailableDimensions(res);
|
||||
extraSpace = updateAvailableDimensions(res);
|
||||
// Now that we have all of the variables calculated, we can tune certain sizes.
|
||||
if (isScalableGrid) {
|
||||
DevicePadding padding = inv.devicePaddings.getDevicePadding(extraSpace);
|
||||
workspaceTopPadding = padding.getWorkspaceTopPadding(extraSpace);
|
||||
workspaceBottomPadding = padding.getWorkspaceBottomPadding(extraSpace);
|
||||
|
||||
float hotseatBarBottomPadding = padding.getHotseatBottomPadding(extraSpace);
|
||||
hotseatBarSizePx += hotseatBarBottomPadding;
|
||||
hotseatBarBottomPaddingPx += hotseatBarBottomPadding;
|
||||
extraHotseatBottomPadding = padding.getHotseatBottomPadding(extraSpace);
|
||||
hotseatBarSizePx += extraHotseatBottomPadding;
|
||||
hotseatBarBottomPaddingPx += extraHotseatBottomPadding;
|
||||
} else if (!isVerticalBarLayout() && isPhone && isTallDevice) {
|
||||
// We increase the hotseat size when there is extra space.
|
||||
// ie. For a display with a large aspect ratio, we can keep the icons on the workspace
|
||||
// in portrait mode closer together by adding more height to the hotseat.
|
||||
// Note: This calculation was created after noticing a pattern in the design spec.
|
||||
extraSpace = getCellSize().y - iconSizePx - iconDrawablePaddingPx * 2
|
||||
int extraSpace = getCellSize().y - iconSizePx - iconDrawablePaddingPx * 2
|
||||
- workspacePageIndicatorHeight;
|
||||
hotseatBarSizePx += extraSpace;
|
||||
hotseatBarBottomPaddingPx += extraSpace;
|
||||
@@ -794,6 +797,93 @@ public class DeviceProfile {
|
||||
}
|
||||
}
|
||||
|
||||
private String pxToDpStr(String name, float value) {
|
||||
return "\t" + name + ": " + value + "px (" + dpiFromPx(value, mInfo.metrics) + "dp)";
|
||||
}
|
||||
|
||||
public void dump(String prefix, PrintWriter writer) {
|
||||
writer.println(prefix + "DeviceProfile:");
|
||||
writer.println(prefix + "\t1 dp = " + mInfo.metrics.density + " px");
|
||||
|
||||
writer.println(prefix + "\tisTablet:" + isTablet);
|
||||
writer.println(prefix + "\tisLargeTablet:" + isLargeTablet);
|
||||
writer.println(prefix + "\tisPhone:" + isPhone);
|
||||
writer.println(prefix + "\ttransposeLayoutWithOrientation:"
|
||||
+ transposeLayoutWithOrientation);
|
||||
|
||||
writer.println(prefix + "\tisLandscape:" + isLandscape);
|
||||
writer.println(prefix + "\tisMultiWindowMode:" + isMultiWindowMode);
|
||||
|
||||
writer.println(prefix + pxToDpStr("windowX", windowX));
|
||||
writer.println(prefix + pxToDpStr("windowY", windowY));
|
||||
writer.println(prefix + pxToDpStr("widthPx", widthPx));
|
||||
writer.println(prefix + pxToDpStr("heightPx", heightPx));
|
||||
|
||||
writer.println(prefix + pxToDpStr("availableWidthPx", availableWidthPx));
|
||||
writer.println(prefix + pxToDpStr("availableHeightPx", availableHeightPx));
|
||||
|
||||
writer.println(prefix + "\taspectRatio:" + aspectRatio);
|
||||
|
||||
writer.println(prefix + "\tisScalableGrid:" + isScalableGrid);
|
||||
|
||||
writer.println(prefix + "\tinv.minCellWidth:" + inv.minCellWidth + "dp");
|
||||
writer.println(prefix + "\tinv.minCellHeight:" + inv.minCellHeight + "dp");
|
||||
|
||||
writer.println(prefix + pxToDpStr("cellWidthPx", cellWidthPx));
|
||||
writer.println(prefix + pxToDpStr("cellHeightPx", cellHeightPx));
|
||||
|
||||
writer.println(prefix + pxToDpStr("getCellSize().x", getCellSize().x));
|
||||
writer.println(prefix + pxToDpStr("getCellSize().y", getCellSize().y));
|
||||
|
||||
writer.println(prefix + "\tinv.iconSize:" + inv.iconSize + "dp");
|
||||
writer.println(prefix + pxToDpStr("iconSizePx", iconSizePx));
|
||||
writer.println(prefix + pxToDpStr("iconTextSizePx", iconTextSizePx));
|
||||
writer.println(prefix + pxToDpStr("iconDrawablePaddingPx", iconDrawablePaddingPx));
|
||||
|
||||
writer.println(prefix + pxToDpStr("folderCellWidthPx", folderCellWidthPx));
|
||||
writer.println(prefix + pxToDpStr("folderCellHeightPx", folderCellHeightPx));
|
||||
writer.println(prefix + pxToDpStr("folderChildIconSizePx", folderChildIconSizePx));
|
||||
writer.println(prefix + pxToDpStr("folderChildTextSizePx", folderChildTextSizePx));
|
||||
writer.println(prefix + pxToDpStr("folderChildDrawablePaddingPx",
|
||||
folderChildDrawablePaddingPx));
|
||||
|
||||
writer.println(prefix + pxToDpStr("cellLayoutBorderSpacingPx",
|
||||
cellLayoutBorderSpacingPx));
|
||||
writer.println(prefix + pxToDpStr("desiredWorkspaceLeftRightMarginPx",
|
||||
desiredWorkspaceLeftRightMarginPx));
|
||||
|
||||
writer.println(prefix + pxToDpStr("allAppsIconSizePx", allAppsIconSizePx));
|
||||
writer.println(prefix + pxToDpStr("allAppsIconTextSizePx", allAppsIconTextSizePx));
|
||||
writer.println(prefix + pxToDpStr("allAppsIconDrawablePaddingPx",
|
||||
allAppsIconDrawablePaddingPx));
|
||||
writer.println(prefix + pxToDpStr("allAppsCellHeightPx", allAppsCellHeightPx));
|
||||
|
||||
writer.println(prefix + pxToDpStr("hotseatBarSizePx", hotseatBarSizePx));
|
||||
writer.println(prefix + pxToDpStr("hotseatCellHeightPx", hotseatCellHeightPx));
|
||||
writer.println(prefix + pxToDpStr("hotseatBarTopPaddingPx", hotseatBarTopPaddingPx));
|
||||
writer.println(prefix + pxToDpStr("hotseatBarBottomPaddingPx", hotseatBarBottomPaddingPx));
|
||||
writer.println(prefix + pxToDpStr("hotseatBarSidePaddingStartPx",
|
||||
hotseatBarSidePaddingStartPx));
|
||||
writer.println(prefix + pxToDpStr("hotseatBarSidePaddingEndPx",
|
||||
hotseatBarSidePaddingEndPx));
|
||||
|
||||
writer.println(prefix + "\tisTaskbarPresent:" + isTaskbarPresent);
|
||||
|
||||
writer.println(prefix + pxToDpStr("taskbarSize", taskbarSize));
|
||||
writer.println(prefix + pxToDpStr("nonOverlappingTaskbarInset",
|
||||
nonOverlappingTaskbarInset));
|
||||
|
||||
writer.println(prefix + pxToDpStr("workspacePadding.left", workspacePadding.left));
|
||||
writer.println(prefix + pxToDpStr("workspacePadding.top", workspacePadding.top));
|
||||
writer.println(prefix + pxToDpStr("workspacePadding.right", workspacePadding.right));
|
||||
writer.println(prefix + pxToDpStr("workspacePadding.bottom", workspacePadding.bottom));
|
||||
|
||||
writer.println(prefix + pxToDpStr("extraSpace", extraSpace));
|
||||
writer.println(prefix + pxToDpStr("workspaceTopPadding", workspaceTopPadding));
|
||||
writer.println(prefix + pxToDpStr("workspaceBottomPadding", workspaceBottomPadding));
|
||||
writer.println(prefix + pxToDpStr("extraHotseatBottomPadding", extraHotseatBottomPadding));
|
||||
}
|
||||
|
||||
private static Context getContext(Context c, Info info, int orientation) {
|
||||
Configuration config = new Configuration(c.getResources().getConfiguration());
|
||||
config.orientation = orientation;
|
||||
|
||||
@@ -2634,6 +2634,7 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche
|
||||
mDragLayer.dump(prefix, writer);
|
||||
mStateManager.dump(prefix, writer);
|
||||
mPopupDataProvider.dump(prefix, writer);
|
||||
mDeviceProfile.dump(prefix, writer);
|
||||
|
||||
try {
|
||||
FileLog.flushAll(writer);
|
||||
|
||||
@@ -63,6 +63,7 @@ import com.android.launcher3.util.Thunk;
|
||||
import com.android.launcher3.views.ActivityContext;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* An abstraction of the original Workspace which supports browsing through a
|
||||
@@ -303,6 +304,21 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the currently visible pages.
|
||||
*/
|
||||
protected Iterable<View> getVisiblePages() {
|
||||
int panelCount = getPanelCount();
|
||||
List<View> visiblePages = new ArrayList<>(panelCount);
|
||||
for (int i = mCurrentPage; i < mCurrentPage + panelCount; i++) {
|
||||
View page = getPageAt(i);
|
||||
if (page != null) {
|
||||
visiblePages.add(page);
|
||||
}
|
||||
}
|
||||
return visiblePages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the view is on one of the current pages, false otherwise.
|
||||
*/
|
||||
@@ -1052,10 +1068,7 @@ public abstract class PagedView<T extends View & PageIndicator> extends ViewGrou
|
||||
// Try canceling the long press. It could also have been scheduled
|
||||
// by a distant descendant, so use the mAllowLongPress flag to block
|
||||
// everything
|
||||
final View currentPage = getPageAt(mCurrentPage);
|
||||
if (currentPage != null) {
|
||||
currentPage.cancelLongPress();
|
||||
}
|
||||
getVisiblePages().forEach(View::cancelLongPress);
|
||||
}
|
||||
|
||||
protected float getScrollProgress(int screenCenter, View v, int page) {
|
||||
|
||||
@@ -44,7 +44,6 @@ import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.model.data.ItemInfoWithIcon;
|
||||
import com.android.launcher3.model.data.LauncherAppWidgetInfo;
|
||||
import com.android.launcher3.util.PackageManagerHelper;
|
||||
import com.android.launcher3.util.Themes;
|
||||
import com.android.launcher3.widget.LauncherAppWidgetProviderInfo;
|
||||
|
||||
import java.net.URISyntaxException;
|
||||
@@ -109,15 +108,12 @@ public class SecondaryDropTarget extends ButtonDropTarget implements OnAlarmList
|
||||
mCurrentAccessibilityAction = action;
|
||||
|
||||
if (action == UNINSTALL) {
|
||||
mHoverColor = getResources().getColor(R.color.uninstall_target_hover_tint);
|
||||
setDrawable(R.drawable.ic_uninstall_shadow);
|
||||
updateText(R.string.uninstall_drop_target_label);
|
||||
} else if (action == DISMISS_PREDICTION) {
|
||||
mHoverColor = Themes.getColorAccent(getContext());
|
||||
setDrawable(R.drawable.ic_block_shadow);
|
||||
updateText(R.string.dismiss_prediction_label);
|
||||
} else if (action == RECONFIGURE) {
|
||||
mHoverColor = Themes.getColorAccent(getContext());
|
||||
setDrawable(R.drawable.ic_setup_shadow);
|
||||
updateText(R.string.gadget_setup_text);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.android.launcher3.allapps;
|
||||
|
||||
import static com.android.launcher3.allapps.AllAppsGridAdapter.AdapterItem;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_TAP_ON_PERSONAL_TAB;
|
||||
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_ALLAPPS_TAP_ON_WORK_TAB;
|
||||
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_HAS_SHORTCUT_PERMISSION;
|
||||
@@ -63,7 +62,6 @@ import com.android.launcher3.allapps.search.SearchAdapterProvider;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.keyboard.FocusedItemDecorator;
|
||||
import com.android.launcher3.model.data.AppInfo;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.testing.TestProtocol;
|
||||
import com.android.launcher3.util.ItemInfoMatcher;
|
||||
import com.android.launcher3.util.MultiValueAlpha;
|
||||
@@ -564,37 +562,9 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo
|
||||
/**
|
||||
* Handles selection on focused view and returns success
|
||||
*/
|
||||
public boolean selectFocusedView(View v) {
|
||||
ItemInfo headerItem = getHighlightedItemFromHeader();
|
||||
if (headerItem != null) {
|
||||
return mLauncher.startActivitySafely(v, headerItem.getIntent(), headerItem);
|
||||
}
|
||||
AdapterItem focusedItem = getActiveRecyclerView().getApps().getFocusedChild();
|
||||
if (focusedItem != null) {
|
||||
View focusedView = getActiveRecyclerView().getLayoutManager()
|
||||
.findViewByPosition(focusedItem.position);
|
||||
if (focusedView != null && mSearchAdapterProvider.onAdapterItemSelected(focusedItem,
|
||||
focusedView)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (focusedItem != null && focusedItem.appInfo != null) {
|
||||
ItemInfo itemInfo = focusedItem.appInfo;
|
||||
return mLauncher.startActivitySafely(v, itemInfo.getIntent(), itemInfo);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the ItemInfo of a focused view inside {@link FloatingHeaderView}
|
||||
*/
|
||||
public ItemInfo getHighlightedItemFromHeader() {
|
||||
View view = getFloatingHeaderView().getFocusedChild();
|
||||
if (view != null && view.getTag() instanceof ItemInfo) {
|
||||
return ((ItemInfo) view.getTag());
|
||||
}
|
||||
|
||||
return null;
|
||||
public boolean launchHighlightedItem() {
|
||||
if (mSearchAdapterProvider == null) return false;
|
||||
return mSearchAdapterProvider.launchHighlightedItem();
|
||||
}
|
||||
|
||||
public SearchAdapterProvider getSearchAdapterProvider() {
|
||||
|
||||
@@ -29,6 +29,7 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.allapps.AllAppsGridAdapter.AppsGridLayoutManager;
|
||||
import com.android.launcher3.allapps.search.SearchAdapterProvider;
|
||||
import com.android.launcher3.allapps.search.SectionDecorationInfo;
|
||||
import com.android.launcher3.util.Themes;
|
||||
|
||||
@@ -48,6 +49,7 @@ public class AllAppsSectionDecorator extends RecyclerView.ItemDecoration {
|
||||
@Override
|
||||
public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {
|
||||
List<AllAppsGridAdapter.AdapterItem> adapterItems = mAppsView.getApps().getAdapterItems();
|
||||
SearchAdapterProvider adapterProvider = mAppsView.getSearchAdapterProvider();
|
||||
for (int i = 0; i < parent.getChildCount(); i++) {
|
||||
View view = parent.getChildAt(i);
|
||||
int position = parent.getChildAdapterPosition(view);
|
||||
@@ -56,7 +58,7 @@ public class AllAppsSectionDecorator extends RecyclerView.ItemDecoration {
|
||||
SectionDecorationInfo sectionInfo = adapterItem.sectionDecorationInfo;
|
||||
SectionDecorationHandler decorationHandler = sectionInfo.getDecorationHandler();
|
||||
if (decorationHandler != null) {
|
||||
if (sectionInfo.isFocusedView()) {
|
||||
if (view.equals(adapterProvider.getHighlightedItem())) {
|
||||
decorationHandler.onFocusDraw(c, view);
|
||||
} else {
|
||||
decorationHandler.onGroupDraw(c, view);
|
||||
@@ -102,7 +104,7 @@ public class AllAppsSectionDecorator extends RecyclerView.ItemDecoration {
|
||||
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
||||
private final boolean mIsTopRound;
|
||||
private final boolean mIsBottomRound;
|
||||
private float [] mCorners;
|
||||
private float[] mCorners;
|
||||
private float mFillSpacing;
|
||||
|
||||
public SectionDecorationHandler(Context context, boolean isFullWidth, int fillAlpha,
|
||||
|
||||
@@ -35,7 +35,6 @@ import com.android.launcher3.allapps.AllAppsGridAdapter.AdapterItem;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.search.SearchAlgorithm;
|
||||
import com.android.launcher3.search.SearchCallback;
|
||||
import com.android.launcher3.util.PackageManagerHelper;
|
||||
|
||||
/**
|
||||
* An interface to a search box that AllApps can command.
|
||||
@@ -105,30 +104,14 @@ public class AllAppsSearchBarController
|
||||
|
||||
@Override
|
||||
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
|
||||
if (FeatureFlags.ENABLE_DEVICE_SEARCH.get()) {
|
||||
if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_GO) {
|
||||
mLauncher.getStatsLogManager().logger()
|
||||
.log(LAUNCHER_ALLAPPS_FOCUSED_ITEM_SELECTED_WITH_IME);
|
||||
// selectFocusedView should return SearchTargetEvent that is passed onto onClick
|
||||
if (Launcher.getLauncher(mLauncher).getAppsView().selectFocusedView(v)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Skip if it's not the right action
|
||||
if (actionId != EditorInfo.IME_ACTION_SEARCH) {
|
||||
return false;
|
||||
if (actionId == EditorInfo.IME_ACTION_SEARCH || actionId == EditorInfo.IME_ACTION_GO) {
|
||||
mLauncher.getStatsLogManager().logger()
|
||||
.log(LAUNCHER_ALLAPPS_FOCUSED_ITEM_SELECTED_WITH_IME);
|
||||
// selectFocusedView should return SearchTargetEvent that is passed onto onClick
|
||||
return Launcher.getLauncher(mLauncher).getAppsView().launchHighlightedItem();
|
||||
}
|
||||
|
||||
// Skip if the query is empty
|
||||
String query = v.getText().toString();
|
||||
if (query.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
return mLauncher.startActivitySafely(v,
|
||||
PackageManagerHelper.getMarketSearchIntent(mLauncher, query), null
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,31 +15,31 @@
|
||||
*/
|
||||
package com.android.launcher3.allapps.search;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.android.launcher3.BaseDraggingActivity;
|
||||
import com.android.launcher3.BubbleTextView;
|
||||
import com.android.launcher3.allapps.AllAppsGridAdapter;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
|
||||
/**
|
||||
* Provides views for local search results
|
||||
*/
|
||||
public class DefaultSearchAdapterProvider extends SearchAdapterProvider {
|
||||
|
||||
private View mHighlightedView;
|
||||
|
||||
public DefaultSearchAdapterProvider(BaseDraggingActivity launcher) {
|
||||
super(launcher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindView(AllAppsGridAdapter.ViewHolder holder, int position) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSliceStatusUpdate(Uri sliceUri) {
|
||||
|
||||
if (position == 0) {
|
||||
mHighlightedView = holder.itemView;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -54,7 +54,17 @@ public class DefaultSearchAdapterProvider extends SearchAdapterProvider {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onAdapterItemSelected(AllAppsGridAdapter.AdapterItem adapterItem, View view) {
|
||||
public boolean launchHighlightedItem() {
|
||||
if (mHighlightedView instanceof BubbleTextView
|
||||
&& mHighlightedView.getTag() instanceof ItemInfo) {
|
||||
ItemInfo itemInfo = (ItemInfo) mHighlightedView.getTag();
|
||||
return mLauncher.startActivitySafely(mHighlightedView, itemInfo.getIntent(), itemInfo);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getHighlightedItem() {
|
||||
return mHighlightedView;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,7 +43,8 @@ public abstract class SearchAdapterProvider {
|
||||
/**
|
||||
* Called from LiveSearchManager to notify slice status updates.
|
||||
*/
|
||||
public abstract void onSliceStatusUpdate(Uri sliceUri);
|
||||
public void onSliceStatusUpdate(Uri sliceUri) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not viewType can be handled by searchProvider
|
||||
@@ -74,6 +75,12 @@ public abstract class SearchAdapterProvider {
|
||||
* handles selection event on search adapter item. Returns false if provider can not handle
|
||||
* event
|
||||
*/
|
||||
public abstract boolean onAdapterItemSelected(AllAppsGridAdapter.AdapterItem adapterItem,
|
||||
View view);
|
||||
public abstract boolean launchHighlightedItem();
|
||||
|
||||
/**
|
||||
* Returns the current highlighted view
|
||||
*/
|
||||
public abstract View getHighlightedItem();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -21,22 +21,11 @@ import com.android.launcher3.allapps.AllAppsSectionDecorator.SectionDecorationHa
|
||||
* Info class for a search section that is primarily used for decoration.
|
||||
*/
|
||||
public class SectionDecorationInfo {
|
||||
|
||||
public static final int QUICK_LAUNCH = 1 << 0;
|
||||
public static final int GROUPING = 1 << 1;
|
||||
|
||||
private String mSectionId;
|
||||
private boolean mFocused;
|
||||
private SectionDecorationHandler mDecorationHandler;
|
||||
|
||||
public boolean isFocusedView() {
|
||||
return mFocused;
|
||||
}
|
||||
|
||||
public void setFocusedView(boolean focused) {
|
||||
mFocused = focused;
|
||||
}
|
||||
|
||||
public SectionDecorationInfo() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
@@ -140,7 +140,7 @@ public class WidgetsBottomSheet extends BaseWidgetSheet implements Insettable {
|
||||
|
||||
WidgetsTableUtils.groupWidgetItemsIntoTable(widgets, mMaxHorizontalSpan).forEach(row -> {
|
||||
TableRow tableRow = new TableRow(getContext());
|
||||
tableRow.setGravity(Gravity.CENTER_VERTICAL);
|
||||
tableRow.setGravity(Gravity.TOP);
|
||||
row.forEach(widgetItem -> {
|
||||
WidgetCell widget = addItemCell(tableRow);
|
||||
widget.setPreviewSize(widgetItem.spanX, widgetItem.spanY);
|
||||
|
||||
@@ -577,6 +577,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet
|
||||
apps.getIconCache(),
|
||||
/* iconClickListener= */ WidgetsFullSheet.this,
|
||||
/* iconLongClickListener= */ WidgetsFullSheet.this);
|
||||
mWidgetsListAdapter.setHasStableIds(true);
|
||||
switch (mAdapterType) {
|
||||
case PRIMARY:
|
||||
mWidgetsListAdapter.setFilter(mPrimaryWidgetsFilter);
|
||||
@@ -592,6 +593,8 @@ public class WidgetsFullSheet extends BaseWidgetSheet
|
||||
void setup(WidgetsRecyclerView recyclerView) {
|
||||
mWidgetsRecyclerView = recyclerView;
|
||||
mWidgetsRecyclerView.setAdapter(mWidgetsListAdapter);
|
||||
// Disables animation because it disrupts the item focus upon adapter item change.
|
||||
mWidgetsRecyclerView.setItemAnimator(null);
|
||||
mWidgetsRecyclerView.setHeaderViewDimensionsProvider(WidgetsFullSheet.this);
|
||||
mWidgetsRecyclerView.setEdgeEffectFactory(
|
||||
((TopRoundedCornerView) mContent).createEdgeEffectFactory());
|
||||
|
||||
@@ -43,6 +43,7 @@ import com.android.launcher3.widget.model.WidgetsListHeaderEntry;
|
||||
import com.android.launcher3.widget.model.WidgetsListSearchHeaderEntry;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
@@ -216,7 +217,9 @@ public class WidgetsListAdapter extends Adapter<ViewHolder> implements OnHeaderC
|
||||
|
||||
@Override
|
||||
public long getItemId(int pos) {
|
||||
return pos;
|
||||
return Arrays.hashCode(new Object[]{
|
||||
mVisibleEntries.get(pos).mPkgItem.hashCode(),
|
||||
getItemViewType(pos)});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -52,7 +52,9 @@ public final class WidgetsListHeaderViewHolderBinder implements
|
||||
public void bindViewHolder(WidgetsListHeaderHolder viewHolder, WidgetsListHeaderEntry data,
|
||||
int position) {
|
||||
WidgetsListHeader widgetsListHeader = viewHolder.mWidgetsListHeader;
|
||||
if (position == 0) {
|
||||
if (mWidgetsListAdapter.getItemCount() == 1) {
|
||||
widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_single_item_ripple);
|
||||
} else if (position == 0) {
|
||||
widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_top_ripple);
|
||||
} else if (position == mWidgetsListAdapter.getItemCount() - 1) {
|
||||
widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_bottom_ripple);
|
||||
|
||||
+3
-1
@@ -53,7 +53,9 @@ public final class WidgetsListSearchHeaderViewHolderBinder implements
|
||||
public void bindViewHolder(WidgetsListSearchHeaderHolder viewHolder,
|
||||
WidgetsListSearchHeaderEntry data, int position) {
|
||||
WidgetsListHeader widgetsListHeader = viewHolder.mWidgetsListHeader;
|
||||
if (position == 0) {
|
||||
if (mWidgetsListAdapter.getItemCount() == 1) {
|
||||
widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_single_item_ripple);
|
||||
} else if (position == 0) {
|
||||
widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_top_ripple);
|
||||
} else if (position == mWidgetsListAdapter.getItemCount() - 1) {
|
||||
widgetsListHeader.setBackgroundResource(R.drawable.widgets_list_bottom_ripple);
|
||||
|
||||
@@ -158,7 +158,7 @@ public final class WidgetsListTableViewHolderBinder
|
||||
tableRow = (TableRow) table.getChildAt(i);
|
||||
} else {
|
||||
tableRow = new TableRow(table.getContext());
|
||||
tableRow.setGravity(Gravity.CENTER_VERTICAL);
|
||||
tableRow.setGravity(Gravity.TOP);
|
||||
table.addView(tableRow);
|
||||
}
|
||||
if (tableRow.getChildCount() > widgetItems.size()) {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<ImageView
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:background="@android:color/system_primary_500"/>
|
||||
android:background="@android:color/system_neutral1_500"/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:orientation = "horizontal"
|
||||
@@ -32,7 +32,7 @@
|
||||
<ImageView
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:background="@android:color/system_secondary_500"/>
|
||||
android:background="@android:color/system_accent1_500"/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:orientation = "horizontal"
|
||||
@@ -46,7 +46,7 @@
|
||||
<ImageView
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:background="@android:color/system_neutral_500"/>
|
||||
android:background="@android:color/system_neutral2_500"/>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
Reference in New Issue
Block a user