Snap for 8710680 from bf8528c21b to tm-qpr1-release
Change-Id: Id8b3e2faf5f48c389d48bb0d7e5e1ceded2b300b
This commit is contained in:
@@ -22,6 +22,7 @@ option java_outer_classname = "LauncherAtomExtensions";
|
||||
// Wrapper message for containers used at the quickstep level.
|
||||
// Message name should match with launcher_atom_extension.proto message at
|
||||
// the AOSP level.
|
||||
// Next ID = 3
|
||||
message ExtendedContainers {
|
||||
reserved 2; // Deleted fields
|
||||
|
||||
@@ -31,10 +32,16 @@ message ExtendedContainers {
|
||||
}
|
||||
|
||||
// Represents on-device search result container.
|
||||
// Next ID = 4
|
||||
message DeviceSearchResultContainer{
|
||||
optional int32 query_length = 1;
|
||||
optional SearchAttributes search_attributes = 2;
|
||||
// [0, m], m varies based on the display density and resolution
|
||||
// To indicate the location of the tapped on-device search result.
|
||||
// For application, it will be the column number in the apps row.
|
||||
optional int32 grid_x = 3;
|
||||
|
||||
// Next ID = 4
|
||||
message SearchAttributes{
|
||||
|
||||
// True if results are based on spell corrected query
|
||||
|
||||
@@ -171,8 +171,8 @@ public final class TaskbarAllAppsController {
|
||||
* This method should be called after an exit animation finishes, if applicable.
|
||||
*/
|
||||
void maybeCloseWindow() {
|
||||
if (AbstractFloatingView.getOpenView(mAllAppsContext, TYPE_ALL) != null
|
||||
|| mAllAppsContext.getDragController().isSystemDragInProgress()) {
|
||||
if (mAllAppsContext != null && (AbstractFloatingView.hasOpenView(mAllAppsContext, TYPE_ALL)
|
||||
|| mAllAppsContext.getDragController().isSystemDragInProgress())) {
|
||||
return;
|
||||
}
|
||||
mProxyView.close(false);
|
||||
|
||||
@@ -1799,6 +1799,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
|
||||
new PictureInPictureSurfaceTransaction.Builder()
|
||||
.setAlpha(0f)
|
||||
.build();
|
||||
tx.setShouldDisableCanAffectSystemUiFlags(false);
|
||||
int[] taskIds = TopTaskTracker.INSTANCE.get(mContext).getRunningSplitTaskIds();
|
||||
for (int taskId : taskIds) {
|
||||
mRecentsAnimationController.setFinishTaskTransaction(taskId,
|
||||
|
||||
@@ -582,14 +582,18 @@ public class StatsLogCompatManager extends StatsLogManager {
|
||||
}
|
||||
|
||||
private static int getGridX(LauncherAtom.ItemInfo info, boolean parent) {
|
||||
if (info.getContainerInfo().getContainerCase() == FOLDER) {
|
||||
LauncherAtom.ContainerInfo containerInfo = info.getContainerInfo();
|
||||
if (containerInfo.getContainerCase() == FOLDER) {
|
||||
if (parent) {
|
||||
return info.getContainerInfo().getFolder().getWorkspace().getGridX();
|
||||
return containerInfo.getFolder().getWorkspace().getGridX();
|
||||
} else {
|
||||
return info.getContainerInfo().getFolder().getGridX();
|
||||
return containerInfo.getFolder().getGridX();
|
||||
}
|
||||
} else if (containerInfo.getContainerCase() == EXTENDED_CONTAINERS) {
|
||||
return containerInfo.getExtendedContainers()
|
||||
.getDeviceSearchResultContainer().getGridX();
|
||||
} else {
|
||||
return info.getContainerInfo().getWorkspace().getGridX();
|
||||
return containerInfo.getWorkspace().getGridX();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -279,7 +279,10 @@ public class SwipePipToHomeAnimator extends RectFSpringAnim {
|
||||
// get the final leash operations but do not apply to the leash.
|
||||
final SurfaceControl.Transaction tx =
|
||||
PipSurfaceTransactionHelper.newSurfaceControlTransaction();
|
||||
return onAnimationUpdate(tx, new RectF(mDestinationBounds), END_PROGRESS);
|
||||
final PictureInPictureSurfaceTransaction pipTx =
|
||||
onAnimationUpdate(tx, new RectF(mDestinationBounds), END_PROGRESS);
|
||||
pipTx.setShouldDisableCanAffectSystemUiFlags(true);
|
||||
return pipTx;
|
||||
}
|
||||
|
||||
private RotatedPosition getRotatedPosition(float progress) {
|
||||
|
||||
@@ -141,8 +141,8 @@ import com.android.launcher3.util.IntSet;
|
||||
import com.android.launcher3.util.MultiValueAlpha;
|
||||
import com.android.launcher3.util.ResourceBasedOverride.Overrides;
|
||||
import com.android.launcher3.util.RunnableList;
|
||||
import com.android.launcher3.util.SplitConfigurationOptions.StagePosition;
|
||||
import com.android.launcher3.util.SplitConfigurationOptions.SplitBounds;
|
||||
import com.android.launcher3.util.SplitConfigurationOptions.StagePosition;
|
||||
import com.android.launcher3.util.Themes;
|
||||
import com.android.launcher3.util.TranslateEdgeEffect;
|
||||
import com.android.launcher3.util.ViewPool;
|
||||
@@ -4562,6 +4562,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
|
||||
new PictureInPictureSurfaceTransaction.Builder()
|
||||
.setAlpha(0f)
|
||||
.build();
|
||||
tx.setShouldDisableCanAffectSystemUiFlags(false);
|
||||
int[] taskIds = TopTaskTracker.INSTANCE.get(getContext()).getRunningSplitTaskIds();
|
||||
for (int taskId : taskIds) {
|
||||
mRecentsAnimationController.setFinishTaskTransaction(taskId,
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
style="@style/FastScrollerPopup"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignTop="@+id/all_apps_header"
|
||||
android:layout_marginTop="@dimen/all_apps_header_bottom_padding"
|
||||
android:layout_marginEnd="@dimen/fastscroll_popup_margin" />
|
||||
|
||||
<com.android.launcher3.views.RecyclerViewFastScroller
|
||||
@@ -31,6 +32,7 @@
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_alignTop="@+id/all_apps_header"
|
||||
android:layout_marginTop="@dimen/all_apps_header_bottom_padding"
|
||||
android:layout_marginEnd="@dimen/fastscroll_end_margin"
|
||||
launcher:canThumbDetach="true" />
|
||||
|
||||
|
||||
@@ -56,4 +56,9 @@
|
||||
|
||||
<color name="workspace_accent_color_light">@android:color/system_accent1_100</color>
|
||||
<color name="workspace_accent_color_dark">@android:color/system_accent2_600</color>
|
||||
|
||||
<color name="preload_icon_accent_color_light">@android:color/system_accent1_600</color>
|
||||
<color name="preload_icon_background_color_light">@android:color/system_accent2_200</color>
|
||||
<color name="preload_icon_accent_color_dark">@android:color/system_accent1_300</color>
|
||||
<color name="preload_icon_background_color_dark">@android:color/system_neutral2_700</color>
|
||||
</resources>
|
||||
|
||||
@@ -53,6 +53,8 @@
|
||||
<attr name="workProfileOverlayTextColor" format="color" />
|
||||
<attr name="workspaceAccentColor" format="color" />
|
||||
<attr name="dropTargetHoverTextColor" format="color" />
|
||||
<attr name="preloadIconAccentColor" format="color" />
|
||||
<attr name="preloadIconBackgroundColor" format="color" />
|
||||
|
||||
<attr name="allAppsButtonBgColor" format="color" />
|
||||
<attr name="allAppsButtonColor1" format="color" />
|
||||
|
||||
@@ -85,4 +85,9 @@
|
||||
<color name="all_apps_button_color_2">#00677E</color>
|
||||
<color name="all_apps_button_color_3">#5F757E</color>
|
||||
<color name="all_apps_button_color_4">#005A6E</color>
|
||||
|
||||
<color name="preload_icon_accent_color_light">#00668B</color>
|
||||
<color name="preload_icon_background_color_light">#B5CAD7</color>
|
||||
<color name="preload_icon_accent_color_dark">#4BB6E8</color>
|
||||
<color name="preload_icon_background_color_dark">#40484D</color>
|
||||
</resources>
|
||||
|
||||
@@ -65,6 +65,8 @@
|
||||
<item name="workspaceAccentColor">@color/workspace_accent_color_light</item>
|
||||
<item name="dropTargetHoverTextColor">@color/workspace_text_color_dark</item>
|
||||
<item name="overviewScrimColor">@color/overview_scrim</item>
|
||||
<item name="preloadIconAccentColor">@color/preload_icon_accent_color_light</item>
|
||||
<item name="preloadIconBackgroundColor">@color/preload_icon_background_color_light</item>
|
||||
|
||||
<item name="android:windowTranslucentStatus">false</item>
|
||||
<item name="android:windowTranslucentNavigation">false</item>
|
||||
@@ -123,6 +125,8 @@
|
||||
<item name="workProfileOverlayTextColor">@android:color/white</item>
|
||||
<item name="eduHalfSheetBGColor">#DD000000</item>
|
||||
<item name="overviewScrimColor">@color/overview_scrim_dark</item>
|
||||
<item name="preloadIconAccentColor">@color/preload_icon_accent_color_dark</item>
|
||||
<item name="preloadIconBackgroundColor">@color/preload_icon_background_color_dark</item>
|
||||
</style>
|
||||
|
||||
<style name="LauncherTheme.Dark.DarkMainColor" parent="@style/LauncherTheme.Dark">
|
||||
|
||||
@@ -2776,7 +2776,7 @@ public class Launcher extends StatefulActivity<LauncherState>
|
||||
View v = getFirstMatch(Collections.singletonList(activeRecyclerView),
|
||||
preferredItem, packageAndUserAndApp);
|
||||
|
||||
if (activeRecyclerView.getCurrentScrollY() > 0) {
|
||||
if (v != null && activeRecyclerView.getCurrentScrollY() > 0) {
|
||||
RectF locationBounds = new RectF();
|
||||
FloatingIconView.getLocationBoundsForView(this, v, false, locationBounds,
|
||||
new Rect());
|
||||
@@ -2804,6 +2804,7 @@ public class Launcher extends StatefulActivity<LauncherState>
|
||||
* @param containers List of ViewGroups to scan, in order of preference.
|
||||
* @param operators List of operators, in order starting from best matching operator.
|
||||
*/
|
||||
@Nullable
|
||||
private static View getFirstMatch(Iterable<ViewGroup> containers,
|
||||
final Predicate<ItemInfo>... operators) {
|
||||
for (Predicate<ItemInfo> operator : operators) {
|
||||
@@ -2821,6 +2822,7 @@ public class Launcher extends StatefulActivity<LauncherState>
|
||||
* Returns the first view matching the operator in the given ViewGroups, or null if none.
|
||||
* Forward iteration matters.
|
||||
*/
|
||||
@Nullable
|
||||
private static View mapOverViewGroup(ViewGroup container, Predicate<ItemInfo> op) {
|
||||
final int itemCount = container.getChildCount();
|
||||
for (int itemIdx = 0; itemIdx < itemCount; itemIdx++) {
|
||||
|
||||
@@ -128,6 +128,7 @@ public abstract class BaseAllAppsContainerView<T extends Context & ActivityConte
|
||||
private final int mScrimColor;
|
||||
private final int mHeaderProtectionColor;
|
||||
protected final float mHeaderThreshold;
|
||||
private int mHeaderBottomAdjustment;
|
||||
private ScrimView mScrimView;
|
||||
private int mHeaderColor;
|
||||
private int mTabsProtectionAlpha;
|
||||
@@ -140,6 +141,8 @@ public abstract class BaseAllAppsContainerView<T extends Context & ActivityConte
|
||||
mScrimColor = Themes.getAttrColor(context, R.attr.allAppsScrimColor);
|
||||
mHeaderThreshold = getResources().getDimensionPixelSize(
|
||||
R.dimen.dynamic_grid_cell_border_spacing);
|
||||
mHeaderBottomAdjustment = getResources().getDimensionPixelSize(
|
||||
R.dimen.all_apps_header_bottom_adjustment);
|
||||
mHeaderProtectionColor = Themes.getAttrColor(context, R.attr.allappsHeaderProtectionColor);
|
||||
|
||||
mWorkManager = new WorkProfileManager(
|
||||
@@ -722,6 +725,9 @@ public abstract class BaseAllAppsContainerView<T extends Context & ActivityConte
|
||||
mHeaderPaint.setAlpha((int) (getAlpha() * Color.alpha(mHeaderColor)));
|
||||
if (mHeaderPaint.getColor() != mScrimColor && mHeaderPaint.getColor() != 0) {
|
||||
int bottom = getHeaderBottom();
|
||||
if (!mUsingTabs) {
|
||||
bottom += getFloatingHeaderView().getPaddingBottom() - mHeaderBottomAdjustment;
|
||||
}
|
||||
canvas.drawRect(0, 0, canvas.getWidth(), bottom, mHeaderPaint);
|
||||
int tabsHeight = getFloatingHeaderView().getPeripheralProtectionHeight();
|
||||
if (mTabsProtectionAlpha > 0 && tabsHeight != 0) {
|
||||
|
||||
@@ -81,7 +81,6 @@ public class FloatingHeaderView extends LinearLayout implements
|
||||
|
||||
protected final Map<AllAppsRow, PluginHeaderRow> mPluginRows = new ArrayMap<>();
|
||||
|
||||
private final int mHeaderTopPadding;
|
||||
// These two values are necessary to ensure that the header protection is drawn correctly.
|
||||
private final int mHeaderTopAdjustment;
|
||||
private final int mHeaderBottomAdjustment;
|
||||
@@ -118,8 +117,6 @@ public class FloatingHeaderView extends LinearLayout implements
|
||||
|
||||
public FloatingHeaderView(@NonNull Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
mHeaderTopPadding = context.getResources()
|
||||
.getDimensionPixelSize(R.dimen.all_apps_header_top_padding);
|
||||
mHeaderTopAdjustment = context.getResources()
|
||||
.getDimensionPixelSize(R.dimen.all_apps_header_top_adjustment);
|
||||
mHeaderBottomAdjustment = context.getResources()
|
||||
@@ -209,7 +206,7 @@ public class FloatingHeaderView extends LinearLayout implements
|
||||
int oldMaxHeight = mMaxTranslation;
|
||||
updateExpectedHeight();
|
||||
|
||||
if (mMaxTranslation != oldMaxHeight) {
|
||||
if (mMaxTranslation != oldMaxHeight || mCollapsed) {
|
||||
BaseAllAppsContainerView<?> parent = (BaseAllAppsContainerView<?>) getParent();
|
||||
if (parent != null) {
|
||||
parent.setupHeader();
|
||||
@@ -326,7 +323,7 @@ public class FloatingHeaderView extends LinearLayout implements
|
||||
int uncappedTranslationY = mTranslationY;
|
||||
mTranslationY = Math.max(mTranslationY, -mMaxTranslation);
|
||||
|
||||
if (mCollapsed || uncappedTranslationY < mTranslationY - mHeaderTopPadding) {
|
||||
if (mCollapsed || uncappedTranslationY < mTranslationY - getPaddingTop()) {
|
||||
// we hide it completely if already capped (for opening search anim)
|
||||
for (FloatingHeaderRow row : mAllRows) {
|
||||
row.setVerticalScroll(0, true /* isScrolledOut */);
|
||||
@@ -339,7 +336,10 @@ public class FloatingHeaderView extends LinearLayout implements
|
||||
|
||||
mTabLayout.setTranslationY(mTranslationY);
|
||||
|
||||
int clipTop = mHeaderTopPadding - mHeaderTopAdjustment;
|
||||
int clipTop = getPaddingTop() - mHeaderTopAdjustment;
|
||||
if (mTabsHidden) {
|
||||
clipTop += getPaddingBottom() - mHeaderBottomAdjustment;
|
||||
}
|
||||
mRVClip.top = mTabsHidden ? clipTop : 0;
|
||||
mHeaderClip.top = clipTop;
|
||||
// clipping on a draw might cause additional redraw
|
||||
|
||||
@@ -262,8 +262,8 @@ public final class FeatureFlags {
|
||||
public static final BooleanFlag ENABLE_ONE_SEARCH_MOTION = new DeviceFlag(
|
||||
"ENABLE_ONE_SEARCH_MOTION", true, "Enables animations in OneSearch.");
|
||||
|
||||
public static final BooleanFlag ENABLE_SHOW_KEYBOARD_IN_ALL_APPS = new DeviceFlag(
|
||||
"ENABLE_SHOW_KEYBOARD_IN_ALL_APPS", true,
|
||||
public static final BooleanFlag ENABLE_SHOW_KEYBOARD_OPTION_IN_ALL_APPS = new DeviceFlag(
|
||||
"ENABLE_SHOW_KEYBOARD_OPTION_IN_ALL_APPS", true,
|
||||
"Enable option to show keyboard when going to all-apps");
|
||||
|
||||
public static final BooleanFlag USE_LOCAL_ICON_OVERRIDES = getDebugFlag(
|
||||
|
||||
@@ -28,11 +28,9 @@ import android.graphics.Paint;
|
||||
import android.graphics.Path;
|
||||
import android.graphics.PathMeasure;
|
||||
import android.graphics.Rect;
|
||||
import android.util.Pair;
|
||||
import android.util.Property;
|
||||
import android.util.SparseArray;
|
||||
import android.view.ContextThemeWrapper;
|
||||
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.anim.Interpolators;
|
||||
import com.android.launcher3.icons.FastBitmapDrawable;
|
||||
@@ -40,8 +38,6 @@ import com.android.launcher3.icons.GraphicsUtils;
|
||||
import com.android.launcher3.model.data.ItemInfoWithIcon;
|
||||
import com.android.launcher3.util.Themes;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
/**
|
||||
* Extension of {@link FastBitmapDrawable} which shows a progress bar around the icon.
|
||||
*/
|
||||
@@ -61,9 +57,9 @@ public class PreloadIconDrawable extends FastBitmapDrawable {
|
||||
};
|
||||
|
||||
private static final int DEFAULT_PATH_SIZE = 100;
|
||||
private static final float PROGRESS_WIDTH = 7;
|
||||
private static final float PROGRESS_GAP = 2;
|
||||
private static final int MAX_PAINT_ALPHA = 255;
|
||||
private static final int TRACK_ALPHA = (int) (0.27f * MAX_PAINT_ALPHA);
|
||||
private static final int DISABLED_ICON_ALPHA = (int) (0.6f * MAX_PAINT_ALPHA);
|
||||
|
||||
private static final long DURATION_SCALE = 500;
|
||||
|
||||
@@ -71,13 +67,8 @@ public class PreloadIconDrawable extends FastBitmapDrawable {
|
||||
// Duration = COMPLETE_ANIM_FRACTION * DURATION_SCALE
|
||||
private static final float COMPLETE_ANIM_FRACTION = 0.3f;
|
||||
|
||||
private static final int COLOR_TRACK = 0x77EEEEEE;
|
||||
private static final int COLOR_SHADOW = 0x55000000;
|
||||
|
||||
private static final float SMALL_SCALE = 0.6f;
|
||||
|
||||
private static final SparseArray<WeakReference<Pair<Path, Bitmap>>> sShadowCache =
|
||||
new SparseArray<>();
|
||||
private static final float SMALL_SCALE = 0.7f;
|
||||
private static final float PROGRESS_STROKE_SCALE = 0.075f;
|
||||
|
||||
private static final int PRELOAD_ACCENT_COLOR_INDEX = 0;
|
||||
private static final int PRELOAD_BACKGROUND_COLOR_INDEX = 1;
|
||||
@@ -94,7 +85,6 @@ public class PreloadIconDrawable extends FastBitmapDrawable {
|
||||
private final Path mScaledProgressPath;
|
||||
private final Paint mProgressPaint;
|
||||
|
||||
private Bitmap mShadowBitmap;
|
||||
private final int mIndicatorColor;
|
||||
private final int mSystemAccentColor;
|
||||
private final int mSystemBackgroundColor;
|
||||
@@ -134,7 +124,6 @@ public class PreloadIconDrawable extends FastBitmapDrawable {
|
||||
mScaledProgressPath = new Path();
|
||||
|
||||
mProgressPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
|
||||
mProgressPaint.setStyle(Paint.Style.STROKE);
|
||||
mProgressPaint.setStrokeCap(Paint.Cap.ROUND);
|
||||
mIndicatorColor = indicatorColor;
|
||||
|
||||
@@ -149,47 +138,22 @@ public class PreloadIconDrawable extends FastBitmapDrawable {
|
||||
@Override
|
||||
protected void onBoundsChange(Rect bounds) {
|
||||
super.onBoundsChange(bounds);
|
||||
|
||||
float progressWidth = PROGRESS_STROKE_SCALE * bounds.width();
|
||||
mTmpMatrix.setScale(
|
||||
(bounds.width() - 2 * PROGRESS_WIDTH - 2 * PROGRESS_GAP) / DEFAULT_PATH_SIZE,
|
||||
(bounds.height() - 2 * PROGRESS_WIDTH - 2 * PROGRESS_GAP) / DEFAULT_PATH_SIZE);
|
||||
mTmpMatrix.postTranslate(
|
||||
bounds.left + PROGRESS_WIDTH + PROGRESS_GAP,
|
||||
bounds.top + PROGRESS_WIDTH + PROGRESS_GAP);
|
||||
(bounds.width() - 2 * progressWidth) / DEFAULT_PATH_SIZE,
|
||||
(bounds.height() - 2 * progressWidth) / DEFAULT_PATH_SIZE);
|
||||
mTmpMatrix.postTranslate(bounds.left + progressWidth, bounds.top + progressWidth);
|
||||
|
||||
mShapePath.transform(mTmpMatrix, mScaledTrackPath);
|
||||
float scale = bounds.width() / DEFAULT_PATH_SIZE;
|
||||
mProgressPaint.setStrokeWidth(PROGRESS_WIDTH * scale);
|
||||
mProgressPaint.setStrokeWidth(progressWidth);
|
||||
|
||||
mShadowBitmap = getShadowBitmap(bounds.width(), bounds.height(),
|
||||
(PROGRESS_GAP ) * scale);
|
||||
mPathMeasure.setPath(mScaledTrackPath, true);
|
||||
mTrackLength = mPathMeasure.getLength();
|
||||
|
||||
setInternalProgress(mInternalStateProgress);
|
||||
}
|
||||
|
||||
private Bitmap getShadowBitmap(int width, int height, float shadowRadius) {
|
||||
int key = ((width << 16) | height) * (mIsDarkMode ? -1 : 1);
|
||||
WeakReference<Pair<Path, Bitmap>> shadowRef = sShadowCache.get(key);
|
||||
Pair<Path, Bitmap> cache = shadowRef != null ? shadowRef.get() : null;
|
||||
Bitmap shadow = cache != null && cache.first.equals(mShapePath) ? cache.second : null;
|
||||
if (shadow != null) {
|
||||
return shadow;
|
||||
}
|
||||
shadow = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
Canvas c = new Canvas(shadow);
|
||||
mProgressPaint.setShadowLayer(shadowRadius, 0, 0, mIsStartable
|
||||
? COLOR_SHADOW : mSystemAccentColor);
|
||||
mProgressPaint.setColor(mIsStartable ? COLOR_TRACK : mSystemBackgroundColor);
|
||||
mProgressPaint.setAlpha(MAX_PAINT_ALPHA);
|
||||
c.drawPath(mScaledTrackPath, mProgressPaint);
|
||||
mProgressPaint.clearShadowLayer();
|
||||
c.setBitmap(null);
|
||||
|
||||
sShadowCache.put(key, new WeakReference<>(Pair.create(mShapePath, shadow)));
|
||||
return shadow;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawInternal(Canvas canvas, Rect bounds) {
|
||||
if (mRanFinishAnimation) {
|
||||
@@ -197,12 +161,17 @@ public class PreloadIconDrawable extends FastBitmapDrawable {
|
||||
return;
|
||||
}
|
||||
|
||||
// Draw track.
|
||||
// Draw background.
|
||||
mProgressPaint.setStyle(Paint.Style.FILL_AND_STROKE);
|
||||
mProgressPaint.setColor(mSystemBackgroundColor);
|
||||
canvas.drawPath(mScaledTrackPath, mProgressPaint);
|
||||
|
||||
// Draw track and progress.
|
||||
mProgressPaint.setStyle(Paint.Style.STROKE);
|
||||
mProgressPaint.setColor(mIsStartable ? mIndicatorColor : mSystemAccentColor);
|
||||
mProgressPaint.setAlpha(TRACK_ALPHA);
|
||||
canvas.drawPath(mScaledTrackPath, mProgressPaint);
|
||||
mProgressPaint.setAlpha(mTrackAlpha);
|
||||
if (mShadowBitmap != null) {
|
||||
canvas.drawBitmap(mShadowBitmap, bounds.left, bounds.top, mProgressPaint);
|
||||
}
|
||||
canvas.drawPath(mScaledProgressPath, mProgressPaint);
|
||||
|
||||
int saveCount = canvas.save();
|
||||
@@ -211,6 +180,11 @@ public class PreloadIconDrawable extends FastBitmapDrawable {
|
||||
canvas.restoreToCount(saveCount);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateFilter() {
|
||||
setAlpha(mIsDisabled ? DISABLED_ICON_ALPHA : MAX_PAINT_ALPHA);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the install progress based on the level
|
||||
*/
|
||||
@@ -326,13 +300,12 @@ public class PreloadIconDrawable extends FastBitmapDrawable {
|
||||
}
|
||||
|
||||
private static int[] getPreloadColors(Context context) {
|
||||
Context dayNightThemeContext = new ContextThemeWrapper(
|
||||
context, android.R.style.Theme_DeviceDefault_DayNight);
|
||||
int[] preloadColors = new int[2];
|
||||
|
||||
preloadColors[PRELOAD_ACCENT_COLOR_INDEX] = Themes.getColorAccent(dayNightThemeContext);
|
||||
preloadColors[PRELOAD_BACKGROUND_COLOR_INDEX] = Themes.getColorBackgroundFloating(
|
||||
dayNightThemeContext);
|
||||
preloadColors[PRELOAD_ACCENT_COLOR_INDEX] = Themes.getAttrColor(context,
|
||||
R.attr.preloadIconAccentColor);
|
||||
preloadColors[PRELOAD_BACKGROUND_COLOR_INDEX] = Themes.getAttrColor(context,
|
||||
R.attr.preloadIconBackgroundColor);
|
||||
|
||||
return preloadColors;
|
||||
}
|
||||
|
||||
@@ -735,7 +735,8 @@ public class StatsLogManager implements ResourceBasedOverride {
|
||||
UNKNOWN(0),
|
||||
COLD(1),
|
||||
HOT(2),
|
||||
TIMEOUT(3);
|
||||
TIMEOUT(3),
|
||||
FAIL(4);
|
||||
|
||||
private final int mId;
|
||||
|
||||
|
||||
@@ -58,6 +58,8 @@ import com.android.launcher3.model.data.ItemInfoWithIcon;
|
||||
import com.android.launcher3.popup.SystemShortcut;
|
||||
import com.android.launcher3.shortcuts.DeepShortcutView;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* A view that is created to look like another view with the purpose of creating fluid animations.
|
||||
*/
|
||||
@@ -295,9 +297,11 @@ public class FloatingIconView extends FrameLayout implements
|
||||
|
||||
drawable = drawable == null ? null : drawable.getConstantState().newDrawable();
|
||||
int iconOffset = getOffsetForIconBounds(l, drawable, pos);
|
||||
// Clone right away as we are on the background thread instead of blocking the
|
||||
// main thread later
|
||||
Drawable btvClone = btvIcon == null ? null : btvIcon.getConstantState().newDrawable();
|
||||
synchronized (outIconLoadResult) {
|
||||
outIconLoadResult.btvDrawable = btvIcon == null || drawable == btvIcon
|
||||
? null : btvIcon.getConstantState().newDrawable();
|
||||
outIconLoadResult.btvDrawable = () -> btvClone;
|
||||
outIconLoadResult.drawable = drawable;
|
||||
outIconLoadResult.badge = badge;
|
||||
outIconLoadResult.iconOffset = iconOffset;
|
||||
@@ -318,7 +322,7 @@ public class FloatingIconView extends FrameLayout implements
|
||||
*/
|
||||
@UiThread
|
||||
private void setIcon(@Nullable Drawable drawable, @Nullable Drawable badge,
|
||||
@Nullable Drawable btvIcon, int iconOffset) {
|
||||
@Nullable Supplier<Drawable> btvIcon, int iconOffset) {
|
||||
final DeviceProfile dp = mLauncher.getDeviceProfile();
|
||||
final InsettableFrameLayout.LayoutParams lp =
|
||||
(InsettableFrameLayout.LayoutParams) getLayoutParams();
|
||||
@@ -361,9 +365,9 @@ public class FloatingIconView extends FrameLayout implements
|
||||
*
|
||||
* Allows nullable as this may be cleared when drawing is deferred to ClipIconView.
|
||||
*/
|
||||
private void setOriginalDrawableBackground(@Nullable Drawable btvIcon) {
|
||||
private void setOriginalDrawableBackground(@Nullable Supplier<Drawable> btvIcon) {
|
||||
if (!mIsOpening) {
|
||||
mBtvDrawable.setBackground(btvIcon);
|
||||
mBtvDrawable.setBackground(btvIcon == null ? null : btvIcon.get());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -518,21 +522,26 @@ public class FloatingIconView extends FrameLayout implements
|
||||
getLocationBoundsForView(l, v, isOpening, position);
|
||||
|
||||
final FastBitmapDrawable btvIcon;
|
||||
final Supplier<Drawable> btvDrawableSupplier;
|
||||
if (v instanceof BubbleTextView) {
|
||||
BubbleTextView btv = (BubbleTextView) v;
|
||||
if (info instanceof ItemInfoWithIcon
|
||||
&& (((ItemInfoWithIcon) info).runtimeStatusFlags
|
||||
& ItemInfoWithIcon.FLAG_SHOW_DOWNLOAD_PROGRESS_MASK) != 0) {
|
||||
btvIcon = btv.makePreloadIcon();
|
||||
btvDrawableSupplier = () -> btvIcon;
|
||||
} else {
|
||||
btvIcon = (FastBitmapDrawable) btv.getIcon().getConstantState().newDrawable();
|
||||
btvIcon = btv.getIcon();
|
||||
// Clone when needed
|
||||
btvDrawableSupplier = () -> btvIcon.getConstantState().newDrawable();
|
||||
}
|
||||
} else {
|
||||
btvIcon = null;
|
||||
btvDrawableSupplier = null;
|
||||
}
|
||||
|
||||
IconLoadResult result = new IconLoadResult(info, btvIcon != null && btvIcon.isThemed());
|
||||
result.btvDrawable = btvIcon;
|
||||
result.btvDrawable = btvDrawableSupplier;
|
||||
|
||||
final long fetchIconId = sFetchIconId++;
|
||||
MODEL_EXECUTOR.getHandler().postAtFrontOfQueue(() -> {
|
||||
@@ -647,7 +656,7 @@ public class FloatingIconView extends FrameLayout implements
|
||||
private static class IconLoadResult {
|
||||
final ItemInfo itemInfo;
|
||||
final boolean isThemed;
|
||||
Drawable btvDrawable;
|
||||
Supplier<Drawable> btvDrawable;
|
||||
Drawable drawable;
|
||||
Drawable badge;
|
||||
int iconOffset;
|
||||
|
||||
Reference in New Issue
Block a user