在Launcher3添加新的ListView,把应用添加到list中

来源:互联网 发布:纳什均衡和福利最优化 编辑:程序博客网 时间:2024/05/21 18:37

1.编辑桌面list部件名称

    

DefaultLayoutParser.java
private static final String TAG_THIRD_WUYAZHOU = "thirdwuyazhou";
@Overrideprotected HashMap<String, TagParser> getLayoutElementsMap() {    HashMap<String, TagParser> parsers = new HashMap<String, TagParser>();    parsers.put(TAG_FAVORITE, new AppShortcutWithUriParser());    parsers.put(TAG_APPWIDGET, new AppWidgetParser());    parsers.put(TAG_SHORTCUT, new UriShortcutParser(mSourceRes));    parsers.put(TAG_RESOLVE, new ResolveParser());    parsers.put(TAG_FOLDER, new MyFolderParser());    parsers.put(TAG_PARTNER_FOLDER, new PartnerFolderParser());    //wuyazhou add begin    parsers.put(TAG_THIRD_WUYAZHOU, new ThirdFolderParserWuyazhou());    //wuyazhou add end    return parsers;}
AutoInstallsLayout.java

protected HashMap<String, TagParser> getLayoutElementsMap() {    HashMap<String, TagParser> parsers = new HashMap<String, TagParser>();    parsers.put(TAG_APP_ICON, new AppShortcutParser());    parsers.put(TAG_AUTO_INSTALL, new AutoInstallParser());    parsers.put(TAG_FOLDER, new FolderParser());    parsers.put(TAG_APPWIDGET, new AppWidgetParser());    parsers.put(TAG_SHORTCUT, new ShortcutParser(mSourceRes));    //fangqing add begin    parsers.put(TAG_THIRD_WUYAZHOU, new ThirdFolderParserWuyazhou());    //fangqing add end    return parsers;}
@Thunk class ThirdFolderParserWuyazhou implements TagParser {    @Override    public long parseAndAdd(XmlResourceParser parser) {        long id = mCallback.generateNewItemId();        final long container = Favorites.CONTAINER_THIRD;        final long screenId = Long.parseLong(getAttributeValue(parser, ATTR_SCREEN));        mValues.clear();        mValues.put(Favorites.CONTAINER, container);        mValues.put(Favorites.SCREEN, screenId);        mValues.put(Favorites.CELLX,                convertToDistanceFromEnd(getAttributeValue(parser, ATTR_X), mColumnCount));        mValues.put(Favorites.CELLY,                convertToDistanceFromEnd(getAttributeValue(parser, ATTR_Y), mRowCount));        mValues.put(Favorites._ID, id);        mValues.put(Favorites.SPANX, getAttributeValue(parser, ATTR_SPAN_X));        mValues.put(Favorites.SPANY, getAttributeValue(parser, ATTR_SPAN_Y));        mValues.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_THIRD_wuyazhou);        if (mCallback.insertAndCheck(mDb, mValues) < 0) {            return -1;        } else {            return id;        }    }}
///
public static final int ITEM_TYPE_THIRD_wuyazhou = 7;
/////
LauncherModel.java
loadWorkspace(){
case LauncherSettings.Favorites.ITEM_TYPE_THIRD_wuyazhou:    Log.d("zhufucong","ITEM_TYPE_THIRD_wuyazhou 00");    info = new ShortcutInfo();    info.id = c.getLong(idIndex);    info.container = container;    info.screenId = c.getInt(screenIndex);    info.cellX = c.getInt(cellXIndex);    info.cellY = c.getInt(cellYIndex);    info.spanX = c.getInt(spanXIndex);    info.spanY = c.getInt(spanYIndex);    info.itemType = itemType;    sBgWorkspaceItems.add(info);    sBgItemsIdMap.put(info.id, info);    break;
}



2.在xml文件内添加相应的桌面list小部件

default_workspace_5*6.xml

<favorites xmlns:launcher="http://schemas.android.com/apk/res-auto/com.android.launcher3">
<thirdwuyazhou    launcher:screen="0"    launcher:screenType="0"    launcher:x="2"    launcher:y="0"    launcher:spanX="1"    launcher:spanY="4" />

</favorites>

3.创建list对应的列表类

ThirdApp.java
package com.android.launcher3;import android.content.ComponentName;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.RelativeLayout;import android.widget.ListView;import android.widget.BaseAdapter;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.ArrayList;import java.util.HashSet;import android.util.Log;import android.graphics.drawable.Drawable;import android.widget.ImageView;import android.widget.TextView;import android.view.LayoutInflater;import android.graphics.Bitmap;import android.content.Intent;import android.content.res.Configuration;public class ThirdApp extends RelativeLayout{   private ListView mListView;   private ListViewAdapter mAdapter;   private Workspace mWorkspace;   private Launcher mLauncher;   private View mView;   private ArrayList<ListInfo> mListInfo;   private int mCountX;   private int mCountY;   public ThirdApp(Workspace workspace, Context context) {        this(workspace, context, null);    }    public ThirdApp(Workspace workspace, Context context, AttributeSet attrs) {        this(workspace, context, attrs, 0);    }       public ThirdApp(Workspace workspace, Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        mLauncher = (Launcher) context;        mWorkspace = workspace;        LauncherAppState app = LauncherAppState.getInstance();        InvariantDeviceProfile profile = app.getInvariantDeviceProfile();        mCountX = profile.numColumns;        mCountY = profile.numRows;        initViews();    }    void initViews(){       mView = LayoutInflater.from(mLauncher).inflate(R.layout.third_app,            (ViewGroup) mWorkspace.getChildAt(mWorkspace.getCurrentPage()), false);      mListView = (ListView)mView.findViewById(R.id.list);      mListInfo= new ArrayList<ListInfo>();        mAdapter = new ListViewAdapter(mListInfo);        mListView.setAdapter(mAdapter);        mListView.setOnItemClickListener(new OnItemClickListener(){         @Override         public void onItemClick(AdapterView<?> parent, View view,               int position, long id) {            // TODO Auto-generated method stub            ListInfo listInfo = (ListInfo)mAdapter.getItem(position);            mLauncher.startActivity(listInfo.mIntent);         }                   });   }    public void addItem(ShortcutInfo info){       String title = info.title.toString();        Intent intent = info.intent;       LauncherAppState app = LauncherAppState.getInstance();       Bitmap bp= info.getIcon(app.getIconCache());       int index = (int)info.screenId*mCountY*mCountX+info.cellY*mCountX+info.cellX;       ListInfo listInfo = new ListInfo(title, intent, bp, index);              Collections.sort(mListInfo, ITEM_POS_COMPARATOR);       mListInfo.add(listInfo);       mAdapter.notifyDataSetChanged();    }    public void removeItem(final HashSet<String> packageNames, final HashSet<ComponentName> components){       for(ListInfo info:mListInfo){          ComponentName cn = info.mIntent.getComponent();          if(cn != null &&components.contains(cn)){             mListInfo.remove(info);             mAdapter.notifyDataSetChanged();          }       }       for(ListInfo info:mListInfo){          ComponentName cn = info.mIntent.getComponent();          if(cn!=null){             String pckName = info.mIntent.getComponent().getPackageName();             if(pckName != null &&packageNames.contains(pckName)){                mListInfo.remove(info);                mAdapter.notifyDataSetChanged();             }          }       }    }    @Override    protected void onFinishInflate() {        super.onFinishInflate();    }    public View getView(){       return mView;    }    public class ListViewAdapter extends BaseAdapter{       ArrayList<ListInfo> mData;       public ListViewAdapter(ArrayList data){          mData = data;       }      @Override      public int getCount() {         // TODO Auto-generated method stub         return mData.size();      }      @Override      public Object getItem(int position) {         // TODO Auto-generated method stub         return mData.get(position);      }      @Override      public long getItemId(int position) {         // TODO Auto-generated method stub         return position;      }      @Override      public View getView(int position, View convertView, ViewGroup parent) {         // TODO Auto-generated method stub         final int selectID= position;           ListItemView listItemView = null;           if(convertView ==null){               listItemView = new ListItemView();               convertView = LayoutInflater.from(mContext).inflate(R.layout.third_app_list_item, null);               listItemView.mImage =(ImageView) convertView.findViewById(R.id.third_app_icon);               listItemView.mText = (TextView)convertView.findViewById(R.id.third_app_title);               convertView.setTag(listItemView);           }else{               listItemView = (ListItemView) convertView.getTag();           }           listItemView.mImage.setImageBitmap((Bitmap)mData.get(position).mImage);           listItemView.mText.setText((String)mData.get(position).mTitle);           return convertView;      }      public final class ListItemView{           public ImageView mImage;           public TextView mText;       }          }      public class ListInfo {       int mIndex;       String mTitle;       Intent mIntent;       Bitmap mImage;       public ListInfo(String title, Intent intent, Bitmap image,int index){          mIndex = index;          mTitle = title;          mImage = image;          mIntent = intent;       }    }    public static final Comparator<ListInfo> ITEM_POS_COMPARATOR = new Comparator<ListInfo>() {        @Override        public int compare(ListInfo lhs, ListInfo rhs) {            if (lhs.mIndex != rhs.mIndex) {                return lhs.mIndex - rhs.mIndex;            }            return 0;        }    };}


4.初始化时在桌面添加list部件以及向部件内添加应用

@Overridepublic void bindItems(final ArrayList<ItemInfo> shortcuts, final int start, final int end,                      final boolean forceAnimateIcons) {
switch (item.itemType) {                case LauncherSettings.Favorites.ITEM_TYPE_THIRD_wuyazhou://                 view =  mInflater.inflate(R.layout.third_app,//                       (ViewGroup) mWorkspace.getChildAt(mWorkspace.getCurrentPage()), false);                    mThirdAppwuyazhou = new ThirdApp(mWorkspace, this);                    Log.d("zhufucong","ITEM_TYPE_THIRD_wuyazhou");                    view = mThirdAppwuyazhou.getView();                    view.setTag(item);                    break;
                 default:                    throw new RuntimeException("Invalid Item Type");            }//fangqing add begin            if( view== null) continue;                      workspace.addInScreenFromBind(view, item.container, item.screenId, item.cellX,                    item.cellY, item.spanX, item.spanY);          //fangqing add end
}








0 0