From: David A. Velasco Date: Tue, 12 Feb 2013 11:07:42 +0000 (+0100) Subject: Error messages for media playback improved X-Git-Tag: oc-android-1.4.3~39^2~62 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/942065193665ba768fa221acdcc8c83843775420?ds=inline;hp=--cc Error messages for media playback improved --- 942065193665ba768fa221acdcc8c83843775420 diff --git a/res/values/strings.xml b/res/values/strings.xml index 55860c09..feeeb488 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -149,8 +149,12 @@ No media file found No account provided File not in a valid account - Media cannot be streamed - Media cannot be played + Unsupported media codec + Media file could not be read + Media file not correctly encoded + Too much time trying to play + Media file cannot be streamed + Media file cannot be played with the stock media player Security error trying to play %1$s Input error trying to play %1$s Unexpected error tryung to playe %1$s diff --git a/src/com/owncloud/android/media/MediaService.java b/src/com/owncloud/android/media/MediaService.java index 48aa8417..a5118525 100644 --- a/src/com/owncloud/android/media/MediaService.java +++ b/src/com/owncloud/android/media/MediaService.java @@ -132,6 +132,74 @@ public class MediaService extends Service implements OnCompletionListener, OnPre private MediaController mMediaController; + + /** + * Helper method to get an error message suitable to show to users for errors occurred in media playback, + * + * @param context A context to access string resources. + * @param what See {@link MediaPlayer.OnErrorListener#onError(MediaPlayer, int, int) + * @param extra See {@link MediaPlayer.OnErrorListener#onError(MediaPlayer, int, int) + * @return Message suitable to users. + */ + public static String getMessageForMediaError(Context context, int what, int extra) { + int messageId; + + if (what == OC_MEDIA_ERROR) { + messageId = extra; + + } else if (extra == MediaPlayer.MEDIA_ERROR_UNSUPPORTED) { + /* Added in API level 17 + Bitstream is conforming to the related coding standard or file spec, but the media framework does not support the feature. + Constant Value: -1010 (0xfffffc0e) + */ + messageId = R.string.media_err_unsupported; + + } else if (extra == MediaPlayer.MEDIA_ERROR_IO) { + /* Added in API level 17 + File or network related operation errors. + Constant Value: -1004 (0xfffffc14) + */ + messageId = R.string.media_err_io; + + } else if (extra == MediaPlayer.MEDIA_ERROR_MALFORMED) { + /* Added in API level 17 + Bitstream is not conforming to the related coding standard or file spec. + Constant Value: -1007 (0xfffffc11) + */ + messageId = R.string.media_err_malformed; + + } else if (extra == MediaPlayer.MEDIA_ERROR_TIMED_OUT) { + /* Added in API level 17 + Some operation takes too long to complete, usually more than 3-5 seconds. + Constant Value: -110 (0xffffff92) + */ + messageId = R.string.media_err_timeout; + + } else if (what == MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK) { + /* Added in API level 3 + The video is streamed and its container is not valid for progressive playback i.e the video's index (e.g moov atom) is not at the start of the file. + Constant Value: 200 (0x000000c8) + */ + messageId = R.string.media_err_invalid_progressive_playback; + + } else { + /* MediaPlayer.MEDIA_ERROR_UNKNOWN + Added in API level 1 + Unspecified media player error. + Constant Value: 1 (0x00000001) + */ + /* MediaPlayer.MEDIA_ERROR_SERVER_DIED) + Added in API level 1 + Media server died. In this case, the application must release the MediaPlayer object and instantiate a new one. + Constant Value: 100 (0x00000064) + */ + messageId = R.string.media_err_unknown; + } + return context.getString(messageId); + } + + + /** * Initialize a service instance * @@ -501,26 +569,14 @@ public class MediaService extends Service implements OnCompletionListener, OnPre if (mMediaController != null) { mMediaController.hide(); } - - int messageId; - if (what == OC_MEDIA_ERROR) { - messageId = extra; - - } else if (what == MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK) { - messageId = R.string.media_err_invalid_progressive_playback; - - } else { - // what == MediaPlayer.MEDIA_ERROR_UNKNOWN or MEDIA_ERROR_SERVER_DIED - messageId = R.string.media_err_unknown; - - } - Toast.makeText(getApplicationContext(), messageId, Toast.LENGTH_SHORT).show(); + + String message = getMessageForMediaError(this, what, extra); + Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); processStopRequest(true); return true; } - /** * Called by the system when another app tries to play some sound. * diff --git a/src/com/owncloud/android/ui/activity/VideoActivity.java b/src/com/owncloud/android/ui/activity/VideoActivity.java index 8147af73..bb610a2e 100644 --- a/src/com/owncloud/android/ui/activity/VideoActivity.java +++ b/src/com/owncloud/android/ui/activity/VideoActivity.java @@ -159,20 +159,9 @@ public class VideoActivity extends Activity implements OnCompletionListener, OnP } if (mVideoPlayer.getWindowToken() != null) { - int messageId; - if (what == MediaService.OC_MEDIA_ERROR) { - messageId = extra; - - } else if (what == MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK) { - messageId = android.R.string.VideoView_error_text_invalid_progressive_playback; - - } else { - // what == MediaPlayer.MEDIA_ERROR_UNKNOWN or MEDIA_ERROR_SERVER_DIED - messageId = android.R.string.VideoView_error_text_unknown; - - } + String message = MediaService.getMessageForMediaError(this, what, extra); new AlertDialog.Builder(this) - .setMessage(messageId) + .setMessage(message) .setPositiveButton(android.R.string.VideoView_error_button, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { @@ -182,61 +171,6 @@ public class VideoActivity extends Activity implements OnCompletionListener, OnP .setCancelable(false) .show(); } - - - /* - switch (what) { - case MediaPlayer.MEDIA_ERROR_UNKNOWN: - /*Added in API level 1 - Unspecified media player error. - Constant Value: 1 (0x00000001) - *-/ - break; - - case MediaPlayer.MEDIA_ERROR_SERVER_DIED: - /* Added in API level 1 - Media server died. In this case, the application must release the MediaPlayer object and instantiate a new one. - Constant Value: 100 (0x00000064) *-/ - break; - - case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK: - /* Added in API level 3 - The video is streamed and its container is not valid for progressive playback i.e the video's index (e.g moov atom) is not at the start of the file. - See Also - MediaPlayer.OnErrorListener - Constant Value: 200 (0x000000c8) - *-/ - break; - - /// under this, seems they are values for extra - case MediaPlayer.MEDIA_ERROR_UNSUPPORTED: - /* Added in API level 17 - Bitstream is conforming to the related coding standard or file spec, but the media framework does not support the feature. - Constant Value: -1010 (0xfffffc0e) - *-/ - break; - - case MediaPlayer.MEDIA_ERROR_IO: - /* Added in API level 17 - File or network related operation errors. - Constant Value: -1004 (0xfffffc14) *-/ - break; - - case MediaPlayer.MEDIA_ERROR_MALFORMED: - /* Added in API level 17 - Bitstream is not conforming to the related coding standard or file spec. - Constant Value: -1007 (0xfffffc11) *-/ - break; - - case MediaPlayer.MEDIA_ERROR_TIMED_OUT: - /*Added in API level 17 - Some operation takes too long to complete, usually more than 3-5 seconds. - Constant Value: -110 (0xffffff92) - *-/ - break; - } - */ - return true; }