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;
202abaaf7caa9a83ba1ea759868aabde7f21387184John Reckimport android.app.ActionBar;
212abaaf7caa9a83ba1ea759868aabde7f21387184John Reckimport 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;
362abaaf7caa9a83ba1ea759868aabde7f21387184John Reckimport android.view.Menu;
372abaaf7caa9a83ba1ea759868aabde7f21387184John Reckimport android.view.MenuItem;
38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.View;
39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.Window;
40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.WindowManager;
412abaaf7caa9a83ba1ea759868aabde7f21387184John Reckimport 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 */
542abaaf7caa9a83ba1ea759868aabde7f21387184John Reckpublic 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
782abaaf7caa9a83ba1ea759868aabde7f21387184John Reck        requestWindowFeature(Window.FEATURE_ACTION_BAR);
792abaaf7caa9a83ba1ea759868aabde7f21387184John Reck        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    private void setActionBarLogoFromIntent(Intent intent) {
1208a861a02136d15b45b9dbdc80e4f3bcc9de057c8Owen Lin        Bitmap logo = intent.getParcelableExtra(KEY_LOGO_BITMAP);
1218a861a02136d15b45b9dbdc80e4f3bcc9de057c8Owen Lin        if (logo != null) {
1222abaaf7caa9a83ba1ea759868aabde7f21387184John Reck            getActionBar().setLogo(
1238a861a02136d15b45b9dbdc80e4f3bcc9de057c8Owen Lin                    new BitmapDrawable(getResources(), logo));
124cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin        }
125cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin    }
126cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin
127bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    private void initializeActionBar(Intent intent) {
128143594f5a26cf68520ca4712435739d2ada339a3Pin Ting        mUri = intent.getData();
1292abaaf7caa9a83ba1ea759868aabde7f21387184John Reck        final ActionBar actionBar = getActionBar();
1304ea5c27007e38fa8583add4bacf268ba67b9f0adJohn Reck        if (actionBar == null) {
1314ea5c27007e38fa8583add4bacf268ba67b9f0adJohn Reck            return;
1324ea5c27007e38fa8583add4bacf268ba67b9f0adJohn Reck        }
133cc8e7ab7ae0912186beff20e7f042fd6c1e78b35Owen Lin        setActionBarLogoFromIntent(intent);
134b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        actionBar.setDisplayOptions(
135b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin                ActionBar.DISPLAY_HOME_AS_UP,
136b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin                ActionBar.DISPLAY_HOME_AS_UP);
137143594f5a26cf68520ca4712435739d2ada339a3Pin Ting
1384ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        String title = intent.getStringExtra(Intent.EXTRA_TITLE);
1394ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        if (title != null) {
1404ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            actionBar.setTitle(title);
1414ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        } else {
1424ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            // Displays the filename as title, reading the filename from the
1434ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            // interface: {@link android.provider.OpenableColumns#DISPLAY_NAME}.
1444ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            AsyncQueryHandler queryHandler =
1454ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    new AsyncQueryHandler(getContentResolver()) {
1464ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                @Override
1474ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                protected void onQueryComplete(int token, Object cookie,
1484ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        Cursor cursor) {
1494ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    try {
1504ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        if ((cursor != null) && cursor.moveToFirst()) {
1514ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            String displayName = cursor.getString(0);
1524ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting
1534ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            // Just show empty title if other apps don't set
1544ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            // DISPLAY_NAME
1554ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            actionBar.setTitle((displayName == null) ? "" :
1564ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                                    displayName);
1574ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        }
1584ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    } finally {
1594ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        Utils.closeSilently(cursor);
1604ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    }
1614ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                }
1624ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            };
1634ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            queryHandler.startQuery(0, null, mUri,
1644ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    new String[] {OpenableColumns.DISPLAY_NAME}, null, null,
1654ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    null);
1664ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        }
167bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    }
168bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang
169bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    @Override
170e6e4beb069778fafd053552287e36304df5626ebRay Chen    public boolean onCreateOptionsMenu(Menu menu) {
171e6e4beb069778fafd053552287e36304df5626ebRay Chen        super.onCreateOptionsMenu(menu);
1722abaaf7caa9a83ba1ea759868aabde7f21387184John Reck        getMenuInflater().inflate(R.menu.movie, menu);
1738a861a02136d15b45b9dbdc80e4f3bcc9de057c8Owen Lin
174be055bc0318828029a4bda0e31e9d8e3ce17ca4bOwen Lin        // Document says EXTRA_STREAM should be a content: Uri
175be055bc0318828029a4bda0e31e9d8e3ce17ca4bOwen Lin        // So, we only share the video if it's "content:".
176b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        MenuItem shareItem = menu.findItem(R.id.action_share);
177fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        if (ContentResolver.SCHEME_CONTENT.equals(mUri.getScheme())) {
178b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin            shareItem.setVisible(true);
179b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin            ((ShareActionProvider) shareItem.getActionProvider())
180b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin                    .setShareIntent(createShareIntent());
181fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        } else {
182b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin            shareItem.setVisible(false);
183e6e4beb069778fafd053552287e36304df5626ebRay Chen        }
1848a861a02136d15b45b9dbdc80e4f3bcc9de057c8Owen Lin        return true;
185fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li    }
186fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li
187fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li    private Intent createShareIntent() {
188fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        Intent intent = new Intent(Intent.ACTION_SEND);
189fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        intent.setType("video/*");
190fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        intent.putExtra(Intent.EXTRA_STREAM, mUri);
191fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        return intent;
192fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li    }
193fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li
194e6e4beb069778fafd053552287e36304df5626ebRay Chen    @Override
195bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    public boolean onOptionsItemSelected(MenuItem item) {
196fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        int id = item.getItemId();
197fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        if (id == android.R.id.home) {
198a3871050845b4921379add2b126add3cfbab1109Ray Chen            if (mTreatUpAsBack) {
199a3871050845b4921379add2b126add3cfbab1109Ray Chen                finish();
200a3871050845b4921379add2b126add3cfbab1109Ray Chen            } else {
20106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                startActivity(new Intent(this, GalleryActivity.class));
202a3871050845b4921379add2b126add3cfbab1109Ray Chen                finish();
203a3871050845b4921379add2b126add3cfbab1109Ray Chen            }
204bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang            return true;
205fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li        } else if (id == R.id.action_share) {
206fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li            startActivity(Intent.createChooser(createShareIntent(),
207fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li                    getString(R.string.share)));
208fb5571987f2555b04731b6f3e1c479efc16d542aWu-cheng Li            return true;
209bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        }
210bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        return false;
211f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
212f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
213f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onStart() {
215f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        ((AudioManager) getSystemService(AUDIO_SERVICE))
216f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                .requestAudioFocus(null, AudioManager.STREAM_MUSIC,
217f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
218f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onStart();
219f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
220f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
221f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
222f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onStop() {
223f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        ((AudioManager) getSystemService(AUDIO_SERVICE))
224f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                .abandonAudioFocus(null);
225f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onStop();
226f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
227f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
228f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
229f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onPause() {
230f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mPlayer.onPause();
231f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onPause();
232f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
233f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
234f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
235f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onResume() {
236f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mPlayer.onResume();
237f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onResume();
238f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
239f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
240f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
241540e4698824654232f300992ed8c03b20c9d5946Owen Lin    public void onSaveInstanceState(Bundle outState) {
242540e4698824654232f300992ed8c03b20c9d5946Owen Lin        super.onSaveInstanceState(outState);
243540e4698824654232f300992ed8c03b20c9d5946Owen Lin        mPlayer.onSaveInstanceState(outState);
244540e4698824654232f300992ed8c03b20c9d5946Owen Lin    }
245540e4698824654232f300992ed8c03b20c9d5946Owen Lin
246540e4698824654232f300992ed8c03b20c9d5946Owen Lin    @Override
247f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onDestroy() {
248f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mPlayer.onDestroy();
249f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onDestroy();
250f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
251fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang
252fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    @Override
253fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    public boolean onKeyDown(int keyCode, KeyEvent event) {
254fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang        return mPlayer.onKeyDown(keyCode, event)
255fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang                || super.onKeyDown(keyCode, event);
256fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    }
257fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang
258fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    @Override
259fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    public boolean onKeyUp(int keyCode, KeyEvent event) {
260fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang        return mPlayer.onKeyUp(keyCode, event)
261fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang                || super.onKeyUp(keyCode, event);
262fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    }
263f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
264