ApplicationInfo.java revision a5902524d4403885eb4c50360bf3465c6be796ef
131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/*
231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * you may not use this file except in compliance with the License.
631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * You may obtain a copy of the License at
731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
1031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * See the License for the specific language governing permissions and
1431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * limitations under the License.
1531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
1631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
17a5902524d4403885eb4c50360bf3465c6be796efJoe Onoratopackage com.android.launcher2;
1831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
1931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.ComponentName;
2031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.ContentValues;
2131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.Intent;
2231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.graphics.Bitmap;
2331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.graphics.drawable.Drawable;
2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
2531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/**
2631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Represents a launchable application. An application is made of a name (or title),
2731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * an intent and an icon.
2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectclass ApplicationInfo extends ItemInfo {
3031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
3231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * The application name.
3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    CharSequence title;
3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
3731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * The intent used to start the application.
3831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
3931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    Intent intent;
4031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
4131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
4231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * The application icon.
4331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
4431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    Drawable icon;
4531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
4631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
4731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * When set to true, indicates that the icon has been resized.
4831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
4931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    boolean filtered;
5031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
5131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
5231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Indicates whether the icon comes from an application's resource (if false)
5331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * or from a custom Bitmap (if true.)
5431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
5531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    boolean customIcon;
5631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
5731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
5831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * If isShortcut=true and customIcon=false, this contains a reference to the
5931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * shortcut icon as an application's resource.
6031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
6131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    Intent.ShortcutIconResource iconResource;
6231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    ApplicationInfo() {
6473b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy        itemType = LauncherSettings.BaseLauncherColumns.ITEM_TYPE_SHORTCUT;
6531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
6631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public ApplicationInfo(ApplicationInfo info) {
6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        super(info);
6931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        title = info.title.toString();
7031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        intent = new Intent(info.intent);
7131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        if (info.iconResource != null) {
7231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            iconResource = new Intent.ShortcutIconResource();
7331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            iconResource.packageName = info.iconResource.packageName;
7431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            iconResource.resourceName = info.iconResource.resourceName;
7531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        }
7631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        icon = info.icon;
7731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        filtered = info.filtered;
7831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        customIcon = info.customIcon;
7931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
8031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
8131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    /**
8231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * Creates the application intent based on a component name and various launch flags.
8373b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy     * Sets {@link #itemType} to {@link LauncherSettings.BaseLauncherColumns#ITEM_TYPE_APPLICATION}.
8431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     *
8531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * @param className the class name of the component representing the intent
8631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     * @param launchFlags the launch flags
8731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project     */
8831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    final void setActivity(ComponentName className, int launchFlags) {
8931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        intent = new Intent(Intent.ACTION_MAIN);
9031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        intent.addCategory(Intent.CATEGORY_LAUNCHER);
9131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        intent.setComponent(className);
9231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        intent.setFlags(launchFlags);
9373b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy        itemType = LauncherSettings.BaseLauncherColumns.ITEM_TYPE_APPLICATION;
9431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
9531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
9631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
9731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    void onAddToDatabase(ContentValues values) {
9831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        super.onAddToDatabase(values);
9931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
10031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        String titleStr = title != null ? title.toString() : null;
10173b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy        values.put(LauncherSettings.BaseLauncherColumns.TITLE, titleStr);
10231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
1031ce1a24cba4dc41bccfeab6fccb2f3355423841aRomain Guy        String uri = intent != null ? intent.toUri(0) : null;
10473b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy        values.put(LauncherSettings.BaseLauncherColumns.INTENT, uri);
10531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
10631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        if (customIcon) {
10773b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy            values.put(LauncherSettings.BaseLauncherColumns.ICON_TYPE,
10873b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy                    LauncherSettings.BaseLauncherColumns.ICON_TYPE_BITMAP);
10931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            Bitmap bitmap = ((FastBitmapDrawable) icon).getBitmap();
11031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            writeBitmap(values, bitmap);
11131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        } else {
11273b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy            values.put(LauncherSettings.BaseLauncherColumns.ICON_TYPE,
11373b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy                    LauncherSettings.BaseLauncherColumns.ICON_TYPE_RESOURCE);
11431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            if (iconResource != null) {
11573b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy                values.put(LauncherSettings.BaseLauncherColumns.ICON_PACKAGE,
11673b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy                        iconResource.packageName);
11773b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy                values.put(LauncherSettings.BaseLauncherColumns.ICON_RESOURCE,
11873b979d8c141c7ceac82dad7c5b271a6a42afa67Romain Guy                        iconResource.resourceName);
11931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            }
12031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        }
12131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
12231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
12331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
12431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public String toString() {
12531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        return title.toString();
12631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
12731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project}
128