ActivityState.java revision b21b8e58a604f6c701245d84b141b5b87663192b
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;
2111f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescuimport android.content.ContentResolver;
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;
2811f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescuimport android.provider.Settings;
2911f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescuimport android.provider.Settings.SettingNotFoundException;
308e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandlerimport android.view.Window;
31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.WindowManager;
32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
33b21b8e58a604f6c701245d84b141b5b87663192bOwen Linimport com.actionbarsherlock.app.ActionBar;
34b21b8e58a604f6c701245d84b141b5b87663192bOwen Linimport com.actionbarsherlock.app.SherlockActivity;
35b21b8e58a604f6c701245d84b141b5b87663192bOwen Linimport com.actionbarsherlock.view.Menu;
36b21b8e58a604f6c701245d84b141b5b87663192bOwen Linimport com.actionbarsherlock.view.MenuInflater;
37b21b8e58a604f6c701245d84b141b5b87663192bOwen Linimport com.actionbarsherlock.view.MenuItem;
38915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescuimport com.android.gallery3d.R;
39a9bd72c2efc7f7c26c60083d8f00380e60caf94eRay Chenimport com.android.gallery3d.ui.GLView;
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;
478e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
488e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    private static final int SCREEN_ON_FLAGS = (
498e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler              WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
508e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
518e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
528e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        );
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
54b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    protected AbstractGalleryActivity mActivity;
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected Bundle mData;
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected int mFlags;
57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected ResultEntry mReceivedResults;
59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected ResultEntry mResult;
60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected static class ResultEntry {
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        public int requestCode;
63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        public int resultCode = Activity.RESULT_CANCELED;
64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        public Intent resultData;
65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
6711f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu    protected boolean mHapticsEnabled;
6811f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu    private ContentResolver mContentResolver;
6911f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu
7057cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    private boolean mDestroyed = false;
718e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    private boolean mPlugged = false;
72616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    boolean mIsFinishing = false;
7357cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan
74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected ActivityState() {
75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void setContentPane(GLView content) {
78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mActivity.getGLRoot().setContentPane(content);
79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
81b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    void initialize(AbstractGalleryActivity activity, Bundle data) {
82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mActivity = activity;
83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mData = data;
8411f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu        mContentResolver = activity.getAndroidContext().getContentResolver();
85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public Bundle getData() {
88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return mData;
89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onBackPressed() {
92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mActivity.getStateManager().finishState(this);
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void setStateResult(int resultCode, Intent data) {
96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (mResult == null) return;
97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mResult.resultCode = resultCode;
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mResult.resultData = data;
99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
1018e565703e8d482421714383a8ad40a67929ce2daOwen Lin    protected void onConfigurationChanged(Configuration config) {
1028e565703e8d482421714383a8ad40a67929ce2daOwen Lin    }
1038e565703e8d482421714383a8ad40a67929ce2daOwen Lin
104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onSaveState(Bundle outState) {
105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onStateResult(int requestCode, int resultCode, Intent data) {
108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
110915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected float[] mBackgroundColor;
111915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
112915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected int getBackgroundColorId() {
113915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        return R.color.default_background;
114915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    }
115915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
116915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    protected float[] getBackgroundColor() {
117915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        return mBackgroundColor;
118915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu    }
119915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu
120f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onCreate(Bundle data, Bundle storedState) {
121915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu        mBackgroundColor = GalleryUtils.intColorToFloatARGBArray(
122915c2c5b2c367df71599370613af0924bd7c4887Bobby Georgescu                mActivity.getResources().getColor(getBackgroundColorId()));
123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
124f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
12514d3289b4867c21da93ec4032119c0091bc78c30George Mount    protected void clearStateResult() {
12614d3289b4867c21da93ec4032119c0091bc78c30George Mount    }
12714d3289b4867c21da93ec4032119c0091bc78c30George Mount
1288e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    BroadcastReceiver mPowerIntentReceiver = new BroadcastReceiver() {
1298e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        @Override
1308e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        public void onReceive(Context context, Intent intent) {
1318e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            final String action = intent.getAction();
1328e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
1338e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                boolean plugged = (0 != intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0));
1348e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
1358e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                if (plugged != mPlugged) {
1368e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                    mPlugged = plugged;
1370b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang                    setScreenOnFlags();
1388e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler                }
1398e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            }
1408e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
1418e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    };
1428e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
1430b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang    void setScreenOnFlags() {
1440b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        final Window win = ((Activity) mActivity).getWindow();
1450b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        final WindowManager.LayoutParams params = win.getAttributes();
146afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if ((0 != (mFlags & FLAG_SCREEN_ON_ALWAYS)) ||
147afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang                (mPlugged && 0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED))) {
1488e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            params.flags |= SCREEN_ON_FLAGS;
1498e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        } else {
1508e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            params.flags &= ~SCREEN_ON_FLAGS;
1518e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
1520b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        win.setAttributes(params);
1538e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler    }
1548e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
155f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onPause() {
156afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
157002a3fece284f713537fad4523ee963d257350e9Chih-Chung Chang            ((Activity) mActivity).unregisterReceiver(mPowerIntentReceiver);
158002a3fece284f713537fad4523ee963d257350e9Chih-Chung Chang        }
159f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
160f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
161f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // should only be called by StateManager
162f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    void resume() {
163b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        AbstractGalleryActivity activity = mActivity;
164b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        ActionBar actionBar = ((SherlockActivity) activity).getSupportActionBar();
165f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (actionBar != null) {
166f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if ((mFlags & FLAG_HIDE_ACTION_BAR) != 0) {
167f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                actionBar.hide();
168f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            } else {
169f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                actionBar.show();
170f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
171f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int stateCount = mActivity.getStateManager().getStateCount();
172655f63f04638dfe31045eab1b6b4c39cc2db10dbRay Chen            mActivity.getGalleryActionBar().setDisplayOptions(stateCount > 1, true);
173fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen            // Default behavior, this can be overridden in ActivityState's onResume.
174fe1625c46f8258be4cd5e5e1ba69b584c1fe1a49Ray Chen            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
175f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
176f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
177f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        activity.invalidateOptionsMenu();
178f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
1790b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        setScreenOnFlags();
1808e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
1810b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        boolean lightsOut = ((mFlags & FLAG_HIDE_STATUS_BAR) != 0);
1820b2486cff0c1b951c54325596256b986307f7f3aChih-Chung Chang        mActivity.getGLRoot().setLightsOutMode(lightsOut);
1838e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
184f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        ResultEntry entry = mReceivedResults;
185f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (entry != null) {
186f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            mReceivedResults = null;
187f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            onStateResult(entry.requestCode, entry.resultCode, entry.resultData);
188f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
1898e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler
190afb3d1d8f341620f6b69d47d52b515f53817aa91Yuli Huang        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
1918e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            // we need to know whether the device is plugged in to do this correctly
1928e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            final IntentFilter filter = new IntentFilter();
1938e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            filter.addAction(Intent.ACTION_BATTERY_CHANGED);
1948e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler            activity.registerReceiver(mPowerIntentReceiver, filter);
1958e6fd7cee5467824cd96b4127ccc755c70bd4ea3Daniel Sandler        }
19611f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu
19711f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu        try {
19811f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu            mHapticsEnabled = Settings.System.getInt(mContentResolver,
19911f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu                    Settings.System.HAPTIC_FEEDBACK_ENABLED) != 0;
20011f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu        } catch (SettingNotFoundException e) {
20111f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu            mHapticsEnabled = false;
20211f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu        }
20311f14dc9e1d4d04b7c21b076445f3cb8c173753bBobby Georgescu
204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        onResume();
205616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin
206616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        // the transition store should be cleared after resume;
207616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        mActivity.getTransitionStore().clear();
208f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
209f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
210f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // a subclass of ActivityState should override the method to resume itself
211f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onResume() {
212f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
213f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected boolean onCreateActionBar(Menu menu) {
2156cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        // TODO: we should return false if there is no menu to show
2166cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        //       this is a workaround for a bug in system
2176cf807453fb58ccd4cc513ff187b306c7090e67cOwen Lin        return true;
218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
219f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected boolean onItemSelected(MenuItem item) {
221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return false;
222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
223f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
224f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onDestroy() {
22557cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan        mDestroyed = true;
22657cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    }
22757cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan
22857cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan    boolean isDestroyed() {
22957cbaa1ef40d2215c6400f5ae4af3a09e67abb2dHung-ying Tyan        return mDestroyed;
230f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
231616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin
232616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    public boolean isFinishing() {
233616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin        return mIsFinishing;
234616a70fdb4473d2fbd7b70772a3a82b908aeae1eOwen Lin    }
235b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin
236b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    protected MenuInflater getSupportMenuInflater() {
237b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        return ((SherlockActivity) mActivity).getSupportMenuInflater();
238b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    }
239f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
240