| /* |
| * Copyright (C) 2008 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; |
| |
| import android.content.ComponentName; |
| import android.content.ContentValues; |
| import android.content.Intent; |
| import android.os.Process; |
| import android.os.UserHandle; |
| |
| import androidx.annotation.Nullable; |
| |
| import com.android.launcher3.util.ContentWriter; |
| |
| /** |
| * Represents an item in the launcher. |
| */ |
| public class ItemInfo { |
| |
| public static final int NO_ID = -1; |
| |
| /** |
| * The id in the settings database for this item |
| */ |
| public int id = NO_ID; |
| |
| /** |
| * One of {@link LauncherSettings.Favorites#ITEM_TYPE_APPLICATION}, |
| * {@link LauncherSettings.Favorites#ITEM_TYPE_SHORTCUT}, |
| * {@link LauncherSettings.Favorites#ITEM_TYPE_DEEP_SHORTCUT} |
| * {@link LauncherSettings.Favorites#ITEM_TYPE_FOLDER}, |
| * {@link LauncherSettings.Favorites#ITEM_TYPE_APPWIDGET} or |
| * {@link LauncherSettings.Favorites#ITEM_TYPE_CUSTOM_APPWIDGET}. |
| */ |
| public int itemType; |
| |
| /** |
| * The id of the container that holds this item. For the desktop, this will be |
| * {@link LauncherSettings.Favorites#CONTAINER_DESKTOP}. For the all applications folder it |
| * will be {@link #NO_ID} (since it is not stored in the settings DB). For user folders |
| * it will be the id of the folder. |
| */ |
| public int container = NO_ID; |
| |
| /** |
| * Indicates the screen in which the shortcut appears if the container types is |
| * {@link LauncherSettings.Favorites#CONTAINER_DESKTOP}. (i.e., ignore if the container type is |
| * {@link LauncherSettings.Favorites#CONTAINER_HOTSEAT}) |
| */ |
| public int screenId = -1; |
| |
| /** |
| * Indicates the X position of the associated cell. |
| */ |
| public int cellX = -1; |
| |
| /** |
| * Indicates the Y position of the associated cell. |
| */ |
| public int cellY = -1; |
| |
| /** |
| * Indicates the X cell span. |
| */ |
| public int spanX = 1; |
| |
| /** |
| * Indicates the Y cell span. |
| */ |
| public int spanY = 1; |
| |
| /** |
| * Indicates the minimum X cell span. |
| */ |
| public int minSpanX = 1; |
| |
| /** |
| * Indicates the minimum Y cell span. |
| */ |
| public int minSpanY = 1; |
| |
| /** |
| * Indicates the position in an ordered list. |
| */ |
| public int rank = 0; |
| |
| /** |
| * Title of the item |
| */ |
| public CharSequence title; |
| |
| /** |
| * Content description of the item. |
| */ |
| public CharSequence contentDescription; |
| |
| public UserHandle user; |
| |
| public ItemInfo() { |
| user = Process.myUserHandle(); |
| } |
| |
| ItemInfo(ItemInfo info) { |
| copyFrom(info); |
| } |
| |
| public void copyFrom(ItemInfo info) { |
| id = info.id; |
| cellX = info.cellX; |
| cellY = info.cellY; |
| spanX = info.spanX; |
| spanY = info.spanY; |
| rank = info.rank; |
| screenId = info.screenId; |
| itemType = info.itemType; |
| container = info.container; |
| user = info.user; |
| contentDescription = info.contentDescription; |
| } |
| |
| public Intent getIntent() { |
| return null; |
| } |
| |
| @Nullable |
| public ComponentName getTargetComponent() { |
| Intent intent = getIntent(); |
| if (intent != null) { |
| return intent.getComponent(); |
| } else { |
| return null; |
| } |
| } |
| |
| public void writeToValues(ContentWriter writer) { |
| writer.put(LauncherSettings.Favorites.ITEM_TYPE, itemType) |
| .put(LauncherSettings.Favorites.CONTAINER, container) |
| .put(LauncherSettings.Favorites.SCREEN, screenId) |
| .put(LauncherSettings.Favorites.CELLX, cellX) |
| .put(LauncherSettings.Favorites.CELLY, cellY) |
| .put(LauncherSettings.Favorites.SPANX, spanX) |
| .put(LauncherSettings.Favorites.SPANY, spanY) |
| .put(LauncherSettings.Favorites.RANK, rank); |
| } |
| |
| public void readFromValues(ContentValues values) { |
| itemType = values.getAsInteger(LauncherSettings.Favorites.ITEM_TYPE); |
| container = values.getAsInteger(LauncherSettings.Favorites.CONTAINER); |
| screenId = values.getAsInteger(LauncherSettings.Favorites.SCREEN); |
| cellX = values.getAsInteger(LauncherSettings.Favorites.CELLX); |
| cellY = values.getAsInteger(LauncherSettings.Favorites.CELLY); |
| spanX = values.getAsInteger(LauncherSettings.Favorites.SPANX); |
| spanY = values.getAsInteger(LauncherSettings.Favorites.SPANY); |
| rank = values.getAsInteger(LauncherSettings.Favorites.RANK); |
| } |
| |
| /** |
| * Write the fields of this item to the DB |
| */ |
| public void onAddToDatabase(ContentWriter writer) { |
| if (screenId == Workspace.EXTRA_EMPTY_SCREEN_ID) { |
| // We should never persist an item on the extra empty screen. |
| throw new RuntimeException("Screen id should not be EXTRA_EMPTY_SCREEN_ID"); |
| } |
| |
| writeToValues(writer); |
| writer.put(LauncherSettings.Favorites.PROFILE_ID, user); |
| } |
| |
| @Override |
| public final String toString() { |
| return getClass().getSimpleName() + "(" + dumpProperties() + ")"; |
| } |
| |
| protected String dumpProperties() { |
| return "id=" + id |
| + " type=" + LauncherSettings.Favorites.itemTypeToString(itemType) |
| + " container=" + LauncherSettings.Favorites.containerToString((int)container) |
| + " screen=" + screenId |
| + " cell(" + cellX + "," + cellY + ")" |
| + " span(" + spanX + "," + spanY + ")" |
| + " minSpan(" + minSpanX + "," + minSpanY + ")" |
| + " rank=" + rank |
| + " user=" + user |
| + " title=" + title; |
| } |
| |
| /** |
| * Whether this item is disabled. |
| */ |
| public boolean isDisabled() { |
| return false; |
| } |
| |
| public int getViewId() { |
| // aapt-generated IDs have the high byte nonzero; clamp to the range under that. |
| // This cast is safe as long as the id < 0x00FFFFFF |
| // Since we jail all the dynamically generated views, there should be no clashes |
| // with any other views. |
| return id; |
| } |
| |
| } |