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