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