Explorar o código

Error messages for media playback improved

David A. Velasco %!s(int64=12) %!d(string=hai) anos
pai
achega
9420651936

+ 6 - 2
res/values/strings.xml

@@ -149,8 +149,12 @@
     <string name="media_err_nothing_to_play">No media file found</string>
 	<string name="media_err_no_account">No account provided</string>
     <string name="media_err_not_in_owncloud">File not in a valid account</string>
-    <string name="media_err_invalid_progressive_playback">Media cannot be streamed</string>
-    <string name="media_err_unknown">Media cannot be played</string>
+    <string name="media_err_unsupported">Unsupported media codec</string>
+    <string name="media_err_io">Media file could not be read</string>
+    <string name="media_err_malformed">Media file not correctly encoded</string>
+    <string name="media_err_timeout">Too much time trying to play</string>
+    <string name="media_err_invalid_progressive_playback">Media file cannot be streamed</string>
+    <string name="media_err_unknown">Media file cannot be played with the stock media player</string>
     <string name="media_err_security_ex">Security error trying to play %1$s</string>
 	<string name="media_err_io_ex">Input error trying to play %1$s</string>
 	<string name="media_err_unexpected">Unexpected error tryung to playe %1$s</string>

+ 71 - 15
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.
      * 

+ 2 - 68
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;
     }