diff options
Diffstat (limited to 'src/com/android/launcher2/WidgetChooser.java')
-rw-r--r-- | src/com/android/launcher2/WidgetChooser.java | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/com/android/launcher2/WidgetChooser.java b/src/com/android/launcher2/WidgetChooser.java new file mode 100644 index 000000000..fc354d79a --- /dev/null +++ b/src/com/android/launcher2/WidgetChooser.java @@ -0,0 +1,94 @@ +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; + } +} |