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
192abaaf7caa9a83ba1ea759868aabde7f21387184John Reckimport android.app.ActionBar;
20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.app.Activity;
218e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.BroadcastReceiver;
228e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.Context;
238e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.Intent;
248e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.IntentFilter;
258e565703e8d482421714383a8ad40a67929ce2daOwen Linimport android.content.res.Configuration;
268e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.os.BatteryManager;
27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.os.Bundle;
28bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescuimport android.view.HapticFeedbackConstants;
292abaaf7caa9a83ba1ea759868aabde7f21387184John Reckimport android.view.Menu;
302abaaf7caa9a83ba1ea759868aabde7f21387184John Reckimport android.view.MenuInflater;
312abaaf7caa9a83ba1ea759868aabde7f21387184John Reckimport android.view.MenuItem;
328e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.view.Window;
33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.WindowManager;
34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
35915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescuimport com.android.gallery3d.R;
364831c7494373c360062a7becac820eba3bc39287Bobby Georgescuimport com.android.gallery3d.anim.StateTransitionAnimation;
37a4eae1abb4f2547dfbda84301ee764ce35464881John Reckimport com.android.gallery3d.glrenderer.RawTexture;
38a9bd72c2efc7f7c26c60083d8f00380e60caf94eRay Chenimport com.android.gallery3d.ui.GLView;
395585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescuimport com.android.gallery3d.ui.PreparePageFadeoutTexture;
40915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescuimport com.android.gallery3d.util.GalleryUtils;
41a9bd72c2efc7f7c26c60083d8f00380e60caf94eRay Chen
42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linabstract public class ActivityState {
43d83f5f227315cccfe3c23db90c93b5fd7be20597Yuli Huang    protected static final int FLAG_HIDE_ACTION_BAR = 1;
44d83f5f227315cccfe3c23db90c93b5fd7be20597Yuli Huang    protected static final int FLAG_HIDE_STATUS_BAR = 2;
45afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang    protected static final int FLAG_SCREEN_ON_WHEN_PLUGGED = 4;
46afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang    protected static final int FLAG_SCREEN_ON_ALWAYS = 8;
47efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li    protected static final int FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 16;
48efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li    protected static final int FLAG_SHOW_WHEN_LOCKED = 32;
49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
50b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    protected AbstractGalleryActivity mActivity;
51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected Bundle mData;
52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected int mFlags;
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected ResultEntry mReceivedResults;
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected ResultEntry mResult;
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected static class ResultEntry {
58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        public int requestCode;
59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        public int resultCode = Activity.RESULT_CANCELED;
60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        public Intent resultData;
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
6357cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    private boolean mDestroyed = false;
648e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    private boolean mPlugged = false;
65616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    boolean mIsFinishing = false;
6657cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan
675585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    private static final String KEY_TRANSITION_IN = "transition-in";
685585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu
6926e119cebe732582df086ff56ec564d2989042fdBobby Georgescu    private StateTransitionAnimation.Transition mNextTransition =
7026e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            StateTransitionAnimation.Transition.None;
714831c7494373c360062a7becac820eba3bc39287Bobby Georgescu    private StateTransitionAnimation mIntroAnimation;
725585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    private GLView mContentPane;
735585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu
74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected ActivityState() {
75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void setContentPane(GLView content) {
785585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mContentPane = content;
7926e119cebe732582df086ff56ec564d2989042fdBobby Georgescu        if (mIntroAnimation != null) {
804831c7494373c360062a7becac820eba3bc39287Bobby Georgescu            mContentPane.setIntroAnimation(mIntroAnimation);
814831c7494373c360062a7becac820eba3bc39287Bobby Georgescu            mIntroAnimation = null;
825585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        }
835585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mContentPane.setBackgroundColor(getBackgroundColor());
845585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mActivity.getGLRoot().setContentPane(mContentPane);
85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
87b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    void initialize(AbstractGalleryActivity activity, Bundle data) {
88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mActivity = activity;
89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mData = data;
90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public Bundle getData() {
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return mData;
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onBackPressed() {
97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mActivity.getStateManager().finishState(this);
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void setStateResult(int resultCode, Intent data) {
101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (mResult == null) return;
102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mResult.resultCode = resultCode;
103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mResult.resultData = data;
104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
1068e565703e8d482421714383a8ad40a67929ce2daOwen Lin    protected void onConfigurationChanged(Configuration config) {
1078e565703e8d482421714383a8ad40a67929ce2daOwen Lin    }
1088e565703e8d482421714383a8ad40a67929ce2daOwen Lin
109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onSaveState(Bundle outState) {
110f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
111f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
112f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onStateResult(int requestCode, int resultCode, Intent data) {
113f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
114f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
115915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected float[] mBackgroundColor;
116915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
117915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected int getBackgroundColorId() {
118915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        return R.color.default_background;
119915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    }
120915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
121915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected float[] getBackgroundColor() {
122915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        return mBackgroundColor;
123915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    }
124915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
125f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onCreate(Bundle data, Bundle storedState) {
126915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        mBackgroundColor = GalleryUtils.intColorToFloatARGBArray(
127915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu                mActivity.getResources().getColor(getBackgroundColorId()));
128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
13014d3289b4867c21da93ec4032119c0091bc78c30George Mount    protected void clearStateResult() {
13114d3289b4867c21da93ec4032119c0091bc78c30George Mount    }
13214d3289b4867c21da93ec4032119c0091bc78c30George Mount
1338e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    BroadcastReceiver mPowerIntentReceiver = new BroadcastReceiver() {
1348e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        @Override
1358e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        public void onReceive(Context context, Intent intent) {
1368e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            final String action = intent.getAction();
1378e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
1388e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                boolean plugged = (0 != intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0));
1398e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
1408e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                if (plugged != mPlugged) {
1418e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                    mPlugged = plugged;
142efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li                    setScreenFlags();
1438e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                }
1448e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            }
1458e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
1468e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    };
1478e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
148efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li    private void setScreenFlags() {
149efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        final Window win = mActivity.getWindow();
1500b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        final WindowManager.LayoutParams params = win.getAttributes();
151afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if ((0 != (mFlags & FLAG_SCREEN_ON_ALWAYS)) ||
152afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang                (mPlugged && 0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED))) {
153efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
154efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        } else {
155efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
156efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        }
157efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        if (0 != (mFlags & FLAG_ALLOW_LOCK_WHILE_SCREEN_ON)) {
158efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags |= WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
159efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        } else {
160efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags &= ~WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
161efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        }
162efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        if (0 != (mFlags & FLAG_SHOW_WHEN_LOCKED)) {
163efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
1648e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        } else {
165efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
1668e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
1670b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        win.setAttributes(params);
1688e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    }
1698e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
1704831c7494373c360062a7becac820eba3bc39287Bobby Georgescu    protected void transitionOnNextPause(Class<? extends ActivityState> outgoing,
17126e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            Class<? extends ActivityState> incoming, StateTransitionAnimation.Transition hint) {
172cfa7fde1a336a3200b2ad9091b27ba7bfd8f5c9aBobby Georgescu        if (outgoing == SinglePhotoPage.class && incoming == AlbumPage.class) {
17326e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            mNextTransition = StateTransitionAnimation.Transition.Outgoing;
174cfa7fde1a336a3200b2ad9091b27ba7bfd8f5c9aBobby Georgescu        } else if (outgoing == AlbumPage.class && incoming == SinglePhotoPage.class) {
17526e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            mNextTransition = StateTransitionAnimation.Transition.PhotoIncoming;
1764831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        } else {
1774831c7494373c360062a7becac820eba3bc39287Bobby Georgescu            mNextTransition = hint;
1784831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        }
1795585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    }
1805585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu
181bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescu    protected void performHapticFeedback(int feedbackConstant) {
182bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescu        mActivity.getWindow().getDecorView().performHapticFeedback(feedbackConstant,
183bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescu                HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING);
184bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescu    }
185bcb427870043b12d4a1a454c08a088933d0eaf23Bobby Georgescu
186f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onPause() {
187afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
188002a3fece284f713537fad4523ee963d257350e9Chih-Chung Chang            ((Activity) mActivity).unregisterReceiver(mPowerIntentReceiver);
189002a3fece284f713537fad4523ee963d257350e9Chih-Chung Chang        }
19026e119cebe732582df086ff56ec564d2989042fdBobby Georgescu        if (mNextTransition != StateTransitionAnimation.Transition.None) {
1914831c7494373c360062a7becac820eba3bc39287Bobby Georgescu            mActivity.getTransitionStore().put(KEY_TRANSITION_IN, mNextTransition);
1924831c7494373c360062a7becac820eba3bc39287Bobby Georgescu            PreparePageFadeoutTexture.prepareFadeOutTexture(mActivity, mContentPane);
19326e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            mNextTransition = StateTransitionAnimation.Transition.None;
1945585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        }
195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
196f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
197f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // should only be called by StateManager
198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    void resume() {
199b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        AbstractGalleryActivity activity = mActivity;
2002abaaf7caa9a83ba1ea759868aabde7f21387184John Reck        ActionBar actionBar = activity.getActionBar();
201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (actionBar != null) {
202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if ((mFlags & FLAG_HIDE_ACTION_BAR) != 0) {
203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                actionBar.hide();
204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            } else {
205f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                actionBar.show();
206f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
207f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int stateCount = mActivity.getStateManager().getStateCount();
208655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen            mActivity.getGalleryActionBar().setDisplayOptions(stateCount > 1, true);
209fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen            // Default behavior, this can be overridden in ActivityState's onResume.
210fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
211f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
212f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
213f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        activity.invalidateOptionsMenu();
214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
215efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        setScreenFlags();
2168e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
2170b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        boolean lightsOut = ((mFlags & FLAG_HIDE_STATUS_BAR) != 0);
2180b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        mActivity.getGLRoot().setLightsOutMode(lightsOut);
2198e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        ResultEntry entry = mReceivedResults;
221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (entry != null) {
222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            mReceivedResults = null;
223f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            onStateResult(entry.requestCode, entry.resultCode, entry.resultData);
224f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
2258e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
226afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
2278e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            // we need to know whether the device is plugged in to do this correctly
2288e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            final IntentFilter filter = new IntentFilter();
2298e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            filter.addAction(Intent.ACTION_BATTERY_CHANGED);
2308e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            activity.registerReceiver(mPowerIntentReceiver, filter);
2318e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
23211f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu
233f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        onResume();
234616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin
235616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        // the transition store should be cleared after resume;
236616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        mActivity.getTransitionStore().clear();
237f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
238f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
239f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // a subclass of ActivityState should override the method to resume itself
240f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onResume() {
2414831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        RawTexture fade = mActivity.getTransitionStore().get(
2425585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu                PreparePageFadeoutTexture.KEY_FADE_TEXTURE);
2434831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        mNextTransition = mActivity.getTransitionStore().get(
24426e119cebe732582df086ff56ec564d2989042fdBobby Georgescu                KEY_TRANSITION_IN, StateTransitionAnimation.Transition.None);
24526e119cebe732582df086ff56ec564d2989042fdBobby Georgescu        if (mNextTransition != StateTransitionAnimation.Transition.None) {
24626e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            mIntroAnimation = new StateTransitionAnimation(mNextTransition, fade);
24726e119cebe732582df086ff56ec564d2989042fdBobby Georgescu            mNextTransition = StateTransitionAnimation.Transition.None;
2484831c7494373c360062a7becac820eba3bc39287Bobby Georgescu        }
249f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
250f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
251f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected boolean onCreateActionBar(Menu menu) {
2526cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        // TODO: we should return false if there is no menu to show
2536cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        //       this is a workaround for a bug in system
2546cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        return true;
255f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
256f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
257f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected boolean onItemSelected(MenuItem item) {
258f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return false;
259f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
260f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
261f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onDestroy() {
26257cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan        mDestroyed = true;
26357cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    }
26457cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan
26557cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    boolean isDestroyed() {
26657cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan        return mDestroyed;
267f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
268616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin
269616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    public boolean isFinishing() {
270616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        return mIsFinishing;
271616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    }
272b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin
273b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    protected MenuInflater getSupportMenuInflater() {
2742abaaf7caa9a83ba1ea759868aabde7f21387184John Reck        return mActivity.getMenuInflater();
275b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    }
276f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
277