ActivityState.java revision 5585826e68c62c3719fb346d40fd1999438c6c6b
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
191336062985c9824d7fd796b1cebd5eaa8e4163caOwen Linimport android.app.ActionBar;
20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.app.Activity;
218e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.BroadcastReceiver;
2211f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescuimport android.content.ContentResolver;
238e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.Context;
248e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.Intent;
258e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.content.IntentFilter;
268e565703e8d482421714383a8ad40a67929ce2daOwen Linimport android.content.res.Configuration;
278e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.os.BatteryManager;
28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.os.Bundle;
2911f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescuimport android.provider.Settings;
3011f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescuimport android.provider.Settings.SettingNotFoundException;
311336062985c9824d7fd796b1cebd5eaa8e4163caOwen Linimport android.view.Menu;
321336062985c9824d7fd796b1cebd5eaa8e4163caOwen Linimport android.view.MenuInflater;
331336062985c9824d7fd796b1cebd5eaa8e4163caOwen Linimport android.view.MenuItem;
348e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.view.Window;
35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.WindowManager;
36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
37915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescuimport com.android.gallery3d.R;
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
6411f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu    protected boolean mHapticsEnabled;
6511f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu    private ContentResolver mContentResolver;
6611f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu
6757cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    private boolean mDestroyed = false;
688e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    private boolean mPlugged = false;
69616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    boolean mIsFinishing = false;
7057cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan
715585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    private static final String KEY_TRANSITION_IN = "transition-in";
725585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu
735585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    private RawTexture mFadeOutTexture;
745585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    private GLView mContentPane;
755585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    private boolean mWantFadeOut = false;
765585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    private boolean mTransitionIn;
775585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu
78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected ActivityState() {
79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void setContentPane(GLView content) {
825585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mContentPane = content;
835585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        if (mTransitionIn) {
845585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu            mContentPane.setFadeOutTexture(mFadeOutTexture);
855585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu            mFadeOutTexture = null;
865585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        }
875585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mContentPane.setBackgroundColor(getBackgroundColor());
885585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mActivity.getGLRoot().setContentPane(mContentPane);
89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
91b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    void initialize(AbstractGalleryActivity activity, Bundle data) {
92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mActivity = activity;
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mData = data;
9411f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu        mContentResolver = activity.getAndroidContext().getContentResolver();
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public Bundle getData() {
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return mData;
99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onBackPressed() {
1025585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        if (mActivity.getStateManager().getStateCount() > 1) {
1035585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu            fadeOutOnNextPause();
1045585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        }
105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mActivity.getStateManager().finishState(this);
106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void setStateResult(int resultCode, Intent data) {
109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (mResult == null) return;
110f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mResult.resultCode = resultCode;
111f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mResult.resultData = data;
112f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
113f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
1148e565703e8d482421714383a8ad40a67929ce2daOwen Lin    protected void onConfigurationChanged(Configuration config) {
1158e565703e8d482421714383a8ad40a67929ce2daOwen Lin    }
1168e565703e8d482421714383a8ad40a67929ce2daOwen Lin
117f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onSaveState(Bundle outState) {
118f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
119f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
120f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onStateResult(int requestCode, int resultCode, Intent data) {
121f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
123915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected float[] mBackgroundColor;
124915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
125915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected int getBackgroundColorId() {
126915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        return R.color.default_background;
127915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    }
128915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
129915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected float[] getBackgroundColor() {
130915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        return mBackgroundColor;
131915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    }
132915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onCreate(Bundle data, Bundle storedState) {
134915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        mBackgroundColor = GalleryUtils.intColorToFloatARGBArray(
135915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu                mActivity.getResources().getColor(getBackgroundColorId()));
136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
137f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
13814d3289b4867c21da93ec4032119c0091bc78c30George Mount    protected void clearStateResult() {
13914d3289b4867c21da93ec4032119c0091bc78c30George Mount    }
14014d3289b4867c21da93ec4032119c0091bc78c30George Mount
1418e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    BroadcastReceiver mPowerIntentReceiver = new BroadcastReceiver() {
1428e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        @Override
1438e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        public void onReceive(Context context, Intent intent) {
1448e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            final String action = intent.getAction();
1458e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
1468e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                boolean plugged = (0 != intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0));
1478e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
1488e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                if (plugged != mPlugged) {
1498e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                    mPlugged = plugged;
150efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li                    setScreenFlags();
1518e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                }
1528e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            }
1538e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
1548e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    };
1558e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
156efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li    private void setScreenFlags() {
157efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        final Window win = mActivity.getWindow();
1580b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        final WindowManager.LayoutParams params = win.getAttributes();
159afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if ((0 != (mFlags & FLAG_SCREEN_ON_ALWAYS)) ||
160afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang                (mPlugged && 0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED))) {
161efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
162efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        } else {
163efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags &= ~WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
164efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        }
165efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        if (0 != (mFlags & FLAG_ALLOW_LOCK_WHILE_SCREEN_ON)) {
166efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags |= WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
167efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        } else {
168efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags &= ~WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON;
169efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        }
170efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        if (0 != (mFlags & FLAG_SHOW_WHEN_LOCKED)) {
171efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
1728e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        } else {
173efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li            params.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
1748e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
1750b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        win.setAttributes(params);
1768e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    }
1778e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
1785585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    protected void fadeOutOnNextPause() {
1795585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mWantFadeOut = true;
1805585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu    }
1815585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu
182f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onPause() {
183afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
184002a3fece284f713537fad4523ee963d257350e9Chih-Chung Chang            ((Activity) mActivity).unregisterReceiver(mPowerIntentReceiver);
185002a3fece284f713537fad4523ee963d257350e9Chih-Chung Chang        }
1865585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        if (mWantFadeOut) {
1875585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu            mWantFadeOut = false;
1885585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu            mActivity.getTransitionStore().put(KEY_TRANSITION_IN, true);
1895585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu            PreparePageFadeoutTexture.prepareFadeOutTexture(mActivity, mContentPane);
1905585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        }
191f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
192f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
193f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // should only be called by StateManager
194f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    void resume() {
195b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        AbstractGalleryActivity activity = mActivity;
1961336062985c9824d7fd796b1cebd5eaa8e4163caOwen Lin        ActionBar actionBar = activity.getActionBar();
197f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (actionBar != null) {
198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if ((mFlags & FLAG_HIDE_ACTION_BAR) != 0) {
199f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                actionBar.hide();
200f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            } else {
201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                actionBar.show();
202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int stateCount = mActivity.getStateManager().getStateCount();
204655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen            mActivity.getGalleryActionBar().setDisplayOptions(stateCount > 1, true);
205fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen            // Default behavior, this can be overridden in ActivityState's onResume.
206fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
207f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
208f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
209f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        activity.invalidateOptionsMenu();
210f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
211efd480e85dc5bd0d2ca0ac82d03e141212388830Wu-cheng Li        setScreenFlags();
2128e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
2130b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        boolean lightsOut = ((mFlags & FLAG_HIDE_STATUS_BAR) != 0);
2140b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        mActivity.getGLRoot().setLightsOutMode(lightsOut);
2158e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
216f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        ResultEntry entry = mReceivedResults;
217f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (entry != null) {
218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            mReceivedResults = null;
219f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            onStateResult(entry.requestCode, entry.resultCode, entry.resultData);
220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
2218e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
222afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
2238e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            // we need to know whether the device is plugged in to do this correctly
2248e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            final IntentFilter filter = new IntentFilter();
2258e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            filter.addAction(Intent.ACTION_BATTERY_CHANGED);
2268e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            activity.registerReceiver(mPowerIntentReceiver, filter);
2278e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
22811f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu
22911f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu        try {
23011f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu            mHapticsEnabled = Settings.System.getInt(mContentResolver,
23111f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu                    Settings.System.HAPTIC_FEEDBACK_ENABLED) != 0;
23211f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu        } catch (SettingNotFoundException e) {
23311f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu            mHapticsEnabled = false;
23411f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu        }
23511f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu
236f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        onResume();
237616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin
238616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        // the transition store should be cleared after resume;
239616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        mActivity.getTransitionStore().clear();
240f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
241f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
242f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // a subclass of ActivityState should override the method to resume itself
243f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onResume() {
2445585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mFadeOutTexture = mActivity.getTransitionStore().get(
2455585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu                PreparePageFadeoutTexture.KEY_FADE_TEXTURE);
2465585826e68c62c3719fb346d40fd1999438c6c6bBobby Georgescu        mTransitionIn = mActivity.getTransitionStore().get(KEY_TRANSITION_IN, false);
247f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
248f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
249f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected boolean onCreateActionBar(Menu menu) {
2506cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        // TODO: we should return false if there is no menu to show
2516cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        //       this is a workaround for a bug in system
2526cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        return true;
253f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
254f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
255f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected boolean onItemSelected(MenuItem item) {
256f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return false;
257f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
258f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
259f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onDestroy() {
26057cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan        mDestroyed = true;
26157cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    }
26257cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan
26357cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    boolean isDestroyed() {
26457cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan        return mDestroyed;
265f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
266616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin
267616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    public boolean isFinishing() {
268616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        return mIsFinishing;
269616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    }
270b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin
271b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    protected MenuInflater getSupportMenuInflater() {
2721336062985c9824d7fd796b1cebd5eaa8e4163caOwen Lin        return mActivity.getMenuInflater();
273b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    }
274f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
275