| /* |
| * Copyright 2023 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.quickstep.util; |
| |
| import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; |
| import static com.android.launcher3.util.Executors.MODEL_EXECUTOR; |
| |
| import android.content.Context; |
| |
| import com.android.launcher3.Launcher; |
| import com.android.launcher3.LauncherAppState; |
| import com.android.launcher3.LauncherSettings; |
| import com.android.launcher3.accessibility.LauncherAccessibilityDelegate; |
| import com.android.launcher3.icons.IconCache; |
| import com.android.launcher3.model.data.FolderInfo; |
| import com.android.launcher3.model.data.WorkspaceItemInfo; |
| import com.android.quickstep.views.TaskView; |
| |
| /** |
| * Mini controller class that handles app pair interactions: saving, modifying, deleting, etc. |
| */ |
| public class AppPairsController { |
| |
| private static final int POINT_THREE_RATIO = 0; |
| private static final int POINT_FIVE_RATIO = 1; |
| private static final int POINT_SEVEN_RATIO = 2; |
| /** |
| * Used to calculate {@link #complement(int)} |
| */ |
| private static final int FULL_RATIO = 2; |
| |
| private static final int LEFT_TOP = 0; |
| private static final int RIGHT_BOTTOM = 1 << 2; |
| |
| // TODO (jeremysim b/274189428): Support saving different ratios in future. |
| public int DEFAULT_RATIO = POINT_FIVE_RATIO; |
| |
| private final Context mContext; |
| private final SplitSelectStateController mSplitSelectStateController; |
| public AppPairsController(Context context, |
| SplitSelectStateController splitSelectStateController) { |
| mContext = context; |
| mSplitSelectStateController = splitSelectStateController; |
| } |
| |
| /** |
| * Creates a new app pair ItemInfo and adds it to the workspace |
| */ |
| public void saveAppPair(TaskView taskView) { |
| TaskView.TaskIdAttributeContainer[] attributes = taskView.getTaskIdAttributeContainers(); |
| WorkspaceItemInfo app1 = attributes[0].getItemInfo().clone(); |
| WorkspaceItemInfo app2 = attributes[1].getItemInfo().clone(); |
| app1.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION; |
| app2.itemType = LauncherSettings.Favorites.ITEM_TYPE_APPLICATION; |
| app1.rank = DEFAULT_RATIO + LEFT_TOP; |
| app2.rank = complement(DEFAULT_RATIO) + RIGHT_BOTTOM; |
| FolderInfo newAppPair = FolderInfo.createAppPair(app1, app2); |
| // TODO (jeremysim b/274189428): Generate default title here. |
| newAppPair.title = "App pair 1"; |
| |
| IconCache iconCache = LauncherAppState.getInstance(mContext).getIconCache(); |
| MODEL_EXECUTOR.execute(() -> { |
| newAppPair.contents.forEach(member -> { |
| member.title = ""; |
| member.bitmap = iconCache.getDefaultIcon(newAppPair.user); |
| iconCache.getTitleAndIcon(member, member.usingLowResIcon()); |
| }); |
| MAIN_EXECUTOR.execute(() -> { |
| LauncherAccessibilityDelegate delegate = |
| Launcher.getLauncher(mContext).getAccessibilityDelegate(); |
| if (delegate != null) { |
| MAIN_EXECUTOR.execute(() -> delegate.addToWorkspace(newAppPair, true)); |
| } |
| }); |
| }); |
| |
| } |
| |
| /** |
| * Used to calculate the "opposite" side of the split ratio, so we can know how big the split |
| * apps are supposed to be. This math works because POINT_THREE_RATIO is internally represented |
| * by 0, POINT_FIVE_RATIO is represented by 1, and POINT_SEVEN_RATIO is represented by 2. There |
| * are no other supported ratios for now. |
| */ |
| private int complement(int ratio1) { |
| int ratio2 = FULL_RATIO - ratio1; |
| return ratio2; |
| } |
| } |