Snap for 11248037 from 5221d39bda to 24Q2-release
Change-Id: I30c69530e42ce45aa0d32720801400cd589f2bc1
This commit is contained in:
+69
-23
@@ -23,42 +23,66 @@ min_launcher3_sdk_version = "26"
|
||||
// All sources are split so they can be reused in many other libraries/apps in other folders
|
||||
filegroup {
|
||||
name: "launcher-src",
|
||||
srcs: [ "src/**/*.java", "src/**/*.kt" ],
|
||||
srcs: [
|
||||
"src/**/*.java",
|
||||
"src/**/*.kt",
|
||||
],
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "launcher-quickstep-src",
|
||||
srcs: [ "quickstep/src/**/*.java", "quickstep/src/**/*.kt" ],
|
||||
srcs: [
|
||||
"quickstep/src/**/*.java",
|
||||
"quickstep/src/**/*.kt",
|
||||
],
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "launcher-go-src",
|
||||
srcs: [ "go/src/**/*.java", "go/src/**/*.kt" ],
|
||||
srcs: [
|
||||
"go/src/**/*.java",
|
||||
"go/src/**/*.kt",
|
||||
],
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "launcher-go-quickstep-src",
|
||||
srcs: [ "go/quickstep/src/**/*.java", "go/quickstep/src/**/*.kt" ],
|
||||
srcs: [
|
||||
"go/quickstep/src/**/*.java",
|
||||
"go/quickstep/src/**/*.kt",
|
||||
],
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "launcher-src_shortcuts_overrides",
|
||||
srcs: [ "src_shortcuts_overrides/**/*.java", "src_shortcuts_overrides/**/*.kt" ],
|
||||
srcs: [
|
||||
"src_shortcuts_overrides/**/*.java",
|
||||
"src_shortcuts_overrides/**/*.kt",
|
||||
],
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "launcher-src_ui_overrides",
|
||||
srcs: [ "src_ui_overrides/**/*.java", "src_ui_overrides/**/*.kt" ],
|
||||
srcs: [
|
||||
"src_ui_overrides/**/*.java",
|
||||
"src_ui_overrides/**/*.kt",
|
||||
],
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "launcher-ext_tests",
|
||||
srcs: [ "ext_tests/**/*.java", "ext_tests/**/*.kt" ],
|
||||
srcs: [
|
||||
"ext_tests/**/*.java",
|
||||
"ext_tests/**/*.kt",
|
||||
],
|
||||
}
|
||||
|
||||
filegroup {
|
||||
name: "launcher-quickstep-ext_tests",
|
||||
srcs: [ "quickstep/ext_tests/**/*.java", "quickstep/ext_tests/**/*.kt" ],
|
||||
srcs: [
|
||||
"quickstep/ext_tests/**/*.java",
|
||||
"quickstep/ext_tests/**/*.kt",
|
||||
],
|
||||
}
|
||||
|
||||
// Proguard files for Launcher3
|
||||
@@ -85,9 +109,12 @@ android_library {
|
||||
srcs: [
|
||||
"tests/tapl/**/*.java",
|
||||
],
|
||||
resource_dirs: [ ],
|
||||
resource_dirs: [],
|
||||
manifest: "tests/tapl/AndroidManifest.xml",
|
||||
platform_apis: true,
|
||||
lint: {
|
||||
baseline_filename: "lint-baseline.xml",
|
||||
},
|
||||
}
|
||||
|
||||
java_library_static {
|
||||
@@ -99,12 +126,15 @@ java_library_static {
|
||||
sdk_version: "current",
|
||||
proto: {
|
||||
type: "lite",
|
||||
local_include_dirs:[
|
||||
local_include_dirs: [
|
||||
"protos",
|
||||
"protos_overrides",
|
||||
],
|
||||
},
|
||||
static_libs: ["libprotobuf-java-lite"],
|
||||
lint: {
|
||||
baseline_filename: "lint-baseline.xml",
|
||||
},
|
||||
}
|
||||
|
||||
java_library_static {
|
||||
@@ -115,14 +145,17 @@ java_library_static {
|
||||
sdk_version: "current",
|
||||
proto: {
|
||||
type: "lite",
|
||||
local_include_dirs:[
|
||||
local_include_dirs: [
|
||||
"quickstep/protos_overrides",
|
||||
],
|
||||
},
|
||||
static_libs: [
|
||||
"libprotobuf-java-lite",
|
||||
"launcher_log_protos_lite"
|
||||
],
|
||||
"libprotobuf-java-lite",
|
||||
"launcher_log_protos_lite",
|
||||
],
|
||||
lint: {
|
||||
baseline_filename: "lint-baseline.xml",
|
||||
},
|
||||
}
|
||||
|
||||
java_library {
|
||||
@@ -134,12 +167,15 @@ java_library {
|
||||
|
||||
sdk_version: "current",
|
||||
min_sdk_version: min_launcher3_sdk_version,
|
||||
lint: {
|
||||
baseline_filename: "lint-baseline.xml",
|
||||
},
|
||||
}
|
||||
|
||||
// Library with all the dependencies for building Launcher3
|
||||
android_library {
|
||||
name: "Launcher3ResLib",
|
||||
srcs: [ ],
|
||||
srcs: [],
|
||||
resource_dirs: ["res"],
|
||||
static_libs: [
|
||||
"LauncherPluginLib",
|
||||
@@ -154,7 +190,7 @@ android_library {
|
||||
"com.google.android.material_material",
|
||||
"iconloader_base",
|
||||
"view_capture",
|
||||
"animationlib"
|
||||
"animationlib",
|
||||
],
|
||||
manifest: "AndroidManifest-common.xml",
|
||||
sdk_version: "current",
|
||||
@@ -236,7 +272,7 @@ android_app {
|
||||
// Library with all the dependencies for building quickstep
|
||||
android_library {
|
||||
name: "QuickstepResLib",
|
||||
srcs: [ ],
|
||||
srcs: [],
|
||||
resource_dirs: [
|
||||
"quickstep/res",
|
||||
],
|
||||
@@ -253,9 +289,11 @@ android_library {
|
||||
],
|
||||
manifest: "quickstep/AndroidManifest.xml",
|
||||
min_sdk_version: "current",
|
||||
lint: {
|
||||
baseline_filename: "lint-baseline.xml",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
// Library with all the dependencies for building Launcher Go
|
||||
android_library {
|
||||
name: "LauncherGoResLib",
|
||||
@@ -360,7 +398,10 @@ android_app {
|
||||
manifest: "go/AndroidManifest.xml",
|
||||
jacoco: {
|
||||
include_filter: ["com.android.launcher3.*"],
|
||||
}
|
||||
},
|
||||
lint: {
|
||||
baseline_filename: "lint-baseline.xml",
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
@@ -396,7 +437,10 @@ android_app {
|
||||
manifest: "quickstep/AndroidManifest.xml",
|
||||
jacoco: {
|
||||
include_filter: ["com.android.launcher3.*"],
|
||||
}
|
||||
},
|
||||
lint: {
|
||||
baseline_filename: "lint-baseline.xml",
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
@@ -414,7 +458,7 @@ android_app {
|
||||
min_sdk_version: "current",
|
||||
target_sdk_version: "current",
|
||||
|
||||
srcs: [ ],
|
||||
srcs: [],
|
||||
|
||||
resource_dirs: [
|
||||
"go/quickstep/res",
|
||||
@@ -446,7 +490,9 @@ android_app {
|
||||
manifest: "quickstep/AndroidManifest.xml",
|
||||
jacoco: {
|
||||
include_filter: ["com.android.launcher3.*"],
|
||||
}
|
||||
},
|
||||
lint: {
|
||||
baseline_filename: "lint-baseline.xml",
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.launcher3;
|
||||
|
||||
import static android.content.ClipDescription.MIMETYPE_TEXT_INTENT;
|
||||
import static android.view.WindowInsets.Type.navigationBars;
|
||||
import static android.view.WindowInsets.Type.statusBars;
|
||||
|
||||
@@ -23,6 +24,8 @@ import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
|
||||
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
|
||||
|
||||
import android.appwidget.AppWidgetProviderInfo;
|
||||
import android.content.ClipData;
|
||||
import android.content.ClipDescription;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
@@ -43,6 +46,14 @@ import java.util.ArrayList;
|
||||
|
||||
/** An Activity that can host Launcher's widget picker. */
|
||||
public class WidgetPickerActivity extends BaseActivity {
|
||||
/**
|
||||
* Name of the extra that indicates that a widget being dragged.
|
||||
*
|
||||
* <p>When set to "true" in the result of startActivityForResult, the client that launched the
|
||||
* picker knows that activity was closed due to pending drag.
|
||||
*/
|
||||
private static final String EXTRA_IS_PENDING_WIDGET_DRAG = "is_pending_widget_drag";
|
||||
|
||||
private SimpleDragLayer<WidgetPickerActivity> mDragLayer;
|
||||
private WidgetsModel mModel;
|
||||
private final PopupDataProvider mPopupDataProvider = new PopupDataProvider(i -> {});
|
||||
@@ -102,6 +113,46 @@ public class WidgetPickerActivity extends BaseActivity {
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public View.OnLongClickListener getAllAppsItemLongClickListener() {
|
||||
return view -> {
|
||||
if (!(view instanceof WidgetCell widgetCell)) return false;
|
||||
|
||||
if (widgetCell.getWidgetView().getDrawable() == null
|
||||
&& widgetCell.getAppWidgetHostViewPreview() == null) {
|
||||
// The widget preview hasn't been loaded; so, we abort the drag.
|
||||
return false;
|
||||
}
|
||||
|
||||
final AppWidgetProviderInfo info = widgetCell.getWidgetItem().widgetInfo;
|
||||
if (info == null || info.provider == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ClipData clipData = new ClipData(
|
||||
new ClipDescription(
|
||||
/* label= */ "", // not displayed anywhere; so, set to empty.
|
||||
new String[]{MIMETYPE_TEXT_INTENT}
|
||||
),
|
||||
new ClipData.Item(new Intent()
|
||||
.putExtra(Intent.EXTRA_USER, info.getProfile())
|
||||
.putExtra(Intent.EXTRA_COMPONENT_NAME, info.provider))
|
||||
);
|
||||
|
||||
// Set result indicating activity was closed due a widget being dragged.
|
||||
setResult(RESULT_OK, new Intent()
|
||||
.putExtra(EXTRA_IS_PENDING_WIDGET_DRAG, true));
|
||||
|
||||
// DRAG_FLAG_GLOBAL permits dragging data beyond app window.
|
||||
return view.startDragAndDrop(
|
||||
clipData,
|
||||
new View.DragShadowBuilder(view),
|
||||
/* myLocalState= */ null,
|
||||
View.DRAG_FLAG_GLOBAL
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
private void refreshAndBindWidgets() {
|
||||
MODEL_EXECUTOR.execute(() -> {
|
||||
LauncherAppState app = LauncherAppState.getInstance(this);
|
||||
|
||||
@@ -104,6 +104,13 @@ public class FallbackTaskbarUIController extends TaskbarUIController {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean isInOverview() {
|
||||
TopTaskTracker.CachedTaskInfo topTask = TopTaskTracker.INSTANCE
|
||||
.get(mControllers.taskbarActivityContext).getCachedTopTask(true);
|
||||
return topTask.isRecentsTask();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RecentsView getRecentsView() {
|
||||
return mRecentsActivity.getOverviewPanel();
|
||||
|
||||
@@ -42,7 +42,9 @@ import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_V
|
||||
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.app.ActivityManager.RunningTaskInfo;
|
||||
import android.app.ActivityOptions;
|
||||
import android.app.ActivityTaskManager;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -130,10 +132,13 @@ import com.android.systemui.unfold.updates.RotationChangeProvider;
|
||||
import com.android.systemui.unfold.util.ScopedUnfoldTransitionProgressProvider;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* The {@link ActivityContext} with which we inflate Taskbar-related Views. This allows UI elements
|
||||
@@ -1147,15 +1152,25 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
@Nullable Task foundTask = foundTasks[0];
|
||||
if (foundTask != null) {
|
||||
TaskView foundTaskView = recents.getTaskViewByTaskId(foundTask.key.id);
|
||||
if (foundTaskView != null
|
||||
&& foundTaskView.isVisibleToUser()) {
|
||||
TestLogging.recordEvent(
|
||||
TestProtocol.SEQUENCE_MAIN, "start: taskbarAppIcon");
|
||||
foundTaskView.launchTasks();
|
||||
return;
|
||||
if (foundTaskView != null) {
|
||||
// The foundTaskView contains the 1-2 taskIds we are looking for.
|
||||
// If we are already in-app and running the correct tasks, no need
|
||||
// to do anything.
|
||||
if (FeatureFlags.enableAppPairs()
|
||||
&& isAlreadyInApp(foundTaskView.getTaskIds())) {
|
||||
return;
|
||||
}
|
||||
// If we are in Overview and the TaskView tile is visible, expand that
|
||||
// tile.
|
||||
if (foundTaskView.isVisibleToUser()) {
|
||||
TestLogging.recordEvent(
|
||||
TestProtocol.SEQUENCE_MAIN, "start: taskbarAppIcon");
|
||||
foundTaskView.launchTasks();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If none of the above cases apply, launch a new app or app pair.
|
||||
if (findExactPairMatch) {
|
||||
// We did not find the app pair we were looking for, so launch one.
|
||||
recents.getSplitSelectController().getAppPairsController().launchAppPair(
|
||||
@@ -1167,6 +1182,27 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a given list of taskIds are all already running in-app.
|
||||
*/
|
||||
private boolean isAlreadyInApp(int[] ids) {
|
||||
if (mControllers.uiController.isInOverview()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
RunningTaskInfo[] currentlyRunningTasks = ActivityManagerWrapper.getInstance()
|
||||
.getRunningTasks(false /* filterOnlyVisibleRecents */);
|
||||
Set<Integer> currentlyRunningIds = Arrays.stream(currentlyRunningTasks)
|
||||
.map(task -> task.taskId).collect(Collectors.toSet());
|
||||
|
||||
for (int id : ids) {
|
||||
if (id != ActivityTaskManager.INVALID_TASK_ID && !currentlyRunningIds.contains(id)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void startItemInfoActivity(ItemInfo info) {
|
||||
Intent intent = new Intent(info.getIntent())
|
||||
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
||||
@@ -287,7 +287,7 @@ public class LauncherBackAnimationController {
|
||||
mBackInProgress = true;
|
||||
RemoteAnimationTarget appTarget = backEvent.getDepartingAnimationTarget();
|
||||
|
||||
if (appTarget == null) {
|
||||
if (appTarget == null || appTarget.leash == null || !appTarget.leash.isValid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -456,6 +456,7 @@ public class LauncherBackAnimationController {
|
||||
mBackInProgress /* fromPredictiveBack */);
|
||||
startTransitionAnimations(pair.first, pair.second);
|
||||
mLauncher.clearForceInvisibleFlag(INVISIBLE_ALL);
|
||||
customizeStatusBarAppearance(true);
|
||||
}
|
||||
|
||||
private void finishAnimation() {
|
||||
|
||||
@@ -149,6 +149,11 @@ public class QuickstepTestInformationHandler extends TestInformationHandler {
|
||||
case TestProtocol.REQUEST_REFRESH_OVERVIEW_TARGET:
|
||||
runOnTISBinder(TouchInteractionService.TISBinder::refreshOverviewTarget);
|
||||
return response;
|
||||
|
||||
case TestProtocol.REQUEST_RECREATE_TASKBAR:
|
||||
// Allow null-pointer to catch illegal states.
|
||||
runOnTISBinder(tisBinder -> tisBinder.getTaskbarManager().recreateTaskbar());
|
||||
return response;
|
||||
}
|
||||
|
||||
return super.call(method, arg, extras);
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<!-- App Widget resize frame -->
|
||||
<dimen name="widget_handle_margin">13dp</dimen>
|
||||
<dimen name="resize_frame_background_padding">24dp</dimen>
|
||||
<dimen name="resize_frame_margin">22dp</dimen>
|
||||
<dimen name="resize_frame_margin">23dp</dimen>
|
||||
<dimen name="resize_frame_invalid_drag_across_two_panel_opacity_margin">24dp</dimen>
|
||||
|
||||
<!-- App widget reconfigure button -->
|
||||
|
||||
@@ -262,7 +262,8 @@ public class GridSizeMigrationUtil {
|
||||
String srcTableName, String destTableName) {
|
||||
int id = copyEntryAndUpdate(helper, entry, srcTableName, destTableName);
|
||||
|
||||
if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER) {
|
||||
if (entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_FOLDER
|
||||
|| entry.itemType == LauncherSettings.Favorites.ITEM_TYPE_APP_PAIR) {
|
||||
for (Set<Integer> itemIds : entry.mFolderItems.values()) {
|
||||
for (int itemId : itemIds) {
|
||||
copyEntryAndUpdate(helper, itemId, id, srcTableName, destTableName);
|
||||
|
||||
Reference in New Issue
Block a user