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

Commit 42431d52 authored by Cyrus Boadway's avatar Cyrus Boadway Committed by Android (Google) Code Review
Browse files

Merge "Use Quickstep ActivityOptions when launching activities from App Widgets" into sc-dev

parents def4ff15 0d309db4
Loading
Loading
Loading
Loading
+63 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 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.
 */
package com.android.launcher3.uioverrides;

import android.app.ActivityOptions;
import android.app.PendingIntent;
import android.content.Intent;
import android.util.Log;
import android.util.Pair;
import android.view.View;
import android.widget.RemoteViews;

import com.android.launcher3.util.ActivityOptionsWrapper;
import com.android.launcher3.widget.LauncherAppWidgetHostView;

/** Provides a Quickstep specific animation when launching an activity from an app widget. */
class QuickstepInteractionHandler implements RemoteViews.InteractionHandler {

    private static final String TAG = "QuickstepInteractionHandler";

    private final QuickstepLauncher mLauncher;

    QuickstepInteractionHandler(QuickstepLauncher launcher) {
        mLauncher = launcher;
    }

    @Override
    public boolean onInteraction(View view, PendingIntent pendingIntent,
            RemoteViews.RemoteResponse remoteResponse) {
        LauncherAppWidgetHostView hostView = findHostViewAncestor(view);
        if (hostView == null) {
            Log.e(TAG, "View did not have a LauncherAppWidgetHostView ancestor.");
            return RemoteViews.startPendingIntent(hostView, pendingIntent,
                    remoteResponse.getLaunchOptions(view));
        }
        Pair<Intent, ActivityOptions> options = remoteResponse.getLaunchOptions(hostView);
        ActivityOptionsWrapper activityOptions = mLauncher.getAppTransitionManager()
                .getActivityLaunchOptions(mLauncher, hostView);
        options = Pair.create(options.first, activityOptions.options);
        return RemoteViews.startPendingIntent(hostView, pendingIntent, options);
    }

    private LauncherAppWidgetHostView findHostViewAncestor(View v) {
        while (v != null) {
            if (v instanceof LauncherAppWidgetHostView) return (LauncherAppWidgetHostView) v;
            v = (View) v.getParent();
        }
        return null;
    }
}
+13 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static com.android.systemui.shared.system.ActivityManagerWrapper.CLOSE_SY
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.SystemProperties;
import android.view.HapticFeedbackConstants;
import android.view.View;

@@ -71,6 +72,7 @@ import com.android.launcher3.util.OnboardingPrefs;
import com.android.launcher3.util.TouchController;
import com.android.launcher3.util.UiThreadHelper;
import com.android.launcher3.util.UiThreadHelper.AsyncCommand;
import com.android.launcher3.widget.LauncherAppWidgetHost;
import com.android.quickstep.SysUINavigationMode;
import com.android.quickstep.SysUINavigationMode.Mode;
import com.android.quickstep.SystemUiProxy;
@@ -88,6 +90,9 @@ import java.util.stream.Stream;

public class QuickstepLauncher extends BaseQuickstepLauncher {

    private static final boolean ENABLE_APP_WIDGET_LAUNCH_ANIMATION =
            SystemProperties.getBoolean("persist.debug.quickstep_app_widget_launch", false);

    public static final boolean GO_LOW_RAM_RECENTS_ENABLED = false;
    /**
     * Reusable command for applying the shelf height on the background thread.
@@ -320,6 +325,14 @@ public class QuickstepLauncher extends BaseQuickstepLauncher {
        return new QuickstepAtomicAnimationFactory(this);
    }

    protected LauncherAppWidgetHost createAppWidgetHost() {
        LauncherAppWidgetHost appWidgetHost = super.createAppWidgetHost();
        if (ENABLE_APP_WIDGET_LAUNCH_ANIMATION) {
            appWidgetHost.setInteractionHandler(new QuickstepInteractionHandler(this));
        }
        return appWidgetHost;
    }

    private static final class LauncherTaskViewController extends
            TaskViewTouchController<Launcher> {

+6 −2
Original line number Diff line number Diff line
@@ -436,8 +436,7 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche
        mOnboardingPrefs = createOnboardingPrefs(mSharedPrefs);

        mAppWidgetManager = new WidgetManagerHelper(this);
        mAppWidgetHost = new LauncherAppWidgetHost(this,
                appWidgetId -> getWorkspace().removeWidget(appWidgetId));
        mAppWidgetHost = createAppWidgetHost();
        mAppWidgetHost.startListening();

        inflateRootView(R.layout.launcher);
@@ -1428,6 +1427,11 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche
        return mAppWidgetHost;
    }

    protected LauncherAppWidgetHost createAppWidgetHost() {
        return new LauncherAppWidgetHost(this,
                appWidgetId -> getWorkspace().removeWidget(appWidgetId));
    }

    public LauncherModel getModel() {
        return mModel;
    }