ActivityState.java revision bcb427870043b12d4a1a454c08a088933d0eaf23
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
19f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.app.Activity;
208e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.BroadcastReceiver;
218e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.Context;
228e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.Intent;
238e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.IntentFilter;
248e565703e8d482421714383a8ad40a67929ce2daOwen Linimport android.content.res.Configuration;
258e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.os.BatteryManager;
26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.os.Bundle;
27bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescuimport android.view.HapticFeedbackConstants;
288e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.view.Window;
29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.WindowManager;
30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
31372152961edd8feada0ae6478c91ba6b2565191dJohn Reckimport com.actionbarsherlock.app.ActionBar;
32372152961edd8feada0ae6478c91ba6b2565191dJohn Reckimport com.actionbarsherlock.app.SherlockActivity;
33372152961edd8feada0ae6478c91ba6b2565191dJohn Reckimport com.actionbarsherlock.view.Menu;
34372152961edd8feada0ae6478c91ba6b2565191dJohn Reckimport com.actionbarsherlock.view.MenuInflater;
35372152961edd8feada0ae6478c91ba6b2565191dJohn Reckimport com.actionbarsherlock.view.MenuItem;
36915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescuimport com.android.gallery3d.R;
374831c7494373c360062a7becac820eba3bc39287Bobby Georgescuimport com.android.gallery3d.anim.StateTransitionAnimation;
38a9bd72c2efc7f7c26c60083d8f00380e60caf94eRay Chenimport com.android.gallery3d.ui.GLView;
395585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescuimport com.android.gallery3d.ui.PreparePageFadeoutTexture;
405585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescuimport com.android.gallery3d.ui.RawTexture;
41915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescuimport com.android.gallery3d.util.GalleryUtils;
42a9bd72c2efc7f7c26c60083d8f00380e60caf94eRay Chen
43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linabstract public class ActivityState {
44d83f5f227315cccfe3c23db90c93b5fd7be20597Yuli Huang    protected static final int FLAG_HIDE_ACTION_BAR = 1;
45d83f5f227315cccfe3c23db90c93b5fd7be20597Yuli Huang    protected static final int FLAG_HIDE_STATUS_BAR = 2;
46afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang    protected static final int FLAG_SCREEN_ON_WHEN_PLUGGED = 4;
47afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang    protected static final int FLAG_SCREEN_ON_ALWAYS = 8;
48efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li    protected static final int FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 16;
49efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li    protected static final int FLAG_SHOW_WHEN_LOCKED = 32;
50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
51b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    protected AbstractGalleryActivity mActivity;
52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected Bundle mData;
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected int mFlags;
54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected ResultEntry mReceivedResults;
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected ResultEntry mResult;
57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected static class ResultEntry {
59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        public int requestCode;
60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        public int resultCode = Activity.RESULT_CANCELED;
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        public Intent resultData;
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
6457cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    private boolean mDestroyed = false;
658e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    private boolean mPlugged = false;
66616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    boolean mIsFinishing = false;
6757cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan
685585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    private static final String KEY_TRANSITION_IN = "transition-in";
695585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu
7026e119cebe732582df086ff56ec564d2989042fdBobby Georgescu    private StateTransitionAnimation.Transition mNextTransition =
7126e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            StateTransitionAnimation.Transition.None;
724831c7494373c360062a7becac820eba3bc39287Bobby Georgescu    private StateTransitionAnimation mIntroAnimation;
735585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    private GLView mContentPane;
745585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu
75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected ActivityState() {
76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void setContentPane(GLView content) {
795585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mContentPane = content;
8026e119cebe732582df086ff56ec564d2989042fdBobby Georgescu        if (mIntroAnimation != null) {
814831c7494373c360062a7becac820eba3bc39287Bobby Georgescu            mContentPane.setIntroAnimation(mIntroAnimation);
824831c7494373c360062a7becac820eba3bc39287Bobby Georgescu            mIntroAnimation = null;
835585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        }
845585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mContentPane.setBackgroundColor(getBackgroundColor());
855585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mActivity.getGLRoot().setContentPane(mContentPane);
86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
88b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    void initialize(AbstractGalleryActivity activity, Bundle data) {
89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mActivity = activity;
90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mData = data;
91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public Bundle getData() {
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return mData;
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onBackPressed() {
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mActivity.getStateManager().finishState(this);
99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void setStateResult(int resultCode, Intent data) {
102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (mResult == null) return;
103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mResult.resultCode = resultCode;
104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mResult.resultData = data;
105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
1078e565703e8d482421714383a8ad40a67929ce2daOwen Lin    protected void onConfigurationChanged(Configuration config) {
1088e565703e8d482421714383a8ad40a67929ce2daOwen Lin    }
1098e565703e8d482421714383a8ad40a67929ce2daOwen Lin
110f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onSaveState(Bundle outState) {
111f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
112f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
113f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onStateResult(int requestCode, int resultCode, Intent data) {
114f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
115f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
116915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected float[] mBackgroundColor;
117915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
118915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected int getBackgroundColorId() {
119915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        return R.color.default_background;
120915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    }
121915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
122915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected float[] getBackgroundColor() {
123915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        return mBackgroundColor;
124915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    }
125915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
126f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onCreate(Bundle data, Bundle storedState) {
127915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        mBackgroundColor = GalleryUtils.intColorToFloatARGBArray(
128915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu                mActivity.getResources().getColor(getBackgroundColorId()));
129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
13114d3289b4867c21da93ec4032119c0091bc78c30George Mount    protected void clearStateResult() {
13214d3289b4867c21da93ec4032119c0091bc78c30George Mount    }
13314d3289b4867c21da93ec4032119c0091bc78c30George Mount
1348e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    BroadcastReceiver mPowerIntentReceiver = new BroadcastReceiver() {
1358e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        @Override
1368e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        public void onReceive(Context context, Intent intent) {
1378e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            final String action = intent.getAction();
1388e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
1398e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                boolean plugged = (0 != intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0));
1408e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
1418e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                if (plugged != mPlugged) {
1428e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                    mPlugged = plugged;
143efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li                    setScreenFlags();
1448e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                }
1458e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            }
1468e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
1478e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    };
1488e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
149efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li    private void setScreenFlags() {
150efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        final Window win = mActivity.getWindow();
1510b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        final WindowManager.LayoutParams params = win.getAttributes();
152afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if ((0 != (mFlags & FLAG_SCREEN_ON_ALWAYS)) ||
153afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang                (mPlugged && 0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED))) {
154efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
155efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        } else {
156efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
157efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        }
158efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        if (0 != (mFlags & FLAG_ALLOW_LOCK_WHILE_SCREEN_ON)) {
159efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags |= WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
160efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        } else {
161efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags &= ~WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
162efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        }
163efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        if (0 != (mFlags & FLAG_SHOW_WHEN_LOCKED)) {
164efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
1658e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        } else {
166efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
1678e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
1680b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        win.setAttributes(params);
1698e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    }
1708e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
1714831c7494373c360062a7becac820eba3bc39287Bobby Georgescu    protected void transitionOnNextPause(Class<? extends ActivityState> outgoing,
17226e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            Class<? extends ActivityState> incoming, StateTransitionAnimation.Transition hint) {
1734831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        if (outgoing == PhotoPage.class && incoming == AlbumPage.class) {
17426e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            mNextTransition = StateTransitionAnimation.Transition.Outgoing;
1754831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        } else if (outgoing == AlbumPage.class && incoming == PhotoPage.class) {
17626e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            mNextTransition = StateTransitionAnimation.Transition.PhotoIncoming;
1774831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        } else {
1784831c7494373c360062a7becac820eba3bc39287Bobby Georgescu            mNextTransition = hint;
1794831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        }
1805585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    }
1815585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu
182bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescu    protected void performHapticFeedback(int feedbackConstant) {
183bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescu        mActivity.getWindow().getDecorView().performHapticFeedback(feedbackConstant,
184bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescu                HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
185bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescu    }
186bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescu
187f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onPause() {
188afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
189002a3fece284f713537fad4523ee963d257350e9Chih-Chung Chang            ((Activity) mActivity).unregisterReceiver(mPowerIntentReceiver);
190002a3fece284f713537fad4523ee963d257350e9Chih-Chung Chang        }
19126e119cebe732582df086ff56ec564d2989042fdBobby Georgescu        if (mNextTransition != StateTransitionAnimation.Transition.None) {
1924831c7494373c360062a7becac820eba3bc39287Bobby Georgescu            mActivity.getTransitionStore().put(KEY_TRANSITION_IN, mNextTransition);
1934831c7494373c360062a7becac820eba3bc39287Bobby Georgescu            PreparePageFadeoutTexture.prepareFadeOutTexture(mActivity, mContentPane);
19426e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            mNextTransition = StateTransitionAnimation.Transition.None;
1955585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        }
196f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
197f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // should only be called by StateManager
199f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    void resume() {
200b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        AbstractGalleryActivity activity = mActivity;
201372152961edd8feada0ae6478c91ba6b2565191dJohn Reck        ActionBar actionBar = ((SherlockActivity) activity).getSupportActionBar();
202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (actionBar != null) {
203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if ((mFlags & FLAG_HIDE_ACTION_BAR) != 0) {
204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                actionBar.hide();
205f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            } else {
206f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                actionBar.show();
207f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
208f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int stateCount = mActivity.getStateManager().getStateCount();
209655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen            mActivity.getGalleryActionBar().setDisplayOptions(stateCount > 1, true);
210fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen            // Default behavior, this can be overridden in ActivityState's onResume.
211fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
212f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
213f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        activity.invalidateOptionsMenu();
215f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
216efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        setScreenFlags();
2178e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
2180b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        boolean lightsOut = ((mFlags & FLAG_HIDE_STATUS_BAR) != 0);
2190b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        mActivity.getGLRoot().setLightsOutMode(lightsOut);
2208e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        ResultEntry entry = mReceivedResults;
222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (entry != null) {
223f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            mReceivedResults = null;
224f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            onStateResult(entry.requestCode, entry.resultCode, entry.resultData);
225f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
2268e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
227afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
2288e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            // we need to know whether the device is plugged in to do this correctly
2298e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            final IntentFilter filter = new IntentFilter();
2308e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            filter.addAction(Intent.ACTION_BATTERY_CHANGED);
2318e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            activity.registerReceiver(mPowerIntentReceiver, filter);
2328e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
23311f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu
234f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        onResume();
235616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin
236616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        // the transition store should be cleared after resume;
237616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        mActivity.getTransitionStore().clear();
238f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
239f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
240f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // a subclass of ActivityState should override the method to resume itself
241f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onResume() {
2424831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        RawTexture fade = mActivity.getTransitionStore().get(
2435585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu                PreparePageFadeoutTexture.KEY_FADE_TEXTURE);
2444831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        mNextTransition = mActivity.getTransitionStore().get(
24526e119cebe732582df086ff56ec564d2989042fdBobby Georgescu                KEY_TRANSITION_IN, StateTransitionAnimation.Transition.None);
24626e119cebe732582df086ff56ec564d2989042fdBobby Georgescu        if (mNextTransition != StateTransitionAnimation.Transition.None) {
24726e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            mIntroAnimation = new StateTransitionAnimation(mNextTransition, fade);
24826e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            mNextTransition = StateTransitionAnimation.Transition.None;
2494831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        }
250f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
251f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
252f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected boolean onCreateActionBar(Menu menu) {
2536cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        // TODO: we should return false if there is no menu to show
2546cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        //       this is a workaround for a bug in system
2556cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        return true;
256f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
257f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
258f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected boolean onItemSelected(MenuItem item) {
259f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return false;
260f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
261f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
262f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onDestroy() {
26357cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan        mDestroyed = true;
26457cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    }
26557cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan
26657cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    boolean isDestroyed() {
26757cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan        return mDestroyed;
268f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
269616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin
270616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    public boolean isFinishing() {
271616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        return mIsFinishing;
272616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    }
273b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin
274b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    protected MenuInflater getSupportMenuInflater() {
275372152961edd8feada0ae6478c91ba6b2565191dJohn Reck        return ((SherlockActivity) mActivity).getSupportMenuInflater();
276b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    }
277f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
278