diff options
author | Romain Guy <romainguy@android.com> | 2009-11-09 20:43:08 -0800 |
---|---|---|
committer | Romain Guy <romainguy@android.com> | 2009-11-09 20:45:03 -0800 |
commit | 1fbc1c843170fe0c9326bb3ffd5bd9c5c599ca2e (patch) | |
tree | 6e9703176345359db8e9b9fe23e6a97c94d72e0a /src/com/android | |
parent | c07c79b10b663a02ef67da57bdda60a1ea299eb5 (diff) | |
download | android_packages_apps_Trebuchet-1fbc1c843170fe0c9326bb3ffd5bd9c5c599ca2e.tar.gz android_packages_apps_Trebuchet-1fbc1c843170fe0c9326bb3ffd5bd9c5c599ca2e.tar.bz2 android_packages_apps_Trebuchet-1fbc1c843170fe0c9326bb3ffd5bd9c5c599ca2e.zip |
Add previews on long press on the indicators.
Change-Id: I6349d55345255caacc1381e83459544f8b8e085c
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/launcher2/Launcher.java | 122 |
1 files changed, 112 insertions, 10 deletions
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 738793b6d..e7a4a3c87 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -39,6 +39,7 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; import android.graphics.Bitmap; +import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; @@ -60,12 +61,14 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.MotionEvent; import android.view.View.OnLongClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import android.widget.ImageView; +import android.widget.PopupWindow; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; @@ -80,7 +83,7 @@ import java.io.DataInputStream; * Default launcher application. */ public final class Launcher extends Activity - implements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks { + implements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks, View.OnTouchListener, View.OnKeyListener { static final String LOG_TAG = "Launcher"; static final String TAG = LOG_TAG; static final boolean LOGD = false; @@ -193,6 +196,8 @@ public final class Launcher extends Activity private static HashMap<Long, FolderInfo> mFolders = new HashMap<Long, FolderInfo>(); public static long lastStartTime; + private ImageView mPreviousView; + private ImageView mNextView; @Override protected void onCreate(Bundle savedInstanceState) { @@ -436,6 +441,8 @@ public final class Launcher extends Activity mExitingBecauseOfLaunch = false; closeAllApps(false); } + dismissPreview(mPreviousView); + dismissPreview(mNextView); } @Override @@ -550,11 +557,21 @@ public final class Launcher extends Activity mHandleView = (HandleView) findViewById(R.id.all_apps_button); mHandleView.setLauncher(this); mHandleView.setOnClickListener(this); - - Drawable previous = ((ImageView) dragLayer.findViewById(R.id.previous_screen)).getDrawable(); - Drawable next = ((ImageView) dragLayer.findViewById(R.id.next_screen)).getDrawable(); + + mPreviousView = (ImageView) dragLayer.findViewById(R.id.previous_screen); + mNextView = (ImageView) dragLayer.findViewById(R.id.next_screen); + + Drawable previous = mPreviousView.getDrawable(); + Drawable next = mNextView.getDrawable(); mWorkspace.setIndicators(previous, next); + mPreviousView.setOnLongClickListener(this); + mPreviousView.setOnTouchListener(this); + mPreviousView.setOnKeyListener(this); + mNextView.setOnLongClickListener(this); + mNextView.setOnTouchListener(this); + mNextView.setOnKeyListener(this); + workspace.setOnLongClickListener(this); workspace.setDragController(dragController); workspace.setLauncher(this); @@ -921,6 +938,9 @@ public final class Launcher extends Activity AppInfoCache.unbindDrawables(); getContentResolver().unregisterContentObserver(mWidgetObserver); + + dismissPreview(mPreviousView); + dismissPreview(mNextView); } @Override @@ -1450,6 +1470,15 @@ public final class Launcher extends Activity } public boolean onLongClick(View v) { + switch (v.getId()) { + case R.id.previous_screen: + showPreviousPreview(v); + return true; + case R.id.next_screen: + showNextPreview(v); + return true; + } + if (isWorkspaceLocked()) { return false; } @@ -1482,6 +1511,85 @@ public final class Launcher extends Activity return true; } + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_UP) { + dismissPreview(v); + } + return false; + } + + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_UP) { + dismissPreview(v); + } + return false; + } + + private void dismissPreview(View v) { + PopupWindow window = (PopupWindow) v.getTag(); + if (window != null) { + window.dismiss(); + ((ImageView) v.getTag(R.id.workspace)).setImageBitmap(null); + ((Bitmap) v.getTag(R.id.icon)).recycle(); + + v.setTag(R.id.workspace, null); + v.setTag(R.id.icon, null); + } + v.setTag(null); + } + + private void showPreviousPreview(View anchor) { + int current = mWorkspace.getCurrentScreen(); + if (current <= 0) return; + + View previous = mWorkspace.getChildAt(current - 1); + showPreview(anchor, previous); + } + + private void showNextPreview(View anchor) { + int current = mWorkspace.getCurrentScreen(); + if (current >= mWorkspace.getChildCount() - 1) return; + + View next = mWorkspace.getChildAt(current + 1); + showPreview(anchor, next); + } + + private void showPreview(View anchor, View source) { + boolean cacheEnabled = source.isDrawingCacheEnabled(); + source.setDrawingCacheEnabled(true); + source.buildDrawingCache(); + + Bitmap cache = source.getDrawingCache(); + if (cache == null) return; + + Bitmap bitmap = Bitmap.createScaledBitmap(cache, + (int) (cache.getWidth() / 2.5f), (int) (cache.getHeight() / 2.5f), true); + + ImageView preview = new ImageView(this); + preview.setImageBitmap(bitmap); + Drawable d = getResources().getDrawable(R.drawable.preview_popup); + preview.setBackgroundDrawable(d); + + Rect r = new Rect(); + d.getPadding(r); + int extraW = r.left + r.right; + int extraH = r.top + r.bottom; + + PopupWindow p = new PopupWindow(preview, bitmap.getWidth() + extraW, + bitmap.getHeight() + extraH); + p.setWindowLayoutMode(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + p.setAnimationStyle(R.style.AnimationPreview); + p.showAsDropDown(anchor, 0, 0); + + source.destroyDrawingCache(); + if (!cacheEnabled) source.setDrawingCacheEnabled(cacheEnabled); + + anchor.setTag(p); + anchor.setTag(R.id.workspace, preview); + anchor.setTag(R.id.icon, bitmap); + } + View getDrawerHandle() { return mHandleView; } @@ -1490,12 +1598,6 @@ public final class Launcher extends Activity return mWorkspace; } - /* TODO - GridView getApplicationsGrid() { - return mAllAppsGrid; - } - */ - @Override protected Dialog onCreateDialog(int id) { switch (id) { |