Search in sources :

Example 16 with IntArray

use of com.android.launcher3.util.IntArray in project android_packages_apps_Trebuchet by LineageOS.

the class Workspace method stripEmptyScreens.

public void stripEmptyScreens() {
    if (mLauncher.isWorkspaceLoading()) {
        // This is dangerous and can result in data loss.
        return;
    }
    if (isPageInTransition()) {
        mStripScreensOnPageStopMoving = true;
        return;
    }
    int currentPage = getNextPage();
    IntArray removeScreens = new IntArray();
    int total = mWorkspaceScreens.size();
    for (int i = 0; i < total; i++) {
        int id = mWorkspaceScreens.keyAt(i);
        CellLayout cl = mWorkspaceScreens.valueAt(i);
        // FIRST_SCREEN_ID can never be removed.
        if ((!FeatureFlags.QSB_ON_FIRST_SCREEN || id > FIRST_SCREEN_ID) && cl.getShortcutsAndWidgets().getChildCount() == 0) {
            removeScreens.add(id);
        }
    }
    // We enforce at least one page to add new items to. In the case that we remove the last
    // such screen, we convert the last screen to the empty screen
    int minScreens = 1;
    int pageShift = 0;
    for (int i = 0; i < removeScreens.size(); i++) {
        int id = removeScreens.get(i);
        CellLayout cl = mWorkspaceScreens.get(id);
        mWorkspaceScreens.remove(id);
        mScreenOrder.removeValue(id);
        if (getChildCount() > minScreens) {
            if (indexOfChild(cl) < currentPage) {
                pageShift++;
            }
            removeView(cl);
        } else {
            // if this is the last screen, convert it to the empty screen
            mWorkspaceScreens.put(EXTRA_EMPTY_SCREEN_ID, cl);
            mScreenOrder.add(EXTRA_EMPTY_SCREEN_ID);
        }
    }
    if (pageShift >= 0) {
        setCurrentPage(currentPage - pageShift);
    }
}
Also used : IntArray(com.android.launcher3.util.IntArray) SuppressLint(android.annotation.SuppressLint) Point(android.graphics.Point)

Example 17 with IntArray

use of com.android.launcher3.util.IntArray in project android_packages_apps_Trebuchet by LineageOS.

the class LauncherProvider method deleteEmptyFolders.

/**
 * Deletes any empty folder from the DB.
 * @return Ids of deleted folders.
 */
private IntArray deleteEmptyFolders() {
    SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    try (SQLiteTransaction t = new SQLiteTransaction(db)) {
        // Select folders whose id do not match any container value.
        String selection = LauncherSettings.Favorites.ITEM_TYPE + " = " + LauncherSettings.Favorites.ITEM_TYPE_FOLDER + " AND " + LauncherSettings.Favorites._ID + " NOT IN (SELECT " + LauncherSettings.Favorites.CONTAINER + " FROM " + Favorites.TABLE_NAME + ")";
        IntArray folderIds = LauncherDbUtils.queryIntArray(db, Favorites.TABLE_NAME, Favorites._ID, selection, null, null);
        if (!folderIds.isEmpty()) {
            db.delete(Favorites.TABLE_NAME, Utilities.createDbSelectionQuery(LauncherSettings.Favorites._ID, folderIds), null);
        }
        t.commit();
        return folderIds;
    } catch (SQLException ex) {
        Log.e(TAG, ex.getMessage(), ex);
        return new IntArray();
    }
}
Also used : IntArray(com.android.launcher3.util.IntArray) SQLiteDatabase(android.database.sqlite.SQLiteDatabase) SQLException(android.database.SQLException) SQLiteTransaction(com.android.launcher3.provider.LauncherDbUtils.SQLiteTransaction)

Example 18 with IntArray

use of com.android.launcher3.util.IntArray in project android_packages_apps_Trebuchet by LineageOS.

the class LauncherAccessibilityDelegate method performAction.

public boolean performAction(final View host, final ItemInfo item, int action) {
    if (action == ACTION_LONG_CLICK) {
        if (PopupContainerWithArrow.canShow(host, item)) {
            // Long press should be consumed for workspace items, and it should invoke the
            // Shortcuts / Notifications / Actions pop-up menu, and not start a drag as the
            // standard long press path does.
            PopupContainerWithArrow.showForIcon((BubbleTextView) host);
            return true;
        } else {
            CustomActionsPopup popup = new CustomActionsPopup(mLauncher, host);
            if (popup.canShow()) {
                popup.show();
                return true;
            }
        }
    }
    if (host instanceof AccessibilityActionHandler && ((AccessibilityActionHandler) host).performAccessibilityAction(action, item)) {
        return true;
    }
    if (action == MOVE) {
        beginAccessibleDrag(host, item);
    } else if (action == ADD_TO_WORKSPACE) {
        final int[] coordinates = new int[2];
        final int screenId = findSpaceOnWorkspace(item, coordinates);
        mLauncher.getStateManager().goToState(NORMAL, true, new Runnable() {

            @Override
            public void run() {
                if (item instanceof AppInfo) {
                    WorkspaceItemInfo info = ((AppInfo) item).makeWorkspaceItem();
                    mLauncher.getModelWriter().addItemToDatabase(info, Favorites.CONTAINER_DESKTOP, screenId, coordinates[0], coordinates[1]);
                    ArrayList<ItemInfo> itemList = new ArrayList<>();
                    itemList.add(info);
                    mLauncher.bindItems(itemList, true);
                    announceConfirmation(R.string.item_added_to_workspace);
                } else if (item instanceof PendingAddItemInfo) {
                    PendingAddItemInfo info = (PendingAddItemInfo) item;
                    Workspace workspace = mLauncher.getWorkspace();
                    workspace.snapToPage(workspace.getPageIndexForScreenId(screenId));
                    mLauncher.addPendingItem(info, Favorites.CONTAINER_DESKTOP, screenId, coordinates, info.spanX, info.spanY);
                }
            }
        });
        return true;
    } else if (action == MOVE_TO_WORKSPACE) {
        Folder folder = Folder.getOpen(mLauncher);
        folder.close(true);
        WorkspaceItemInfo info = (WorkspaceItemInfo) item;
        folder.getInfo().remove(info, false);
        final int[] coordinates = new int[2];
        final int screenId = findSpaceOnWorkspace(item, coordinates);
        mLauncher.getModelWriter().moveItemInDatabase(info, LauncherSettings.Favorites.CONTAINER_DESKTOP, screenId, coordinates[0], coordinates[1]);
        // Bind the item in next frame so that if a new workspace page was created,
        // it will get laid out.
        new Handler().post(new Runnable() {

            @Override
            public void run() {
                ArrayList<ItemInfo> itemList = new ArrayList<>();
                itemList.add(item);
                mLauncher.bindItems(itemList, true);
                announceConfirmation(R.string.item_moved);
            }
        });
    } else if (action == RESIZE) {
        final LauncherAppWidgetInfo info = (LauncherAppWidgetInfo) item;
        final IntArray actions = getSupportedResizeActions(host, info);
        CharSequence[] labels = new CharSequence[actions.size()];
        for (int i = 0; i < actions.size(); i++) {
            labels[i] = mLauncher.getText(actions.get(i));
        }
        new AlertDialog.Builder(mLauncher).setTitle(R.string.action_resize).setItems(labels, new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                performResizeAction(actions.get(which), host, info);
                dialog.dismiss();
            }
        }).show();
        return true;
    } else if (action == DEEP_SHORTCUTS) {
        return PopupContainerWithArrow.showForIcon((BubbleTextView) host) != null;
    } else {
        for (ButtonDropTarget dropTarget : mLauncher.getDropTargetBar().getDropTargets()) {
            if (dropTarget.supportsAccessibilityDrop(item, host) && action == dropTarget.getAccessibilityAction()) {
                dropTarget.onAccessibilityDrop(host, item);
                return true;
            }
        }
    }
    return false;
}
Also used : CustomActionsPopup(com.android.launcher3.keyboard.CustomActionsPopup) ItemInfo(com.android.launcher3.model.data.ItemInfo) WorkspaceItemInfo(com.android.launcher3.model.data.WorkspaceItemInfo) PendingAddItemInfo(com.android.launcher3.PendingAddItemInfo) DialogInterface(android.content.DialogInterface) ArrayList(java.util.ArrayList) Handler(android.os.Handler) LauncherAppWidgetInfo(com.android.launcher3.model.data.LauncherAppWidgetInfo) Folder(com.android.launcher3.folder.Folder) Point(android.graphics.Point) AppInfo(com.android.launcher3.model.data.AppInfo) IntArray(com.android.launcher3.util.IntArray) PendingAddItemInfo(com.android.launcher3.PendingAddItemInfo) ButtonDropTarget(com.android.launcher3.ButtonDropTarget) BubbleTextView(com.android.launcher3.BubbleTextView) WorkspaceItemInfo(com.android.launcher3.model.data.WorkspaceItemInfo) Workspace(com.android.launcher3.Workspace)

Example 19 with IntArray

use of com.android.launcher3.util.IntArray in project android_packages_apps_Trebuchet by LineageOS.

the class LauncherAccessibilityDelegate method getSupportedResizeActions.

private IntArray getSupportedResizeActions(View host, LauncherAppWidgetInfo info) {
    IntArray actions = new IntArray();
    AppWidgetProviderInfo providerInfo = ((LauncherAppWidgetHostView) host).getAppWidgetInfo();
    if (providerInfo == null) {
        return actions;
    }
    CellLayout layout = (CellLayout) host.getParent().getParent();
    if ((providerInfo.resizeMode & AppWidgetProviderInfo.RESIZE_HORIZONTAL) != 0) {
        if (layout.isRegionVacant(info.cellX + info.spanX, info.cellY, 1, info.spanY) || layout.isRegionVacant(info.cellX - 1, info.cellY, 1, info.spanY)) {
            actions.add(R.string.action_increase_width);
        }
        if (info.spanX > info.minSpanX && info.spanX > 1) {
            actions.add(R.string.action_decrease_width);
        }
    }
    if ((providerInfo.resizeMode & AppWidgetProviderInfo.RESIZE_VERTICAL) != 0) {
        if (layout.isRegionVacant(info.cellX, info.cellY + info.spanY, info.spanX, 1) || layout.isRegionVacant(info.cellX, info.cellY - 1, info.spanX, 1)) {
            actions.add(R.string.action_increase_height);
        }
        if (info.spanY > info.minSpanY && info.spanY > 1) {
            actions.add(R.string.action_decrease_height);
        }
    }
    return actions;
}
Also used : IntArray(com.android.launcher3.util.IntArray) CellLayout(com.android.launcher3.CellLayout) AppWidgetProviderInfo(android.appwidget.AppWidgetProviderInfo) LauncherAppWidgetHostView(com.android.launcher3.widget.LauncherAppWidgetHostView)

Example 20 with IntArray

use of com.android.launcher3.util.IntArray in project android_packages_apps_Trebuchet by LineageOS.

the class HotseatPredictionController method showCachedItems.

/**
 * Create WorkspaceItemInfo objects and binds PredictedAppIcon views for cached predicted items.
 */
public void showCachedItems(List<AppInfo> apps, IntArray ranks) {
    if (hasPredictions() && mAppPredictor != null) {
        mAppPredictor.requestPredictionUpdate();
        fillGapsWithPrediction();
        return;
    }
    int count = Math.min(ranks.size(), apps.size());
    List<WorkspaceItemInfo> items = new ArrayList<>(count);
    for (int i = 0; i < count; i++) {
        WorkspaceItemInfo item = new WorkspaceItemInfo(apps.get(i));
        ComponentKey componentKey = new ComponentKey(item.getTargetComponent(), item.user);
        preparePredictionInfo(item, ranks.get(i));
        items.add(item);
        mComponentKeyMappers.add(new ComponentKeyMapper(componentKey, mDynamicItemCache));
    }
    updateDependencies();
    bindItems(items, false, null);
}
Also used : ArrayList(java.util.ArrayList) ComponentKey(com.android.launcher3.util.ComponentKey) ComponentKeyMapper(com.android.launcher3.appprediction.ComponentKeyMapper) WorkspaceItemInfo(com.android.launcher3.model.data.WorkspaceItemInfo)

Aggregations

IntArray (com.android.launcher3.util.IntArray)112 ArrayList (java.util.ArrayList)55 Point (android.graphics.Point)41 ItemInfo (com.android.launcher3.model.data.ItemInfo)34 IntSet (com.android.launcher3.util.IntSet)34 WorkspaceItemInfo (com.android.launcher3.model.data.WorkspaceItemInfo)28 IntArray (org.h2.util.IntArray)22 LauncherAppWidgetInfo (com.android.launcher3.model.data.LauncherAppWidgetInfo)18 ClusterNode (org.apache.ignite.cluster.ClusterNode)17 TextPaint (android.text.TextPaint)16 HashMap (java.util.HashMap)15 SessionInfo (android.content.pm.PackageInstaller.SessionInfo)14 CellLayout (com.android.launcher3.CellLayout)14 List (java.util.List)14 SuppressLint (android.annotation.SuppressLint)12 IntArray (org.gridgain.internal.h2.util.IntArray)12 Rect (android.graphics.Rect)11 Callbacks (com.android.launcher3.model.BgDataModel.Callbacks)11 InvariantDeviceProfile (com.android.launcher3.InvariantDeviceProfile)10 FeatureFlags (com.android.launcher3.config.FeatureFlags)10