Gallery.java revision f9a0a4306d589b4a4e20554fed512a603426bfa1
1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/*
2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2009 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
19f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.R;
20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.common.Utils;
21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.DataManager;
22f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.MediaItem;
23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.MediaSet;
24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.data.Path;
25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.ui.GLRoot;
26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport com.android.gallery3d.util.GalleryUtils;
27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.app.ActionBar;
29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.ContentResolver;
30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.Intent;
31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.net.Uri;
32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.os.Bundle;
33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.Menu;
34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.MenuItem;
35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.Window;
36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.widget.Toast;
37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic final class Gallery extends AbstractGalleryActivity {
39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public static final String EXTRA_SLIDESHOW = "slideshow";
40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public static final String EXTRA_CROP = "crop";
41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public static final String ACTION_REVIEW = "com.android.camera.action.REVIEW";
43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public static final String KEY_GET_CONTENT = "get-content";
44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public static final String KEY_GET_ALBUM = "get-album";
45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public static final String KEY_TYPE_BITS = "type-bits";
46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public static final String KEY_MEDIA_TYPES = "mediaTypes";
47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String TAG = "Gallery";
49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private GalleryActionBar mActionBar;
50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onCreate(Bundle savedInstanceState) {
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onCreate(savedInstanceState);
54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        requestWindowFeature(Window.FEATURE_ACTION_BAR);
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        setContentView(R.layout.main);
59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mActionBar = new GalleryActionBar(this);
60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (savedInstanceState != null) {
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            getStateManager().restoreFromState(savedInstanceState);
63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } else {
64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            initializeByIntent();
65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private void initializeByIntent() {
69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Intent intent = getIntent();
70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        String action = intent.getAction();
71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (Intent.ACTION_GET_CONTENT.equalsIgnoreCase(action)) {
73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            startGetContent(intent);
74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } else if (Intent.ACTION_PICK.equalsIgnoreCase(action)) {
75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            // We do NOT really support the PICK intent. Handle it as
76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            // the GET_CONTENT. However, we need to translate the type
77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            // in the intent here.
78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Log.w(TAG, "action PICK is not supported");
79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            String type = Utils.ensureNotNull(intent.getType());
80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if (type.startsWith("vnd.android.cursor.dir/")) {
81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                if (type.endsWith("/image")) intent.setType("image/*");
82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                if (type.endsWith("/video")) intent.setType("video/*");
83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            startGetContent(intent);
85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } else if (Intent.ACTION_VIEW.equalsIgnoreCase(action)
86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                || ACTION_REVIEW.equalsIgnoreCase(action)){
87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            startViewAction(intent);
88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } else {
89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            startDefaultPage();
90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void startDefaultPage() {
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Bundle data = new Bundle();
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        data.putString(AlbumSetPage.KEY_MEDIA_PATH,
96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                getDataManager().getTopSetPath(DataManager.INCLUDE_ALL));
97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        getStateManager().startState(AlbumSetPage.class, data);
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private void startGetContent(Intent intent) {
101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Bundle data = intent.getExtras() != null
102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                ? new Bundle(intent.getExtras())
103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                : new Bundle();
104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        data.putBoolean(KEY_GET_CONTENT, true);
105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        int typeBits = GalleryUtils.determineTypeBits(this, intent);
106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        data.putInt(KEY_TYPE_BITS, typeBits);
107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        data.putString(AlbumSetPage.KEY_MEDIA_PATH,
108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                getDataManager().getTopSetPath(typeBits));
109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        getStateManager().startState(AlbumSetPage.class, data);
110f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
111f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
112f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private String getContentType(Intent intent) {
113f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        String type = intent.getType();
114f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (type != null) return type;
115f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
116f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Uri uri = intent.getData();
117f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        try {
118f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            return getContentResolver().getType(uri);
119f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } catch (Throwable t) {
120f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Log.w(TAG, "get type fail", t);
121f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            return null;
122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
124f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
125f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private void startViewAction(Intent intent) {
126f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Boolean slideshow = intent.getBooleanExtra(EXTRA_SLIDESHOW, false);
127f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (slideshow) {
128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            getActionBar().hide();
129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            DataManager manager = getDataManager();
130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Path path = manager.findPathByUri(intent.getData());
131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if (path == null || manager.getMediaObject(path)
132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    instanceof MediaItem) {
133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                path = Path.fromString(
134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                        manager.getTopSetPath(DataManager.INCLUDE_IMAGE));
135f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Bundle data = new Bundle();
137f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            data.putString(SlideshowPage.KEY_SET_PATH, path.toString());
138f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            data.putBoolean(SlideshowPage.KEY_RANDOM_ORDER, true);
139f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            data.putBoolean(SlideshowPage.KEY_REPEAT, true);
140f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            getStateManager().startState(SlideshowPage.class, data);
141f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } else {
142f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Bundle data = new Bundle();
143f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            DataManager dm = getDataManager();
144f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Uri uri = intent.getData();
145f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            String contentType = getContentType(intent);
146f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if (contentType == null) {
147f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                Toast.makeText(this,
148f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                        R.string.no_such_item, Toast.LENGTH_LONG).show();
149f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                finish();
150f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                return;
151f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
152f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if (contentType.startsWith(
153f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    ContentResolver.CURSOR_DIR_BASE_TYPE)) {
154f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                int mediaType = intent.getIntExtra(KEY_MEDIA_TYPES, 0);
155f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                if (mediaType != 0) {
156f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    uri = uri.buildUpon().appendQueryParameter(
157f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                            KEY_MEDIA_TYPES, String.valueOf(mediaType))
158f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                            .build();
159f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                }
160f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                Path albumPath = dm.findPathByUri(uri);
161f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                if (albumPath != null) {
162f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    MediaSet mediaSet = (MediaSet) dm.getMediaObject(albumPath);
163f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    data.putString(AlbumPage.KEY_MEDIA_PATH, albumPath.toString());
164f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    getStateManager().startState(AlbumPage.class, data);
165f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                } else {
166f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    startDefaultPage();
167f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                }
168f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            } else {
169f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                Path itemPath = dm.findPathByUri(uri);
170f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                Path albumPath = dm.getDefaultSetOf(itemPath);
171f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                if (albumPath != null) {
172f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    data.putString(PhotoPage.KEY_MEDIA_SET_PATH,
173f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                            albumPath.toString());
174f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                }
175f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                data.putString(PhotoPage.KEY_MEDIA_ITEM_PATH, itemPath.toString());
176f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                getStateManager().startState(PhotoPage.class, data);
177f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
178f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
179f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
180f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
181f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
182f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public boolean onCreateOptionsMenu(Menu menu) {
183f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onCreateOptionsMenu(menu);
184f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return getStateManager().createOptionsMenu(menu);
185f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
186f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
187f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
188f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public boolean onOptionsItemSelected(MenuItem item) {
189f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        GLRoot root = getGLRoot();
190f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        root.lockRenderThread();
191f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        try {
192f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            return getStateManager().itemSelected(item);
193f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } finally {
194f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            root.unlockRenderThread();
195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
196f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
197f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
199f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onBackPressed() {
200f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        // send the back event to the top sub-state
201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        GLRoot root = getGLRoot();
202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        root.lockRenderThread();
203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        try {
204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            getStateManager().onBackPressed();
205f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } finally {
206f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            root.unlockRenderThread();
207f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
208f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
209f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
210f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
211f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onDestroy() {
212f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onDestroy();
213f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        GLRoot root = getGLRoot();
214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        root.lockRenderThread();
215f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        try {
216f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            getStateManager().destroy();
217f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } finally {
218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            root.unlockRenderThread();
219f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
223f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onResume() {
224f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Utils.assertTrue(getStateManager().getStateCount() > 0);
225f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onResume();
226f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
227f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
228f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
229f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public GalleryActionBar getGalleryActionBar() {
230f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return mActionBar;
231f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
232f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
233