/* * Copyright (C) 2016 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.accessibility; import static com.android.launcher3.LauncherState.NORMAL; import static com.android.launcher3.anim.AnimatorListeners.forSuccessCallback; import android.view.View; import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.Launcher; import com.android.launcher3.LauncherSettings; import com.android.launcher3.R; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.shortcuts.DeepShortcutView; import java.util.Collections; import java.util.List; /** * Extension of {@link LauncherAccessibilityDelegate} with actions specific to shortcuts in * deep shortcuts menu. */ public class ShortcutMenuAccessibilityDelegate extends LauncherAccessibilityDelegate { public ShortcutMenuAccessibilityDelegate(Launcher launcher) { super(launcher); } @Override protected void getSupportedActions(View host, ItemInfo item, List out) { if ((host.getParent() instanceof DeepShortcutView)) { out.add(mActions.get(ADD_TO_WORKSPACE)); } } @Override protected boolean performAction(View host, ItemInfo item, int action, boolean fromKeyboard) { if (action == ADD_TO_WORKSPACE) { if (!(host.getParent() instanceof DeepShortcutView)) { return false; } final WorkspaceItemInfo info = ((DeepShortcutView) host.getParent()).getFinalInfo(); final int[] coordinates = new int[2]; final int screenId = findSpaceOnWorkspace(item, coordinates); if (screenId == -1) { return false; } mContext.getStateManager().goToState(NORMAL, true, forSuccessCallback(() -> { mContext.getModelWriter().addItemToDatabase(info, LauncherSettings.Favorites.CONTAINER_DESKTOP, screenId, coordinates[0], coordinates[1]); mContext.bindItems(Collections.singletonList(info), true); AbstractFloatingView.closeAllOpenViews(mContext); announceConfirmation(R.string.item_added_to_workspace); })); return true; } return false; } }