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

This commit is contained in:
Cyrus Boadway
2021-04-16 11:53:35 +00:00
committed by Android (Google) Code Review
3 changed files with 82 additions and 2 deletions
@@ -0,0 +1,63 @@
/*
* 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;
}
}
@@ -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
View File
@@ -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;
}