mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-19 18:58:19 +00:00
95 lines
2.9 KiB
Java
95 lines
2.9 KiB
Java
|
|
package com.android.launcher2;
|
||
|
|
|
||
|
|
import android.appwidget.AppWidgetProviderInfo;
|
||
|
|
import android.content.Context;
|
||
|
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||
|
|
import android.content.res.Resources;
|
||
|
|
import android.graphics.Bitmap;
|
||
|
|
import android.graphics.BitmapFactory;
|
||
|
|
import android.graphics.drawable.Drawable;
|
||
|
|
import android.util.AttributeSet;
|
||
|
|
import android.view.MotionEvent;
|
||
|
|
import android.view.View;
|
||
|
|
import android.widget.AdapterView;
|
||
|
|
import android.widget.Gallery;
|
||
|
|
|
||
|
|
public class WidgetChooser extends Gallery
|
||
|
|
implements Gallery.OnItemLongClickListener, DragSource {
|
||
|
|
|
||
|
|
Context mContext;
|
||
|
|
|
||
|
|
private Launcher mLauncher;
|
||
|
|
private DragController mDragController;
|
||
|
|
private WidgetGalleryAdapter mWidgetGalleryAdapter;
|
||
|
|
|
||
|
|
private int mMotionDownRawX;
|
||
|
|
private int mMotionDownRawY;
|
||
|
|
|
||
|
|
public WidgetChooser(Context context, AttributeSet attrs) {
|
||
|
|
super(context, attrs);
|
||
|
|
setLongClickable(true);
|
||
|
|
setOnItemLongClickListener(this);
|
||
|
|
mContext = context;
|
||
|
|
|
||
|
|
setCallbackDuringFling(false);
|
||
|
|
|
||
|
|
mWidgetGalleryAdapter = new WidgetGalleryAdapter(context);
|
||
|
|
setAdapter(mWidgetGalleryAdapter);
|
||
|
|
}
|
||
|
|
|
||
|
|
public void onDropCompleted(View target, boolean success) {
|
||
|
|
// TODO Auto-generated method stub
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setDragController(DragController dragger) {
|
||
|
|
mDragController = dragger;
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setLauncher(Launcher launcher) {
|
||
|
|
mLauncher = launcher;
|
||
|
|
}
|
||
|
|
|
||
|
|
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
|
||
|
|
AppWidgetProviderInfo info = (AppWidgetProviderInfo)mWidgetGalleryAdapter.getItem(position);
|
||
|
|
try {
|
||
|
|
Resources r = mContext.getPackageManager().getResourcesForApplication(info.provider.getPackageName());
|
||
|
|
|
||
|
|
Bitmap bmp = BitmapFactory.decodeResource(r, info.icon);
|
||
|
|
final int w = bmp.getWidth();
|
||
|
|
final int h = bmp.getHeight();
|
||
|
|
|
||
|
|
// We don't really have an accurate location to use. This will do.
|
||
|
|
int screenX = mMotionDownRawX - (w / 2);
|
||
|
|
int screenY = mMotionDownRawY - h;
|
||
|
|
|
||
|
|
LauncherAppWidgetInfo dragInfo = new LauncherAppWidgetInfo(-1);
|
||
|
|
dragInfo.providerName = info.provider;
|
||
|
|
mDragController.startDrag(bmp, screenX, screenY,
|
||
|
|
0, 0, w, h, this, dragInfo, DragController.DRAG_ACTION_COPY);
|
||
|
|
return true;
|
||
|
|
} catch (NameNotFoundException e) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@Override
|
||
|
|
public boolean onTouchEvent(MotionEvent ev) {
|
||
|
|
if (ev.getAction() == MotionEvent.ACTION_DOWN && mLauncher.isAllAppsVisible()) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
super.onTouchEvent(ev);
|
||
|
|
|
||
|
|
int x = (int) ev.getX();
|
||
|
|
int y = (int) ev.getY();
|
||
|
|
|
||
|
|
switch (ev.getAction()) {
|
||
|
|
case MotionEvent.ACTION_DOWN:
|
||
|
|
mMotionDownRawX = (int) ev.getRawX();
|
||
|
|
mMotionDownRawY = (int) ev.getRawY();
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|