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;
}
}
}