package com.android.launcher; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.graphics.Rect; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; /** * Folder which contains applications or shortcuts chosen by the user. * */ public class UserFolder extends Folder implements DropTarget { public UserFolder(Context context, AttributeSet attrs) { super(context, attrs); } /** * Creates a new UserFolder, inflated from R.layout.user_folder. * * @param context The application's context. * * @return A new UserFolder. */ static UserFolder fromXml(Context context) { return (UserFolder) LayoutInflater.from(context).inflate(R.layout.user_folder, null); } public boolean acceptDrop(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) { final ItemInfo item = (ItemInfo) dragInfo; final int itemType = item.itemType; return (itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION || itemType == LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT) && item.container != mInfo.id; } public Rect estimateDropLocation(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo, Rect recycle) { return null; } @SuppressWarnings("unchecked") public void onDrop(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) { final ApplicationInfo item = (ApplicationInfo) dragInfo; //noinspection unchecked ((ArrayAdapter<ApplicationInfo>) mContent.getAdapter()).add((ApplicationInfo) dragInfo); LauncherModel.addOrMoveItemInDatabase(mLauncher, item, mInfo.id, 0, 0, 0); } public void onDragEnter(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) { } public void onDragOver(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) { } public void onDragExit(DragSource source, int x, int y, int xOffset, int yOffset, Object dragInfo) { } @Override @SuppressWarnings("unchecked") public void onDropCompleted(View target, boolean success) { if (success) { //noinspection unchecked ArrayAdapter<ApplicationInfo> adapter = (ArrayAdapter<ApplicationInfo>) mContent.getAdapter(); adapter.remove(mDragItem); } } void bind(FolderInfo info) { super.bind(info); //setContentAdapter(new ApplicationsAdapter(mContext, ((UserFolderInfo) info).contents)); setContentAdapter(new FolderAdapter(getContext(), ((UserFolderInfo) info).contents)); } // When the folder opens, we need to refresh the GridView's selection by // forcing a layout @Override void onOpen() { super.onOpen(); requestFocus(); } private class FolderAdapter extends ArrayAdapter<ApplicationInfo> { private LayoutInflater mInflater; private Drawable mBackground; private int mTextColor = 0; private boolean useThemeTextColor = false; private Typeface themeFont=null; public FolderAdapter(Context context, ArrayList<ApplicationInfo> icons) { super(context, 0,icons); mInflater=LayoutInflater.from(context); // ADW: Load textcolor and bubble color from theme String themePackage = AlmostNexusSettingsHelper.getThemePackageName( getContext(), Launcher.THEME_DEFAULT); if (!themePackage.equals(Launcher.THEME_DEFAULT)) { Resources themeResources = null; try { themeResources = getContext().getPackageManager() .getResourcesForApplication(themePackage); } catch (NameNotFoundException e) { // e.printStackTrace(); } if (themeResources != null) { int textColorId = themeResources.getIdentifier( "drawer_text_color", "color", themePackage); if (textColorId != 0) { mTextColor = themeResources.getColor(textColorId); useThemeTextColor = true; } mBackground = IconHighlights.getDrawable(getContext(), IconHighlights.TYPE_DRAWER); try{ themeFont=Typeface.createFromAsset(themeResources.getAssets(), "themefont.ttf"); }catch (RuntimeException e) { // TODO: handle exception } } } } @Override public View getView(int position, View convertView, ViewGroup parent) { final ApplicationInfo info = getItem(position); if (convertView == null) { convertView = mInflater.inflate(R.layout.application_boxed, parent, false); } if (!info.filtered) { info.icon = Utilities.createIconThumbnail(info.icon, getContext()); info.filtered = true; } final TextView textView = (TextView) convertView; textView.setCompoundDrawablesWithIntrinsicBounds(null, info.icon, null, null); textView.setText(info.title); if (useThemeTextColor) { textView.setTextColor(mTextColor); } //ADW: Custom font if(themeFont!=null) textView.setTypeface(themeFont); // so i'd better not use it, sorry themers if (mBackground != null) convertView.setBackgroundDrawable(mBackground); return convertView; } } }