/* * Copyright (C) 2017 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.folder; import android.util.Log; import com.android.launcher3.FolderInfo; import com.android.launcher3.InvariantDeviceProfile; import static com.android.launcher3.folder.ClippedFolderIconLayoutRule.MAX_NUM_ITEMS_IN_PREVIEW; /** * Verifies whether an item in a Folder is displayed in the FolderIcon preview. */ public class FolderIconPreviewVerifier { private static final String TAG = "FolderPreviewVerifier"; private final int mMaxGridCountX; private final int mMaxGridCountY; private final int mMaxItemsPerPage; private final int[] mGridSize = new int[] { 1, 1 }; private int mNumItemsInFolder; private int mGridCountX; private boolean mDisplayingUpperLeftQuadrant = false; /** * Note: must call {@link #setFolderInfo(FolderInfo)} manually for verifier to work. */ public FolderIconPreviewVerifier(InvariantDeviceProfile profile) { mMaxGridCountX = profile.numFolderColumns; mMaxGridCountY = profile.numFolderRows; mMaxItemsPerPage = mMaxGridCountX * mMaxGridCountY; } public void setFolderInfo(FolderInfo info) { int numItemsInFolder = info.contents.size(); if (numItemsInFolder != mNumItemsInFolder) { FolderPagedView.calculateGridSize(numItemsInFolder, 0, 0, mMaxGridCountX, mMaxGridCountY, mMaxItemsPerPage, mGridSize); mGridCountX = mGridSize[0]; mDisplayingUpperLeftQuadrant = numItemsInFolder > MAX_NUM_ITEMS_IN_PREVIEW; mNumItemsInFolder = numItemsInFolder; } } /** * Returns whether the item with {@param rank} is in the default Folder icon preview. */ public boolean isItemInPreview(int rank) { return isItemInPreview(0, rank); } /** * @param page The page the item is on. * @param rank The rank of the item. * @return True iff the icon is in the 2x2 upper left quadrant of the Folder. */ public boolean isItemInPreview(int page, int rank) { if (mGridSize[0] == 1) { Log.w(TAG, "setFolderInfo not called before checking if item is in preview."); } // First page items are laid out such that the first 4 items are always in the upper // left quadrant. For all other pages, we need to check the row and col. if (page > 0 || mDisplayingUpperLeftQuadrant) { int col = rank % mGridCountX; int row = rank / mGridCountX; return col < 2 && row < 2; } return rank < MAX_NUM_ITEMS_IN_PREVIEW; } }