FolderIcon.java revision df2cc41acbfacd576f99483a4af1cda32ebd3d09
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.Context;
2031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.res.Resources;
2131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.graphics.drawable.Drawable;
2231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.util.AttributeSet;
2331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.view.LayoutInflater;
2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.view.ViewGroup;
2531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
26edcce099c98a6c40d10109ac092ab50f9d2668f3Romain Guyimport com.android.launcher.R;
27edcce099c98a6c40d10109ac092ab50f9d2668f3Romain Guy
2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/**
2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * An icon that can appear on in the workspace representing an {@link UserFolder}.
3031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
31c66a7c275992281f299209533d4cf8cf24a6c71dMichael Jurkapublic class FolderIcon extends BubbleTextView implements DropTarget {
32df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen    private FolderInfo mInfo;
3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    private Launcher mLauncher;
3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    private Drawable mCloseIcon;
3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    private Drawable mOpenIcon;
3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public FolderIcon(Context context, AttributeSet attrs) {
3831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        super(context, attrs);
3931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
4031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
4131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public FolderIcon(Context context) {
4231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        super(context);
4331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
4431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
450280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka    public boolean isDropEnabled() {
467a1d16555d80135e61b90158ff3c1e3f963bd8b8Winson Chung        final ViewGroup cellLayoutChildren = (ViewGroup) getParent();
477a1d16555d80135e61b90158ff3c1e3f963bd8b8Winson Chung        final ViewGroup cellLayout = (ViewGroup) cellLayoutChildren.getParent();
487a1d16555d80135e61b90158ff3c1e3f963bd8b8Winson Chung        final Workspace workspace = (Workspace) cellLayout.getParent();
497a1d16555d80135e61b90158ff3c1e3f963bd8b8Winson Chung        return !workspace.isSmall();
500280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka    }
510280c3be4d9f8fc6fdf015b7ecd276eb26f76f2dMichael Jurka
5231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    static FolderIcon fromXml(int resId, Launcher launcher, ViewGroup group,
53df2cc41acbfacd576f99483a4af1cda32ebd3d09Adam Cohen            FolderInfo folderInfo, IconCache iconCache) {
5431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
5531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        FolderIcon icon = (FolderIcon) LayoutInflater.from(launcher).inflate(resId, group, false);
5631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
5731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        final Resources resources = launcher.getResources();
58c9a961952d1a057029874f8426b90181f6876034Michael Jurka        Drawable d = iconCache.getFullResIcon(resources, R.drawable.ic_launcher_folder);
5931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        icon.mCloseIcon = d;
60c9a961952d1a057029874f8426b90181f6876034Michael Jurka        icon.mOpenIcon = iconCache.getFullResIcon(resources, R.drawable.ic_launcher_folder_open);
6131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        icon.setCompoundDrawablesWithIntrinsicBounds(null, d, null, null);
6231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        icon.setText(folderInfo.title);
6331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        icon.setTag(folderInfo);
6431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        icon.setOnClickListener(launcher);
6531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        icon.mInfo = folderInfo;
6631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        icon.mLauncher = launcher;
6731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        return icon;
6931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
7031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
7131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public boolean acceptDrop(DragSource source, int x, int y, int xOffset, int yOffset,
7200acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato            DragView dragView, Object dragInfo) {
7331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        final ItemInfo item = (ItemInfo) dragInfo;
7431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        final int itemType = item.itemType;
7531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        return (itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION ||
7631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                itemType == LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT)
7731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                && item.container != mInfo.id;
7831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
7931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
80df0353815c629fc678824b07a234b89a1ff94208Adam Cohen    public void addItem(ShortcutInfo item) {
81df0353815c629fc678824b07a234b89a1ff94208Adam Cohen        mInfo.add(item);
82df0353815c629fc678824b07a234b89a1ff94208Adam Cohen        LauncherModel.addOrMoveItemInDatabase(mLauncher, item, mInfo.id, 0, 0, 0);
83df0353815c629fc678824b07a234b89a1ff94208Adam Cohen    }
84df0353815c629fc678824b07a234b89a1ff94208Adam Cohen
8500acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato    public void onDrop(DragSource source, int x, int y, int xOffset, int yOffset,
8600acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato            DragView dragView, Object dragInfo) {
870589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato        ShortcutInfo item;
880589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato        if (dragInfo instanceof ApplicationInfo) {
890589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato            // Came from all apps -- make a copy
900589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato            item = ((ApplicationInfo)dragInfo).makeShortcut();
910589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato        } else {
920589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato            item = (ShortcutInfo)dragInfo;
930589f0f66ce498512c6ee47482c649d88294c9d0Joe Onorato        }
9466d72178af91d455700875635473be942bc90e54Michael Jurka        item.cellX = -1;
9566d72178af91d455700875635473be942bc90e54Michael Jurka        item.cellY = -1;
96df0353815c629fc678824b07a234b89a1ff94208Adam Cohen        addItem(item);
9731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
9831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
9931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public void onDragEnter(DragSource source, int x, int y, int xOffset, int yOffset,
10000acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato            DragView dragView, Object dragInfo) {
101379f16080fc37b02e048afa0cc54c605ba0ad37ePatrick Dubroy        if (acceptDrop(source, x, y, xOffset, yOffset, dragView, dragInfo)) {
102379f16080fc37b02e048afa0cc54c605ba0ad37ePatrick Dubroy            setCompoundDrawablesWithIntrinsicBounds(null, mOpenIcon, null, null);
103379f16080fc37b02e048afa0cc54c605ba0ad37ePatrick Dubroy        }
10431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
10531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
10631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public void onDragOver(DragSource source, int x, int y, int xOffset, int yOffset,
10700acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato            DragView dragView, Object dragInfo) {
10831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
10931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
11031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public void onDragExit(DragSource source, int x, int y, int xOffset, int yOffset,
11100acb123c5100f06b8e89e8ec8978ebafc6f6d26Joe Onorato            DragView dragView, Object dragInfo) {
11231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        setCompoundDrawablesWithIntrinsicBounds(null, mCloseIcon, null, null);
11331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
114440c360bc395c43683fa9ca226e59f9e35f9e926Patrick Dubroy
115440c360bc395c43683fa9ca226e59f9e35f9e926Patrick Dubroy    @Override
116440c360bc395c43683fa9ca226e59f9e35f9e926Patrick Dubroy    public DropTarget getDropTargetDelegate(DragSource source, int x, int y, int xOffset, int yOffset,
117440c360bc395c43683fa9ca226e59f9e35f9e926Patrick Dubroy            DragView dragView, Object dragInfo) {
118440c360bc395c43683fa9ca226e59f9e35f9e926Patrick Dubroy        return null;
119440c360bc395c43683fa9ca226e59f9e35f9e926Patrick Dubroy    }
12031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project}
121