AbstractGalleryActivity.java revision b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8a
1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/* 2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2010 The Android Open Source Project 3f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 4f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * you may not use this file except in compliance with the License. 6f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * You may obtain a copy of the License at 7f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 8f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 10f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Unless required by applicable law or agreed to in writing, software 11f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * See the License for the specific language governing permissions and 14f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * limitations under the License. 15f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */ 16f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 17f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpackage com.android.gallery3d.app; 18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 19b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Linimport android.annotation.TargetApi; 20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.app.Activity; 21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.app.AlertDialog; 22f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.BroadcastReceiver; 23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.Context; 24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.DialogInterface; 25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.DialogInterface.OnCancelListener; 26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.DialogInterface.OnClickListener; 27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.Intent; 28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.IntentFilter; 298e565703e8d482421714383a8ad40a67929ce2daOwen Linimport android.content.res.Configuration; 30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.os.Bundle; 31b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Linimport android.view.Menu; 32655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chenimport android.view.MenuItem; 334d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Tingimport android.view.Window; 344d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Tingimport android.view.WindowManager; 35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 364bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Linimport com.android.gallery3d.R; 37b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Linimport com.android.gallery3d.common.ApiHelper; 38df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Linimport com.android.gallery3d.data.BitmapPool; 394bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Linimport com.android.gallery3d.data.DataManager; 40d8fb81f601830385a2343d08ad5dd171e4c7bfe0Owen Linimport com.android.gallery3d.data.MediaItem; 414bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Linimport com.android.gallery3d.ui.GLRoot; 424bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Linimport com.android.gallery3d.ui.GLRootView; 434bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Linimport com.android.gallery3d.util.ThreadPool; 444bb5912e85f6d1bd8a6b78d6d52b4c4da7aeb740Owen Lin 45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class AbstractGalleryActivity extends Activity implements GalleryActivity { 46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @SuppressWarnings("unused") 47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final String TAG = "AbstractGalleryActivity"; 48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private GLRootView mGLRootView; 49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private StateManager mStateManager; 508cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen private GalleryActionBar mActionBar; 51bd141b5a51c96f6fcaddfa547f0928ce69cf0755Chih-Chung Chang private OrientationManager mOrientationManager; 52616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin private TransitionStore mTransitionStore = new TransitionStore(); 53b1db75c15ef546fef26ee7e34321f3087562a0f7Wu-cheng Li private boolean mDisableToggleStatusBar; 54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private AlertDialog mAlertDialog = null; 56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private BroadcastReceiver mMountReceiver = new BroadcastReceiver() { 57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onReceive(Context context, Intent intent) { 59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (getExternalCacheDir() != null) onStorageReady(); 60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }; 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private IntentFilter mMountFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED); 63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 654d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting protected void onCreate(Bundle savedInstanceState) { 664d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting super.onCreate(savedInstanceState); 67bd141b5a51c96f6fcaddfa547f0928ce69cf0755Chih-Chung Chang mOrientationManager = new OrientationManager(this); 684d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting toggleStatusBarByOrientation(); 697896b2ce915cbd180682e94e2fe3d246ff760763Owen Lin getWindow().setBackgroundDrawable(null); 704d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting } 714d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting 724d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting @Override 73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onSaveInstanceState(Bundle outState) { 74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView.lockRenderThread(); 75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin try { 76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onSaveInstanceState(outState); 77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getStateManager().saveState(outState); 78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } finally { 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView.unlockRenderThread(); 80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 838e565703e8d482421714383a8ad40a67929ce2daOwen Lin @Override 848e565703e8d482421714383a8ad40a67929ce2daOwen Lin public void onConfigurationChanged(Configuration config) { 858e565703e8d482421714383a8ad40a67929ce2daOwen Lin super.onConfigurationChanged(config); 868e565703e8d482421714383a8ad40a67929ce2daOwen Lin mStateManager.onConfigurationChange(config); 87108667b88ed4046556e967fcb9541fa9efd7c606Ray Chen invalidateOptionsMenu(); 884d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting toggleStatusBarByOrientation(); 898e565703e8d482421714383a8ad40a67929ce2daOwen Lin } 908e565703e8d482421714383a8ad40a67929ce2daOwen Lin 91b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin private Menu mOptionsMenu; 92b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin 93b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin @Override 94b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin public boolean onCreateOptionsMenu(Menu menu) { 95b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin mOptionsMenu = menu; 96b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin super.onCreateOptionsMenu(menu); 97b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin return getStateManager().createOptionsMenu(menu); 98b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin } 99b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin 100b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin @Override 101b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin @TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB) 102b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin public void invalidateOptionsMenu() { 103b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin if (ApiHelper.HAS_ACTIVITY_INVALIDATE_OPTIONS_MENU) { 104b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin super.invalidateOptionsMenu(); 105b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin } else if (mOptionsMenu != null) { 106b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin mOptionsMenu.clear(); 107b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin getStateManager().createOptionsMenu(mOptionsMenu); 108b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin } 109b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin } 110b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin 111b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin @Override 112f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public Context getAndroidContext() { 113f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return this; 114f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 115f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 116b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin @Override 117f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public DataManager getDataManager() { 118f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return ((GalleryApp) getApplication()).getDataManager(); 119f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 120f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 121b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin @Override 122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public ThreadPool getThreadPool() { 123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return ((GalleryApp) getApplication()).getThreadPool(); 124f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 125f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 126b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin @Override 127f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public synchronized StateManager getStateManager() { 128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mStateManager == null) { 129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mStateManager = new StateManager(this); 130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mStateManager; 132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 134b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin @Override 135f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public GLRoot getGLRoot() { 136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mGLRootView; 137f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 138f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 139b1eb01cd02d1e75e6b9c3e593f6ff34335e2ca8aOwen Lin @Override 140bd141b5a51c96f6fcaddfa547f0928ce69cf0755Chih-Chung Chang public OrientationManager getOrientationManager() { 141bd141b5a51c96f6fcaddfa547f0928ce69cf0755Chih-Chung Chang return mOrientationManager; 142bd141b5a51c96f6fcaddfa547f0928ce69cf0755Chih-Chung Chang } 143bd141b5a51c96f6fcaddfa547f0928ce69cf0755Chih-Chung Chang 144f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 145f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void setContentView(int resId) { 146f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.setContentView(resId); 147f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView = (GLRootView) findViewById(R.id.gl_root_view); 148f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 149f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 150f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onStorageReady() { 151f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mAlertDialog != null) { 152f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlertDialog.dismiss(); 153f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlertDialog = null; 154f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin unregisterReceiver(mMountReceiver); 155f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 156f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 157f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 158f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 159f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onStart() { 160f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onStart(); 161f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (getExternalCacheDir() == null) { 162f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin OnCancelListener onCancel = new OnCancelListener() { 163f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 164f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onCancel(DialogInterface dialog) { 165f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin finish(); 166f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 167f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }; 168f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin OnClickListener onClick = new OnClickListener() { 169f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 170f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void onClick(DialogInterface dialog, int which) { 171f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin dialog.cancel(); 172f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 173f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin }; 174f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlertDialog = new AlertDialog.Builder(this) 17523b602e709f1551acdb7cf2caaf5b7838b567d15Björn Lundén .setIconAttribute(android.R.attr.alertDialogIcon) 176fd3071dfc28b4caad583c77d7a4d9dad8fb86a3aOwen Lin .setTitle(R.string.no_external_storage_title) 177fd3071dfc28b4caad583c77d7a4d9dad8fb86a3aOwen Lin .setMessage(R.string.no_external_storage) 178f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin .setNegativeButton(android.R.string.cancel, onClick) 179f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin .setOnCancelListener(onCancel) 180f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin .show(); 181f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin registerReceiver(mMountReceiver, mMountFilter); 182f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 183f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 184f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 185f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 186f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onStop() { 187f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onStop(); 188f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (mAlertDialog != null) { 189f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin unregisterReceiver(mMountReceiver); 190f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlertDialog.dismiss(); 191f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mAlertDialog = null; 192f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 193f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 194f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 196f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onResume() { 197f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onResume(); 198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView.lockRenderThread(); 199f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin try { 200f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getStateManager().resume(); 201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getDataManager().resume(); 202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } finally { 203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView.unlockRenderThread(); 204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 205f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView.onResume(); 206bd141b5a51c96f6fcaddfa547f0928ce69cf0755Chih-Chung Chang mOrientationManager.resume(); 207f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 208f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 209f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 210f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onPause() { 211f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin super.onPause(); 212bd141b5a51c96f6fcaddfa547f0928ce69cf0755Chih-Chung Chang mOrientationManager.pause(); 213f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView.onPause(); 214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView.lockRenderThread(); 215f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin try { 216f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getStateManager().pause(); 217f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getDataManager().pause(); 218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } finally { 219f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView.unlockRenderThread(); 220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 221df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Lin clearBitmapPool(MediaItem.getMicroThumbPool()); 222df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Lin clearBitmapPool(MediaItem.getThumbPool()); 223df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Lin 224cafd30f96355ad446943d60cd2595d08423944e2Owen Lin MediaItem.getBytesBufferPool().clear(); 225f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 226f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 227df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Lin private static void clearBitmapPool(BitmapPool pool) { 228df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Lin if (pool != null) pool.clear(); 229df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Lin } 230df4763cf8752fb1babc7244fc2be33ed87d3b072Owen Lin 231f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 2323957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li protected void onDestroy() { 2333957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li super.onDestroy(); 2343957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li mGLRootView.lockRenderThread(); 2353957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li try { 2363957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li getStateManager().destroy(); 2373957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li } finally { 2383957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li mGLRootView.unlockRenderThread(); 2393957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li } 2403957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li } 2413957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li 2423957efd020f2e80d79cd3fed019f2883668a1c9eWu-cheng Li @Override 243f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected void onActivityResult(int requestCode, int resultCode, Intent data) { 244f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView.lockRenderThread(); 245f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin try { 246f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin getStateManager().notifyActivityResult( 247f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin requestCode, resultCode, data); 248f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } finally { 249f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mGLRootView.unlockRenderThread(); 250f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 251f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 252f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 253f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @Override 2542c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang public void onBackPressed() { 2552c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang // send the back event to the top sub-state 2562c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang GLRoot root = getGLRoot(); 2572c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang root.lockRenderThread(); 2582c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang try { 2592c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang getStateManager().onBackPressed(); 2602c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang } finally { 2612c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang root.unlockRenderThread(); 2622c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang } 2632c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang } 2642c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang 2652c6173822a612597c79be41b126367ddfbb5d518Chih-Chung Chang @Override 266f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public GalleryActionBar getGalleryActionBar() { 2678cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen if (mActionBar == null) { 2688cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen mActionBar = new GalleryActionBar(this); 2698cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen } 2708cab3e872dd95e55ba34fdb94269a0c5069e72aeRay Chen return mActionBar; 271f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 2724d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting 273655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen @Override 274655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen public boolean onOptionsItemSelected(MenuItem item) { 275655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen GLRoot root = getGLRoot(); 276655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen root.lockRenderThread(); 277655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen try { 278655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen return getStateManager().itemSelected(item); 279655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen } finally { 280655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen root.unlockRenderThread(); 281655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen } 282655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen } 283655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen 284b1db75c15ef546fef26ee7e34321f3087562a0f7Wu-cheng Li protected void disableToggleStatusBar() { 285b1db75c15ef546fef26ee7e34321f3087562a0f7Wu-cheng Li mDisableToggleStatusBar = true; 286b1db75c15ef546fef26ee7e34321f3087562a0f7Wu-cheng Li } 287b1db75c15ef546fef26ee7e34321f3087562a0f7Wu-cheng Li 2884d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting // Shows status bar in portrait view, hide in landscape view 2894d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting private void toggleStatusBarByOrientation() { 290b1db75c15ef546fef26ee7e34321f3087562a0f7Wu-cheng Li if (mDisableToggleStatusBar) return; 291b1db75c15ef546fef26ee7e34321f3087562a0f7Wu-cheng Li 292fa011a292ea27fd6a885f980596e959ca83b9a4fRay Chen Window win = getWindow(); 293fa011a292ea27fd6a885f980596e959ca83b9a4fRay Chen if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 294fa011a292ea27fd6a885f980596e959ca83b9a4fRay Chen win.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 295fa011a292ea27fd6a885f980596e959ca83b9a4fRay Chen } else { 296fa011a292ea27fd6a885f980596e959ca83b9a4fRay Chen win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 297fa011a292ea27fd6a885f980596e959ca83b9a4fRay Chen } 2984d50f7373a6205e197ffc1b73cdc5ffcbeb79fcaPin Ting } 299616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin 300616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin @Override 301616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin public TransitionStore getTransitionStore() { 302616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin return mTransitionStore; 303616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin } 304f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 305