MovieActivity.java revision fb5571987f2555b04731b6f3e1c479efc16d542a
1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/*
2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2007 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
197a5e1e771ae58241f3a2be36f23025f282032261Owen Linimport android.annotation.TargetApi;
20dcb265c9d08029bbb8fd77d3514482d10db53a3cRay Chenimport android.app.ActionBar;
21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.app.Activity;
224ba06f02e9182160ce155871cbd088919b0ac0c6Pin Tingimport android.content.AsyncQueryHandler;
23be055bc0318828029a4bda0e31e9d8e3ce17ca4bOwen Linimport android.content.ContentResolver;
24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.Intent;
25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.pm.ActivityInfo;
26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.database.Cursor;
277b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chenimport android.graphics.Bitmap;
287b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chenimport android.graphics.drawable.BitmapDrawable;
29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.media.AudioManager;
30e6e4beb069778fafd053552287e36304df5626ebRay Chenimport android.net.Uri;
317a5e1e771ae58241f3a2be36f23025f282032261Owen Linimport android.os.Build;
32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.os.Bundle;
33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.provider.MediaStore;
344ba06f02e9182160ce155871cbd088919b0ac0c6Pin Tingimport android.provider.OpenableColumns;
35fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Changimport android.view.KeyEvent;
36e6e4beb069778fafd053552287e36304df5626ebRay Chenimport android.view.Menu;
37bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Changimport android.view.MenuItem;
38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.View;
39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.Window;
40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.WindowManager;
41e6e4beb069778fafd053552287e36304df5626ebRay Chenimport android.widget.ShareActionProvider;
42e6e4beb069778fafd053552287e36304df5626ebRay Chen
43e6e4beb069778fafd053552287e36304df5626ebRay Chenimport com.android.gallery3d.R;
447a5e1e771ae58241f3a2be36f23025f282032261Owen Linimport com.android.gallery3d.common.ApiHelper;
454ba06f02e9182160ce155871cbd088919b0ac0c6Pin Tingimport com.android.gallery3d.common.Utils;
46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/**
48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * This activity plays a video from a specified URI.
497b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen *
507b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen * The client of this activity can pass a logo bitmap in the intent (KEY_LOGO_BITMAP)
517b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen * to set the action bar logo so the playback process looks more seamlessly integrated with
527b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen * the original activity.
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */
54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class MovieActivity extends Activity {
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @SuppressWarnings("unused")
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String TAG = "MovieActivity";
57a3871050845b4921379add2b126add3cfbab1109Ray Chen    public static final String KEY_LOGO_BITMAP = "logo-bitmap";
58a3871050845b4921379add2b126add3cfbab1109Ray Chen    public static final String KEY_TREAT_UP_AS_BACK = "treat-up-as-back";
59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private MoviePlayer mPlayer;
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private boolean mFinishOnCompletion;
62e6e4beb069778fafd053552287e36304df5626ebRay Chen    private Uri mUri;
63a3871050845b4921379add2b126add3cfbab1109Ray Chen    private boolean mTreatUpAsBack;
64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
657a5e1e771ae58241f3a2be36f23025f282032261Owen Lin    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
667a5e1e771ae58241f3a2be36f23025f282032261Owen Lin    private void setSystemUiVisibility(View rootView) {
677a5e1e771ae58241f3a2be36f23025f282032261Owen Lin        if (ApiHelper.HAS_VIEW_SYSTEM_UI_FLAG_LAYOUT_STABLE) {
687a5e1e771ae58241f3a2be36f23025f282032261Owen Lin            rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
697a5e1e771ae58241f3a2be36f23025f282032261Owen Lin                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
707a5e1e771ae58241f3a2be36f23025f282032261Owen Lin                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
717a5e1e771ae58241f3a2be36f23025f282032261Owen Lin        }
727a5e1e771ae58241f3a2be36f23025f282032261Owen Lin    }
737a5e1e771ae58241f3a2be36f23025f282032261Owen Lin
74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onCreate(Bundle savedInstanceState) {
76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onCreate(savedInstanceState);
77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        requestWindowFeature(Window.FEATURE_ACTION_BAR);
79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        setContentView(R.layout.movie_view);
82fb55994c78d7b6af919d45ab015f5dc0a8665ac8Chih-Chung Chang        View rootView = findViewById(R.id.movie_view_root);
837a5e1e771ae58241f3a2be36f23025f282032261Owen Lin
847a5e1e771ae58241f3a2be36f23025f282032261Owen Lin        setSystemUiVisibility(rootView);
857a5e1e771ae58241f3a2be36f23025f282032261Owen Lin
86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Intent intent = getIntent();
87bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        initializeActionBar(intent);
88209a9163d4e8cee0bfe162ae598ef40e6051479cChih-Chung Chang        mFinishOnCompletion = intent.getBooleanExtra(
89209a9163d4e8cee0bfe162ae598ef40e6051479cChih-Chung Chang                MediaStore.EXTRA_FINISH_ON_COMPLETION, true);
90a3871050845b4921379add2b126add3cfbab1109Ray Chen        mTreatUpAsBack = intent.getBooleanExtra(KEY_TREAT_UP_AS_BACK, false);
91209a9163d4e8cee0bfe162ae598ef40e6051479cChih-Chung Chang        mPlayer = new MoviePlayer(rootView, this, intent.getData(), savedInstanceState,
92209a9163d4e8cee0bfe162ae598ef40e6051479cChih-Chung Chang                !mFinishOnCompletion) {
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            @Override
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            public void onCompletion() {
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                if (mFinishOnCompletion) {
96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    finish();
97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                }
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        };
100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (intent.hasExtra(MediaStore.EXTRA_SCREEN_ORIENTATION)) {
101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int orientation = intent.getIntExtra(
102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    MediaStore.EXTRA_SCREEN_ORIENTATION,
103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if (orientation != getRequestedOrientation()) {
105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                setRequestedOrientation(orientation);
106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Window win = getWindow();
109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        WindowManager.LayoutParams winParams = win.getAttributes();
110f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        winParams.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF;
1118176012eeb96bb167ef7c7ba2d02f82b646766f0Chih-Chung Chang        winParams.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
112f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        win.setAttributes(winParams);
1135dd57a27b013e5019d727d8badb604f319222ddfOwen Lin
1145dd57a27b013e5019d727d8badb604f319222ddfOwen Lin        // We set the background in the theme to have the launching animation.
1155dd57a27b013e5019d727d8badb604f319222ddfOwen Lin        // But for the performance (and battery), we remove the background here.
1165dd57a27b013e5019d727d8badb604f319222ddfOwen Lin        win.setBackgroundDrawable(null);
117f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
118f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
119cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin    @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
120cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin    private void setActionBarLogoFromIntent(Intent intent) {
121cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin        if (ApiHelper.HAS_ACTION_BAR_SET_LOGO) {
122cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin            Bitmap logo = intent.getParcelableExtra(KEY_LOGO_BITMAP);
123cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin            if (logo != null) {
124cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin                getActionBar().setLogo(new BitmapDrawable(getResources(), logo));
125cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin            }
126cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin        }
127cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin    }
128cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin
129bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    private void initializeActionBar(Intent intent) {
130143594f5a26cf68520ca4712435739d2ada339a3Pin Ting        mUri = intent.getData();
1314ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        final ActionBar actionBar = getActionBar();
132cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin        setActionBarLogoFromIntent(intent);
133bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP,
134bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang                ActionBar.DISPLAY_HOME_AS_UP);
135143594f5a26cf68520ca4712435739d2ada339a3Pin Ting
1364ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        String title = intent.getStringExtra(Intent.EXTRA_TITLE);
1374ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        if (title != null) {
1384ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            actionBar.setTitle(title);
1394ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        } else {
1404ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            // Displays the filename as title, reading the filename from the
1414ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            // interface: {@link android.provider.OpenableColumns#DISPLAY_NAME}.
1424ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            AsyncQueryHandler queryHandler =
1434ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    new AsyncQueryHandler(getContentResolver()) {
1444ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                @Override
1454ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                protected void onQueryComplete(int token, Object cookie,
1464ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        Cursor cursor) {
1474ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    try {
1484ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        if ((cursor != null) && cursor.moveToFirst()) {
1494ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            String displayName = cursor.getString(0);
1504ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting
1514ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            // Just show empty title if other apps don't set
1524ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            // DISPLAY_NAME
1534ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            actionBar.setTitle((displayName == null) ? "" :
1544ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                                    displayName);
1554ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        }
1564ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    } finally {
1574ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        Utils.closeSilently(cursor);
1584ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    }
1594ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                }
1604ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            };
1614ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            queryHandler.startQuery(0, null, mUri,
1624ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    new String[] {OpenableColumns.DISPLAY_NAME}, null, null,
1634ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    null);
1644ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        }
165bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    }
166bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang
167bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    @Override
168e6e4beb069778fafd053552287e36304df5626ebRay Chen    public boolean onCreateOptionsMenu(Menu menu) {
169e6e4beb069778fafd053552287e36304df5626ebRay Chen        super.onCreateOptionsMenu(menu);
170e6e4beb069778fafd053552287e36304df5626ebRay Chen        getMenuInflater().inflate(R.menu.movie, menu);
171e6e4beb069778fafd053552287e36304df5626ebRay Chen
172be055bc0318828029a4bda0e31e9d8e3ce17ca4bOwen Lin        // Document says EXTRA_STREAM should be a content: Uri
173be055bc0318828029a4bda0e31e9d8e3ce17ca4bOwen Lin        // So, we only share the video if it's "content:".
174fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        if (ContentResolver.SCHEME_CONTENT.equals(mUri.getScheme())) {
175fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li            initializeShareActionProvider(menu);
176fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        } else {
177fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li            menu.findItem(R.id.action_share).setVisible(false);
178e6e4beb069778fafd053552287e36304df5626ebRay Chen        }
179e6e4beb069778fafd053552287e36304df5626ebRay Chen        return true;
180e6e4beb069778fafd053552287e36304df5626ebRay Chen    }
181e6e4beb069778fafd053552287e36304df5626ebRay Chen
182fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li    @TargetApi(ApiHelper.VERSION_CODES.JELLY_BEAN)
183fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li    private void initializeShareActionProvider(Menu menu) {
184fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        if (!ApiHelper.HAS_SHARE_ACTION_PROVIDER) return;
185fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li
186fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        ShareActionProvider provider = GalleryActionBar.initializeShareActionProvider(
187fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li                menu, this);
188fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        provider.setShareIntent(createShareIntent());
189fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li    }
190fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li
191fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li    private Intent createShareIntent() {
192fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        Intent intent = new Intent(Intent.ACTION_SEND);
193fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        intent.setType("video/*");
194fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        intent.putExtra(Intent.EXTRA_STREAM, mUri);
195fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        return intent;
196fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li    }
197fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li
198e6e4beb069778fafd053552287e36304df5626ebRay Chen    @Override
199bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    public boolean onOptionsItemSelected(MenuItem item) {
200fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        int id = item.getItemId();
201fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        if (id == android.R.id.home) {
202a3871050845b4921379add2b126add3cfbab1109Ray Chen            if (mTreatUpAsBack) {
203a3871050845b4921379add2b126add3cfbab1109Ray Chen                finish();
204a3871050845b4921379add2b126add3cfbab1109Ray Chen            } else {
205a3871050845b4921379add2b126add3cfbab1109Ray Chen                startActivity(new Intent(this, Gallery.class));
206a3871050845b4921379add2b126add3cfbab1109Ray Chen                finish();
207a3871050845b4921379add2b126add3cfbab1109Ray Chen            }
208bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang            return true;
209fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        } else if (id == R.id.action_share) {
210fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li            startActivity(Intent.createChooser(createShareIntent(),
211fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li                    getString(R.string.share)));
212fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li            return true;
213bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        }
214bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        return false;
215f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
216f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
217f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onStart() {
219f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        ((AudioManager) getSystemService(AUDIO_SERVICE))
220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                .requestAudioFocus(null, AudioManager.STREAM_MUSIC,
221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onStart();
223f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
224f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
225f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
226f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onStop() {
227f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        ((AudioManager) getSystemService(AUDIO_SERVICE))
228f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                .abandonAudioFocus(null);
229f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onStop();
230f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
231f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
232f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
233f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onPause() {
234f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mPlayer.onPause();
235f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onPause();
236f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
237f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
238f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
239f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onResume() {
240f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mPlayer.onResume();
241f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onResume();
242f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
243f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
244f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
245540e4698824654232f300992ed8c03b20c9d5946Owen Lin    public void onSaveInstanceState(Bundle outState) {
246540e4698824654232f300992ed8c03b20c9d5946Owen Lin        super.onSaveInstanceState(outState);
247540e4698824654232f300992ed8c03b20c9d5946Owen Lin        mPlayer.onSaveInstanceState(outState);
248540e4698824654232f300992ed8c03b20c9d5946Owen Lin    }
249540e4698824654232f300992ed8c03b20c9d5946Owen Lin
250540e4698824654232f300992ed8c03b20c9d5946Owen Lin    @Override
251f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onDestroy() {
252f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mPlayer.onDestroy();
253f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onDestroy();
254f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
255fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang
256fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    @Override
257fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    public boolean onKeyDown(int keyCode, KeyEvent event) {
258fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang        return mPlayer.onKeyDown(keyCode, event)
259fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang                || super.onKeyDown(keyCode, event);
260fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    }
261fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang
262fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    @Override
263fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    public boolean onKeyUp(int keyCode, KeyEvent event) {
264fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang        return mPlayer.onKeyUp(keyCode, event)
265fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang                || super.onKeyUp(keyCode, event);
266fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    }
267f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
268