mSelectionManager = new SelectionManager(mActivity, false);
mSelectionManager.setSelectionListener(this);
Config.AlbumPage config = Config.AlbumPage.get((Context) mActivity);
- mSlotView = new SlotView((Context) mActivity, config.slotViewSpec);
+ mSlotView = new SlotView(mActivity, config.slotViewSpec);
mAlbumView = new AlbumSlotRenderer(mActivity, mSlotView, mSelectionManager);
mSlotView.setSlotRenderer(mAlbumView);
mRootPane.addComponent(mSlotView);
mSelectionManager.setSelectionListener(this);
Config.AlbumSetPage config = Config.AlbumSetPage.get((Context) mActivity);
- mSlotView = new SlotView((Context) mActivity, config.slotViewSpec);
+ mSlotView = new SlotView(mActivity, config.slotViewSpec);
mAlbumSetView = new AlbumSetSlotRenderer(
mActivity, mSelectionManager, mSlotView, config.labelSpec);
mSlotView.setSlotRenderer(mAlbumSetView);
package com.android.gallery3d.app;
import android.app.Activity;
-import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import com.android.gallery3d.data.Path;
import com.android.gallery3d.ui.CacheStorageUsageInfo;
import com.android.gallery3d.ui.GLCanvas;
+import com.android.gallery3d.ui.GLRoot;
import com.android.gallery3d.ui.GLView;
import com.android.gallery3d.ui.ManageCacheDrawer;
import com.android.gallery3d.ui.MenuExecutor;
mSelectionManager.setSelectionListener(this);
Config.ManageCachePage config = Config.ManageCachePage.get(activity);
- mSlotView = new SlotView((Context) mActivity, config.slotViewSpec);
+ mSlotView = new SlotView(mActivity, config.slotViewSpec);
mSelectionDrawer = new ManageCacheDrawer(mActivity, mSelectionManager, mSlotView,
config.labelSpec, config.cachePinSize, config.cachePinMargin);
mSlotView.setSlotRenderer(mSelectionDrawer);
@Override
public void onClick(View view) {
Utils.assertTrue(view.getId() == R.id.done);
+ GLRoot root = mActivity.getGLRoot();
+ root.lockRenderThread();
+ try {
+ ArrayList<Path> ids = mSelectionManager.getSelected(false);
+ if (ids.size() == 0) {
+ onBackPressed();
+ return;
+ }
+ showToast();
- ArrayList<Path> ids = mSelectionManager.getSelected(false);
- if (ids.size() == 0) {
- onBackPressed();
- return;
+ MenuExecutor menuExecutor = new MenuExecutor(mActivity, mSelectionManager);
+ menuExecutor.startAction(R.id.action_toggle_full_caching,
+ R.string.process_caching_requests, this);
+ } finally {
+ root.unlockRenderThread();
}
- showToast();
-
- MenuExecutor menuExecutor = new MenuExecutor(mActivity, mSelectionManager);
- menuExecutor.startAction(R.id.action_toggle_full_caching,
- R.string.process_caching_requests, this);
}
private void showToast() {
R.menu.selection);
updateSelectionMenu();
customMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
+ @Override
public boolean onMenuItemClick(MenuItem item) {
return onActionItemClicked(actionMode, item);
}
mListener = listener;
}
+ @Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- boolean result;
- if (mListener != null) {
- result = mListener.onActionItemClicked(item);
- if (result) {
- mSelectionManager.leaveSelectionMode();
- return result;
+ GLRoot root = mActivity.getGLRoot();
+ root.lockRenderThread();
+ try {
+ boolean result;
+ if (mListener != null) {
+ result = mListener.onActionItemClicked(item);
+ if (result) {
+ mSelectionManager.leaveSelectionMode();
+ return result;
+ }
}
+ ProgressListener listener = null;
+ if (item.getItemId() == R.id.action_import) {
+ listener = new ImportCompleteListener(mActivity);
+ }
+ result = mMenuExecutor.onMenuClicked(item, listener);
+ if (item.getItemId() == R.id.action_select_all) {
+ updateSupportedOperation();
+ updateSelectionMenu();
+ }
+ return result;
+ } finally {
+ root.unlockRenderThread();
}
- ProgressListener listener = null;
- if (item.getItemId() == R.id.action_import) {
- listener = new ImportCompleteListener(mActivity);
- }
- result = mMenuExecutor.onMenuClicked(item, listener);
- if (item.getItemId() == R.id.action_select_all) {
- updateSupportedOperation();
- updateSelectionMenu();
- }
- return result;
}
private void updateSelectionMenu() {
import android.view.animation.DecelerateInterpolator;
import com.android.gallery3d.anim.Animation;
+import com.android.gallery3d.app.GalleryActivity;
import com.android.gallery3d.common.Utils;
public class SlotView extends GLView {
// to prevent allocating memory
private final Rect mTempRect = new Rect();
- public SlotView(Context context, Spec spec) {
- mGestureDetector =
- new GestureDetector(context, new MyGestureListener());
- mScroller = new ScrollerHelper(context);
- mHandler = new Handler(context.getMainLooper());
+ public SlotView(GalleryActivity activity, Spec spec) {
+ mGestureDetector = new GestureDetector(
+ (Context) activity, new MyGestureListener());
+ mScroller = new ScrollerHelper((Context) activity);
+ mHandler = new SynchronizedHandler(activity.getGLRoot());
setSlotSpec(spec);
}
}
}
- private class MyGestureListener implements
- GestureDetector.OnGestureListener {
+ private class MyGestureListener implements GestureDetector.OnGestureListener {
private boolean isDown;
// We call the listener's onDown() when our onShowPress() is called and
// call the listener's onUp() when we receive any further event.
@Override
public void onShowPress(MotionEvent e) {
- if (isDown) return;
- int index = mLayout.getSlotIndexByPosition(e.getX(), e.getY());
- if (index != INDEX_NONE) {
- isDown = true;
- mListener.onDown(index);
+ GLRoot root = getGLRoot();
+ root.lockRenderThread();
+ try {
+ if (isDown) return;
+ int index = mLayout.getSlotIndexByPosition(e.getX(), e.getY());
+ if (index != INDEX_NONE) {
+ isDown = true;
+ mListener.onDown(index);
+ }
+ } finally {
+ root.unlockRenderThread();
}
}