MovieActivity.java revision 5dd57a27b013e5019d727d8badb604f319222ddf
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
19dcb265c9d08029bbb8fd77d3514482d10db53a3cRay Chenimport android.app.ActionBar;
20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.app.Activity;
214ba06f02e9182160ce155871cbd088919b0ac0c6Pin Tingimport android.content.AsyncQueryHandler;
22be055bc0318828029a4bda0e31e9d8e3ce17ca4bOwen Linimport android.content.ContentResolver;
23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.Intent;
24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.content.pm.ActivityInfo;
25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.database.Cursor;
267b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chenimport android.graphics.Bitmap;
277b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chenimport android.graphics.drawable.BitmapDrawable;
28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.media.AudioManager;
29e6e4beb069778fafd053552287e36304df5626ebRay Chenimport android.net.Uri;
30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.os.Bundle;
31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.provider.MediaStore;
324ba06f02e9182160ce155871cbd088919b0ac0c6Pin Tingimport android.provider.OpenableColumns;
33fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Changimport android.view.KeyEvent;
34e6e4beb069778fafd053552287e36304df5626ebRay Chenimport android.view.Menu;
35bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Changimport android.view.MenuItem;
36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.View;
37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.Window;
38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.view.WindowManager;
39e6e4beb069778fafd053552287e36304df5626ebRay Chenimport android.widget.ShareActionProvider;
40e6e4beb069778fafd053552287e36304df5626ebRay Chen
41e6e4beb069778fafd053552287e36304df5626ebRay Chenimport com.android.gallery3d.R;
424ba06f02e9182160ce155871cbd088919b0ac0c6Pin Tingimport com.android.gallery3d.common.Utils;
43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/**
45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * This activity plays a video from a specified URI.
467b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen *
477b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen * The client of this activity can pass a logo bitmap in the intent (KEY_LOGO_BITMAP)
487b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen * to set the action bar logo so the playback process looks more seamlessly integrated with
497b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen * the original activity.
50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */
51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class MovieActivity extends Activity {
52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @SuppressWarnings("unused")
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String TAG = "MovieActivity";
54a3871050845b4921379add2b126add3cfbab1109Ray Chen    public static final String KEY_LOGO_BITMAP = "logo-bitmap";
55a3871050845b4921379add2b126add3cfbab1109Ray Chen    public static final String KEY_TREAT_UP_AS_BACK = "treat-up-as-back";
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private MoviePlayer mPlayer;
58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private boolean mFinishOnCompletion;
59e6e4beb069778fafd053552287e36304df5626ebRay Chen    private Uri mUri;
60a3871050845b4921379add2b126add3cfbab1109Ray Chen    private boolean mTreatUpAsBack;
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onCreate(Bundle savedInstanceState) {
64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onCreate(savedInstanceState);
65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        requestWindowFeature(Window.FEATURE_ACTION_BAR);
67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        setContentView(R.layout.movie_view);
70fb55994c78d7b6af919d45ab015f5dc0a8665ac8Chih-Chung Chang        View rootView = findViewById(R.id.movie_view_root);
7143650c63eb751a367ff0d75af152d0b244c0e748Ray Chen        rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Intent intent = getIntent();
73bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        initializeActionBar(intent);
74209a9163d4e8cee0bfe162ae598ef40e6051479cChih-Chung Chang        mFinishOnCompletion = intent.getBooleanExtra(
75209a9163d4e8cee0bfe162ae598ef40e6051479cChih-Chung Chang                MediaStore.EXTRA_FINISH_ON_COMPLETION, true);
76a3871050845b4921379add2b126add3cfbab1109Ray Chen        mTreatUpAsBack = intent.getBooleanExtra(KEY_TREAT_UP_AS_BACK, false);
77209a9163d4e8cee0bfe162ae598ef40e6051479cChih-Chung Chang        mPlayer = new MoviePlayer(rootView, this, intent.getData(), savedInstanceState,
78209a9163d4e8cee0bfe162ae598ef40e6051479cChih-Chung Chang                !mFinishOnCompletion) {
79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            @Override
80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            public void onCompletion() {
81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                if (mFinishOnCompletion) {
82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    finish();
83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                }
84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        };
86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (intent.hasExtra(MediaStore.EXTRA_SCREEN_ORIENTATION)) {
87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int orientation = intent.getIntExtra(
88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    MediaStore.EXTRA_SCREEN_ORIENTATION,
89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                    ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if (orientation != getRequestedOrientation()) {
91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                setRequestedOrientation(orientation);
92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Window win = getWindow();
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        WindowManager.LayoutParams winParams = win.getAttributes();
96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        winParams.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_OFF;
978176012eeb96bb167ef7c7ba2d02f82b646766f0Chih-Chung Chang        winParams.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        win.setAttributes(winParams);
995dd57a27b013e5019d727d8badb604f319222ddfOwen Lin
1005dd57a27b013e5019d727d8badb604f319222ddfOwen Lin        // We set the background in the theme to have the launching animation.
1015dd57a27b013e5019d727d8badb604f319222ddfOwen Lin        // But for the performance (and battery), we remove the background here.
1025dd57a27b013e5019d727d8badb604f319222ddfOwen Lin        win.setBackgroundDrawable(null);
103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
105bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    private void initializeActionBar(Intent intent) {
106143594f5a26cf68520ca4712435739d2ada339a3Pin Ting        mUri = intent.getData();
1074ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        final ActionBar actionBar = getActionBar();
1087b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen        Bitmap logo = intent.getParcelableExtra(KEY_LOGO_BITMAP);
1097b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen        if (logo != null) {
1107b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen            actionBar.setLogo(new BitmapDrawable(getResources(), logo));
1117b9c72a32694f180fbc7bf4652720db9d46e30f4Ray Chen        }
112bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP,
113bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang                ActionBar.DISPLAY_HOME_AS_UP);
114143594f5a26cf68520ca4712435739d2ada339a3Pin Ting
1154ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        String title = intent.getStringExtra(Intent.EXTRA_TITLE);
1164ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        if (title != null) {
1174ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            actionBar.setTitle(title);
1184ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        } else {
1194ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            // Displays the filename as title, reading the filename from the
1204ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            // interface: {@link android.provider.OpenableColumns#DISPLAY_NAME}.
1214ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            AsyncQueryHandler queryHandler =
1224ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    new AsyncQueryHandler(getContentResolver()) {
1234ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                @Override
1244ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                protected void onQueryComplete(int token, Object cookie,
1254ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        Cursor cursor) {
1264ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    try {
1274ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        if ((cursor != null) && cursor.moveToFirst()) {
1284ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            String displayName = cursor.getString(0);
1294ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting
1304ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            // Just show empty title if other apps don't set
1314ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            // DISPLAY_NAME
1324ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                            actionBar.setTitle((displayName == null) ? "" :
1334ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                                    displayName);
1344ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        }
1354ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    } finally {
1364ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                        Utils.closeSilently(cursor);
1374ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    }
1384ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                }
1394ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            };
1404ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting            queryHandler.startQuery(0, null, mUri,
1414ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    new String[] {OpenableColumns.DISPLAY_NAME}, null, null,
1424ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting                    null);
1434ba06f02e9182160ce155871cbd088919b0ac0c6Pin Ting        }
144bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    }
145bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang
146bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    @Override
147e6e4beb069778fafd053552287e36304df5626ebRay Chen    public boolean onCreateOptionsMenu(Menu menu) {
148e6e4beb069778fafd053552287e36304df5626ebRay Chen        super.onCreateOptionsMenu(menu);
149e6e4beb069778fafd053552287e36304df5626ebRay Chen
150e6e4beb069778fafd053552287e36304df5626ebRay Chen        getMenuInflater().inflate(R.menu.movie, menu);
151e6e4beb069778fafd053552287e36304df5626ebRay Chen        ShareActionProvider provider = GalleryActionBar.initializeShareActionProvider(menu);
152e6e4beb069778fafd053552287e36304df5626ebRay Chen
153be055bc0318828029a4bda0e31e9d8e3ce17ca4bOwen Lin        // Document says EXTRA_STREAM should be a content: Uri
154be055bc0318828029a4bda0e31e9d8e3ce17ca4bOwen Lin        // So, we only share the video if it's "content:".
155be055bc0318828029a4bda0e31e9d8e3ce17ca4bOwen Lin        if (provider != null && ContentResolver.SCHEME_CONTENT
156be055bc0318828029a4bda0e31e9d8e3ce17ca4bOwen Lin                .equals(mUri.getScheme())) {
157e6e4beb069778fafd053552287e36304df5626ebRay Chen            Intent intent = new Intent(Intent.ACTION_SEND);
158e6e4beb069778fafd053552287e36304df5626ebRay Chen            intent.setType("video/*");
159e6e4beb069778fafd053552287e36304df5626ebRay Chen            intent.putExtra(Intent.EXTRA_STREAM, mUri);
160e6e4beb069778fafd053552287e36304df5626ebRay Chen            provider.setShareIntent(intent);
161e6e4beb069778fafd053552287e36304df5626ebRay Chen        }
162e6e4beb069778fafd053552287e36304df5626ebRay Chen
163e6e4beb069778fafd053552287e36304df5626ebRay Chen        return true;
164e6e4beb069778fafd053552287e36304df5626ebRay Chen    }
165e6e4beb069778fafd053552287e36304df5626ebRay Chen
166e6e4beb069778fafd053552287e36304df5626ebRay Chen    @Override
167bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang    public boolean onOptionsItemSelected(MenuItem item) {
168bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        if (item.getItemId() == android.R.id.home) {
169a3871050845b4921379add2b126add3cfbab1109Ray Chen            if (mTreatUpAsBack) {
170a3871050845b4921379add2b126add3cfbab1109Ray Chen                finish();
171a3871050845b4921379add2b126add3cfbab1109Ray Chen            } else {
172a3871050845b4921379add2b126add3cfbab1109Ray Chen                startActivity(new Intent(this, Gallery.class));
173a3871050845b4921379add2b126add3cfbab1109Ray Chen                finish();
174a3871050845b4921379add2b126add3cfbab1109Ray Chen            }
175bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang            return true;
176bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        }
177bb7d7b94c0454d9549b2c5da2977dcd49c1a3be5Chih-Chung Chang        return false;
178f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
179f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
180f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
181f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onStart() {
182f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        ((AudioManager) getSystemService(AUDIO_SERVICE))
183f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                .requestAudioFocus(null, AudioManager.STREAM_MUSIC,
184f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
185f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onStart();
186f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
187f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
188f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
189f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void onStop() {
190f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        ((AudioManager) getSystemService(AUDIO_SERVICE))
191f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                .abandonAudioFocus(null);
192f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onStop();
193f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
194f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
196f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onPause() {
197f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mPlayer.onPause();
198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onPause();
199f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
200f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onResume() {
203f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mPlayer.onResume();
204f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onResume();
205f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
206f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
207f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
208540e4698824654232f300992ed8c03b20c9d5946Owen Lin    public void onSaveInstanceState(Bundle outState) {
209540e4698824654232f300992ed8c03b20c9d5946Owen Lin        super.onSaveInstanceState(outState);
210540e4698824654232f300992ed8c03b20c9d5946Owen Lin        mPlayer.onSaveInstanceState(outState);
211540e4698824654232f300992ed8c03b20c9d5946Owen Lin    }
212540e4698824654232f300992ed8c03b20c9d5946Owen Lin
213540e4698824654232f300992ed8c03b20c9d5946Owen Lin    @Override
214f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void onDestroy() {
215f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        mPlayer.onDestroy();
216f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super.onDestroy();
217f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
218fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang
219fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    @Override
220fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    public boolean onKeyDown(int keyCode, KeyEvent event) {
221fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang        return mPlayer.onKeyDown(keyCode, event)
222fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang                || super.onKeyDown(keyCode, event);
223fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    }
224fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang
225fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    @Override
226fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    public boolean onKeyUp(int keyCode, KeyEvent event) {
227fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang        return mPlayer.onKeyUp(keyCode, event)
228fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang                || super.onKeyUp(keyCode, event);
229fc8c503d1351c6ee62d233a944f2bd5220e64a55Chih-Chung Chang    }
230f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
231