Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c407861 authored by Tony Wickham's avatar Tony Wickham
Browse files

Merging from ub-launcher3-master @ build 6777814

Test: manual, presubmit on the source branch
x20/teams/android-launcher/merge/ub-launcher3-master_master_6777814.html

Change-Id: I0bb722c8f29e91cb382337f8b11bcf43d711949b
parents af97d88f 7658071d
Loading
Loading
Loading
Loading
+42 −6
Original line number Diff line number Diff line
@@ -43,9 +43,13 @@ import android.util.ArrayMap;
import android.util.Log;

import androidx.annotation.MainThread;
import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;

import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherProvider;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.R;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.model.data.ItemInfo;
@@ -74,6 +78,9 @@ public final class WellbeingModel {
    private static final int MSG_PACKAGE_REMOVED = 2;
    private static final int MSG_FULL_REFRESH = 3;

    private static final int UNKNOWN_MINIMAL_DEVICE_STATE = 0;
    private static final int IN_MINIMAL_DEVICE = 2;

    // Welbeing contract
    private static final String PATH_ACTIONS = "actions";
    private static final String PATH_MINIMAL_DEVICE = "minimal_device";
@@ -84,6 +91,8 @@ public final class WellbeingModel {
    private static final String EXTRA_MAX_NUM_ACTIONS_SHOWN = "max_num_actions_shown";
    private static final String EXTRA_PACKAGES = "packages";
    private static final String EXTRA_SUCCESS = "success";
    private static final String EXTRA_MINIMAL_DEVICE_STATE = "minimal_device_state";
    private static final String DB_NAME_MINIMAL_DEVICE = "minimal.db";

    public static final MainThreadInitializedObject<WellbeingModel> INSTANCE =
            new MainThreadInitializedObject<>(WellbeingModel::new);
@@ -121,11 +130,12 @@ public final class WellbeingModel {
                    updateWellbeingData();
                } else if (uri.getPath().contains(PATH_MINIMAL_DEVICE)) {
                    // Wellbeing reports that minimal device state or config is changed.
                    updateLauncherModel();
                    updateLauncherModel(context);
                }
            }
        };
        FeatureFlags.ENABLE_MINIMAL_DEVICE.addChangeListener(mContext, this::updateLauncherModel);
        FeatureFlags.ENABLE_MINIMAL_DEVICE.addChangeListener(mContext, () ->
                updateLauncherModel(context));

        if (!TextUtils.isEmpty(mWellbeingProviderPkg)) {
            context.registerReceiver(
@@ -170,7 +180,6 @@ public final class WellbeingModel {
            Log.e(TAG, "Failed to register content observer for " + actionsUri + ": " + e);
            if (mIsInTest) throw new RuntimeException(e);
        }

        updateWellbeingData();
    }

@@ -208,10 +217,34 @@ public final class WellbeingModel {
        mWorkerHandler.sendEmptyMessage(MSG_FULL_REFRESH);
    }

    private void updateLauncherModel() {
        if (!FeatureFlags.ENABLE_MINIMAL_DEVICE.get()) return;
    private void updateLauncherModel(@NonNull final Context context) {
        if (!FeatureFlags.ENABLE_MINIMAL_DEVICE.get()) {
            reloadLauncherInNormalMode(context);
            return;
        }
        runWithMinimalDeviceConfigs((bundle) -> {
            if (bundle.getInt(EXTRA_MINIMAL_DEVICE_STATE, UNKNOWN_MINIMAL_DEVICE_STATE)
                    == IN_MINIMAL_DEVICE) {
                reloadLauncherInMinimalMode(context);
            } else {
                reloadLauncherInNormalMode(context);
            }
        });
    }

    private void reloadLauncherInNormalMode(@NonNull final Context context) {
        LauncherSettings.Settings.call(context.getContentResolver(),
                LauncherSettings.Settings.METHOD_SWITCH_DATABASE,
                InvariantDeviceProfile.INSTANCE.get(context).dbFile);
    }

        // TODO: init Launcher in minimal device / normal mode
    private void reloadLauncherInMinimalMode(@NonNull final Context context) {
        final Bundle extras = new Bundle();
        extras.putString(LauncherProvider.KEY_LAYOUT_PROVIDER_AUTHORITY,
                mWellbeingProviderPkg + ".api");
        LauncherSettings.Settings.call(context.getContentResolver(),
                LauncherSettings.Settings.METHOD_SWITCH_DATABASE,
                DB_NAME_MINIMAL_DEVICE, extras);
    }

    private Uri.Builder apiBuilder() {
@@ -225,6 +258,9 @@ public final class WellbeingModel {
     */
    @WorkerThread
    private void runWithMinimalDeviceConfigs(Consumer<Bundle> consumer) {
        if (!FeatureFlags.ENABLE_MINIMAL_DEVICE.get()) {
            return;
        }
        if (DEBUG || mIsInTest) {
            Log.d(TAG, "runWithMinimalDeviceConfigs() called");
        }
+4 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.launcher3.uioverrides;

import static com.android.launcher3.anim.Interpolators.AGGRESSIVE_EASE_IN_OUT;
import static com.android.launcher3.anim.Interpolators.LINEAR;
import static com.android.launcher3.graphics.OverviewScrim.SCRIM_MULTIPLIER;
import static com.android.launcher3.graphics.Scrim.SCRIM_PROGRESS;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_FADE;
import static com.android.launcher3.states.StateAnimationConfig.ANIM_OVERVIEW_MODAL;
@@ -70,6 +71,7 @@ public abstract class BaseRecentsViewStateController<T extends RecentsView>
        getContentAlphaProperty().set(mRecentsView, state.overviewUi ? 1f : 0);
        OverviewScrim scrim = mLauncher.getDragLayer().getOverviewScrim();
        SCRIM_PROGRESS.set(scrim, state.getOverviewScrimAlpha(mLauncher));
        SCRIM_MULTIPLIER.set(scrim, 1f);
        getTaskModalnessProperty().set(mRecentsView, state.getOverviewModalness());
    }

@@ -108,6 +110,8 @@ public abstract class BaseRecentsViewStateController<T extends RecentsView>
        OverviewScrim scrim = mLauncher.getDragLayer().getOverviewScrim();
        setter.setFloat(scrim, SCRIM_PROGRESS, toState.getOverviewScrimAlpha(mLauncher),
                config.getInterpolator(ANIM_OVERVIEW_SCRIM_FADE, LINEAR));
        setter.setFloat(scrim, SCRIM_MULTIPLIER, 1f,
                config.getInterpolator(ANIM_OVERVIEW_SCRIM_FADE, LINEAR));

        setter.setFloat(
                mRecentsView, getTaskModalnessProperty(),
+6 −6
Original line number Diff line number Diff line
@@ -66,8 +66,8 @@ public class NavBarToHomeTouchController implements TouchController,
        SingleAxisSwipeDetector.Listener {

    private static final Interpolator PULLBACK_INTERPOLATOR = DEACCEL_3;
    // How much of the overview scrim we can remove during the transition.
    private static final float OVERVIEW_TO_HOME_SCRIM_PROGRESS = 0.5f;
    // The min amount of overview scrim we keep during the transition.
    private static final float OVERVIEW_TO_HOME_SCRIM_MULTIPLIER = 0.5f;

    private final Launcher mLauncher;
    private final SingleAxisSwipeDetector mSwipeDetector;
@@ -163,11 +163,11 @@ public class NavBarToHomeTouchController implements TouchController,
            RecentsView recentsView = mLauncher.getOverviewPanel();
            AnimatorControllerWithResistance.createRecentsResistanceFromOverviewAnim(mLauncher,
                    builder);
            float endScrimAlpha = Utilities.mapRange(OVERVIEW_TO_HOME_SCRIM_PROGRESS,
                    mStartState.getOverviewScrimAlpha(mLauncher),
                    mEndState.getOverviewScrimAlpha(mLauncher));

            builder.setFloat(mLauncher.getDragLayer().getOverviewScrim(),
                    OverviewScrim.SCRIM_PROGRESS, endScrimAlpha, PULLBACK_INTERPOLATOR);
                    OverviewScrim.SCRIM_MULTIPLIER, OVERVIEW_TO_HOME_SCRIM_MULTIPLIER,
                    PULLBACK_INTERPOLATOR);

            if (ENABLE_QUICKSTEP_LIVE_TILE.get()) {
                builder.addOnFrameCallback(recentsView::redrawLiveTile);
            }
+10 −2
Original line number Diff line number Diff line
@@ -82,7 +82,15 @@ public abstract class TaskViewTouchController<T extends BaseDraggingActivity>
        mDetector = new SingleAxisSwipeDetector(activity, this, dir);
    }

    private boolean canInterceptTouch() {
    private boolean canInterceptTouch(MotionEvent ev) {
        if ((ev.getEdgeFlags() & Utilities.EDGE_NAV_BAR) != 0) {
            // Don't intercept swipes on the nav bar, as user might be trying to go home
            // during a task dismiss animation.
            if (mCurrentAnimation != null) {
                mCurrentAnimation.getAnimationPlayer().end();
            }
            return false;
        }
        if (mCurrentAnimation != null) {
            mCurrentAnimation.forceFinishIfCloseToEnd();
        }
@@ -118,7 +126,7 @@ public abstract class TaskViewTouchController<T extends BaseDraggingActivity>
            clearState();
        }
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            mNoIntercept = !canInterceptTouch();
            mNoIntercept = !canInterceptTouch(ev);
            if (mNoIntercept) {
                return false;
            }
+5 −5
Original line number Diff line number Diff line
@@ -664,17 +664,17 @@ public class TouchInteractionService extends Service implements PluginListener<O
                    runningComponent != null && runningComponent.equals(homeComponent);
        }

        if (gestureState.getRunningTask() == null) {
        if (ENABLE_QUICKSTEP_LIVE_TILE.get()
                && gestureState.getActivityInterface().isInLiveTileMode()) {
            return createOverviewInputConsumer(
                    previousGestureState, gestureState, event, forceOverviewInputConsumer);
        } else if (gestureState.getRunningTask() == null) {
            return mResetGestureInputConsumer;
        } else if (previousGestureState.isRunningAnimationToLauncher()
                || gestureState.getActivityInterface().isResumed()
                || forceOverviewInputConsumer) {
            return createOverviewInputConsumer(
                    previousGestureState, gestureState, event, forceOverviewInputConsumer);
        } else if (ENABLE_QUICKSTEP_LIVE_TILE.get()
                && gestureState.getActivityInterface().isInLiveTileMode()) {
            return createOverviewInputConsumer(
                    previousGestureState, gestureState, event, forceOverviewInputConsumer);
        } else if (mDeviceState.isGestureBlockedActivity(gestureState.getRunningTask())) {
            return mResetGestureInputConsumer;
        } else {
Loading