Merge "Use Quickstep ActivityOptions when launching activities from App Widgets" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
42431d5217
@@ -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> {
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user