Better previews.
Change-Id: I400c6b45fae2f74722985f766dc17c0892550403
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 6c42281..b6b2992 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -70,6 +70,7 @@
import android.widget.Toast;
import android.widget.ImageView;
import android.widget.PopupWindow;
+import android.widget.LinearLayout;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
@@ -1510,13 +1511,21 @@
return true;
}
+ @SuppressWarnings({"unchecked"})
private void dismissPreview(View v) {
PopupWindow window = (PopupWindow) v.getTag();
if (window != null) {
window.setOnDismissListener(null);
window.dismiss();
- ((ImageView) v.getTag(R.id.workspace)).setImageBitmap(null);
- ((Bitmap) v.getTag(R.id.icon)).recycle();
+
+ ViewGroup group = (ViewGroup) v.getTag(R.id.workspace);
+ int count = group.getChildCount();
+ for (int i = 0; i < count; i++) {
+ ((ImageView) group.getChildAt(i)).setImageDrawable(null);
+ }
+
+ ArrayList<Bitmap> bitmaps = (ArrayList<Bitmap>) v.getTag(R.id.icon);
+ for (Bitmap bitmap : bitmaps) bitmap.recycle();
v.setTag(R.id.workspace, null);
v.setTag(R.id.icon, null);
@@ -1549,20 +1558,17 @@
}
private void showPreviews(final View anchor, int start, int end) {
- ImageView preview = new ImageView(this);
- preview.requestFocus();
-
Drawable d = getResources().getDrawable(R.drawable.preview_popup);
- Rect r = new Rect();
- d.getPadding(r);
- int extraW = r.left + r.right;
- int extraH = r.top + r.bottom;
-
Workspace workspace = mWorkspace;
CellLayout cell = ((CellLayout) workspace.getChildAt(start));
float max = workspace.getChildCount() - 1;
+
+ Rect r = new Rect();
+ d.getPadding(r);
+ int extraW = (int) ((r.left + r.right) * max);
+ int extraH = r.top + r.bottom;
int aW = cell.getWidth() - extraW;
float w = aW / max;
@@ -1581,75 +1587,63 @@
final float sWidth = width * scale;
float sHeight = height * scale;
- Bitmap bitmap = Bitmap.createBitmap((int) (sWidth * count),
- (int) sHeight, Bitmap.Config.ARGB_8888);
+ LinearLayout preview = new LinearLayout(this);
+ preview.setFocusable(true);
- PopupWindow p = new PopupWindow(this);
- p.setContentView(preview);
- p.setWidth(bitmap.getWidth() + extraW);
- p.setHeight(bitmap.getHeight() + extraH);
- p.setAnimationStyle(R.style.AnimationPreview);
- p.setOutsideTouchable(true);
- p.setBackgroundDrawable(d);
- p.showAsDropDown(anchor, 0, 0);
-
- Canvas c = new Canvas(bitmap);
+ PreviewTouchHandler handler = new PreviewTouchHandler(anchor);
+ ArrayList<Bitmap> bitmaps = new ArrayList<Bitmap>(count);
for (int i = start; i < end; i++) {
+ ImageView image = new ImageView(this);
cell = (CellLayout) workspace.getChildAt(i);
- c.save();
+ Bitmap bitmap = Bitmap.createBitmap((int) sWidth, (int) sHeight,
+ Bitmap.Config.ARGB_8888);
+
+ Canvas c = new Canvas(bitmap);
c.scale(scale, scale);
c.translate(-cell.getLeftPadding(), -cell.getTopPadding());
cell.dispatchDraw(c);
- c.restore();
- c.translate(sWidth, 0.0f);
+ image.setBackgroundDrawable(d);
+ image.setImageBitmap(bitmap);
+ image.setTag(i);
+ image.setOnClickListener(handler);
+ bitmaps.add(bitmap);
+
+ preview.addView(image,
+ ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
}
+
+ PopupWindow p = new PopupWindow(this);
+ p.setContentView(preview);
+ p.setWidth((int) (sWidth * count + extraW));
+ p.setHeight((int) (sHeight + extraH));
+ p.setAnimationStyle(R.style.AnimationPreview);
+ p.setOutsideTouchable(true);
+ p.setBackgroundDrawable(null);
+ p.showAsDropDown(anchor, 0, 0);
- preview.setImageBitmap(bitmap);
-
- PreviewTouchHandler handler = new PreviewTouchHandler(anchor, sWidth);
- preview.setOnClickListener(handler);
- preview.setOnTouchListener(handler);
- p.setOnDismissListener(handler);
+ p.setOnDismissListener(new PopupWindow.OnDismissListener() {
+ public void onDismiss() {
+ dismissPreview(anchor);
+ }
+ });
anchor.setTag(p);
anchor.setTag(R.id.workspace, preview);
- anchor.setTag(R.id.icon, bitmap);
+ anchor.setTag(R.id.icon, bitmaps);
}
- class PreviewTouchHandler implements View.OnTouchListener, View.OnClickListener,
- PopupWindow.OnDismissListener {
-
+ class PreviewTouchHandler implements View.OnClickListener {
private final View mAnchor;
- private final float mWidth;
- private float mTouchX;
- public PreviewTouchHandler(View anchor, float width) {
+ public PreviewTouchHandler(View anchor) {
mAnchor = anchor;
- mWidth = width;
- }
-
- public boolean onTouch(View v, MotionEvent event) {
- if (event.getAction() == MotionEvent.ACTION_UP) {
- mTouchX = event.getX();
- }
- return false;
}
public void onClick(View v) {
- int screen = 0;
- if (mAnchor == mNextView) {
- screen = mWorkspace.getCurrentScreen() + (int) (mTouchX / mWidth) + 1;
- } else if (mAnchor == mPreviousView) {
- screen = (int) (mTouchX / mWidth);
- }
- mWorkspace.snapToScreen(screen);
- dismissPreview(mAnchor);
- }
-
- public void onDismiss() {
+ mWorkspace.snapToScreen((Integer) v.getTag());
dismissPreview(mAnchor);
}
}