Added listener for buffering information and progressbar in videoplayer

This commit is contained in:
daniel oeh 2012-08-05 16:27:10 +02:00
parent d657c9ffb7
commit 6901e4a08f
6 changed files with 65 additions and 3 deletions

View File

@ -8,6 +8,14 @@
android:id="@+id/videoview" android:id="@+id/videoview"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/progressIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="invisible"
android:indeterminateOnly="true" />
<!-- Mediaplayer controls --> <!-- Mediaplayer controls -->
<LinearLayout <LinearLayout

View File

@ -168,6 +168,7 @@
<string name="best_rating_label">Best rating</string> <string name="best_rating_label">Best rating</string>
<string name="add_feed_label">Add feed</string> <string name="add_feed_label">Add feed</string>
<string name="miro_feed_added">Feed is being added</string> <string name="miro_feed_added">Feed is being added</string>
<string name="player_buffering_msg">Buffering</string>
</resources> </resources>

View File

@ -186,4 +186,14 @@ public class AudioplayerActivity extends MediaplayerActivity {
} }
} }
@Override
protected void onBufferStart() {
postStatusMsg(R.string.player_buffering_msg);
}
@Override
protected void onBufferEnd() {
clearStatusMsg();
}
} }

View File

@ -127,6 +127,8 @@ public abstract class MediaplayerActivity extends SherlockFragmentActivity imple
* not the correct one for the current activity. * not the correct one for the current activity.
*/ */
protected abstract void onReloadNotification(int notificationCode); protected abstract void onReloadNotification(int notificationCode);
protected abstract void onBufferStart();
protected abstract void onBufferEnd();
protected BroadcastReceiver notificationReceiver = new BroadcastReceiver() { protected BroadcastReceiver notificationReceiver = new BroadcastReceiver() {
@ -162,6 +164,12 @@ public abstract class MediaplayerActivity extends SherlockFragmentActivity imple
case PlaybackService.NOTIFICATION_TYPE_SLEEPTIMER_UPDATE: case PlaybackService.NOTIFICATION_TYPE_SLEEPTIMER_UPDATE:
invalidateOptionsMenu(); invalidateOptionsMenu();
break; break;
case PlaybackService.NOTIFICATION_TYPE_BUFFER_START:
onBufferStart();
break;
case PlaybackService.NOTIFICATION_TYPE_BUFFER_END:
onBufferEnd();
break;
} }
} else { } else {

View File

@ -16,6 +16,7 @@ import android.view.ViewGroup;
import android.view.Window; import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.SeekBar; import android.widget.SeekBar;
import android.widget.VideoView; import android.widget.VideoView;
@ -30,6 +31,7 @@ public class VideoplayerActivity extends MediaplayerActivity implements
private LinearLayout videoOverlay; private LinearLayout videoOverlay;
private VideoView videoview; private VideoView videoview;
private ProgressBar progressIndicator;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -64,6 +66,7 @@ public class VideoplayerActivity extends MediaplayerActivity implements
super.setupGUI(); super.setupGUI();
videoOverlay = (LinearLayout) findViewById(R.id.overlay); videoOverlay = (LinearLayout) findViewById(R.id.overlay);
videoview = (VideoView) findViewById(R.id.videoview); videoview = (VideoView) findViewById(R.id.videoview);
progressIndicator = (ProgressBar) findViewById(R.id.progressIndicator);
videoview.getHolder().addCallback(this); videoview.getHolder().addCallback(this);
videoview.setOnClickListener(playbuttonListener); videoview.setOnClickListener(playbuttonListener);
videoview.setOnTouchListener(onVideoviewTouched); videoview.setOnTouchListener(onVideoviewTouched);
@ -85,14 +88,15 @@ public class VideoplayerActivity extends MediaplayerActivity implements
@Override @Override
protected void postStatusMsg(int resId) { protected void postStatusMsg(int resId) {
// TODO Auto-generated method stub if (resId == R.string.player_preparing_msg) {
progressIndicator.setVisibility(View.VISIBLE);
}
} }
@Override @Override
protected void clearStatusMsg() { protected void clearStatusMsg() {
// TODO Auto-generated method stub progressIndicator.setVisibility(View.INVISIBLE);
} }
View.OnTouchListener onVideoviewTouched = new View.OnTouchListener() { View.OnTouchListener onVideoviewTouched = new View.OnTouchListener() {
@ -230,6 +234,16 @@ public class VideoplayerActivity extends MediaplayerActivity implements
setupVideoControlsToggler(); setupVideoControlsToggler();
} }
@Override
protected void onBufferStart() {
progressIndicator.setVisibility(View.VISIBLE);
}
@Override
protected void onBufferEnd() {
progressIndicator.setVisibility(View.INVISIBLE);
}
} }

View File

@ -79,6 +79,8 @@ public class PlaybackService extends Service {
public static final int NOTIFICATION_TYPE_RELOAD = 3; public static final int NOTIFICATION_TYPE_RELOAD = 3;
/** The state of the sleeptimer changed. */ /** The state of the sleeptimer changed. */
public static final int NOTIFICATION_TYPE_SLEEPTIMER_UPDATE = 4; public static final int NOTIFICATION_TYPE_SLEEPTIMER_UPDATE = 4;
public static final int NOTIFICATION_TYPE_BUFFER_START = 5;
public static final int NOTIFICATION_TYPE_BUFFER_END = 6;
/** Is true if service is running. */ /** Is true if service is running. */
public static boolean isRunning = false; public static boolean isRunning = false;
@ -171,6 +173,7 @@ public class PlaybackService extends Service {
player.setOnSeekCompleteListener(onSeekCompleteListener); player.setOnSeekCompleteListener(onSeekCompleteListener);
player.setOnErrorListener(onErrorListener); player.setOnErrorListener(onErrorListener);
player.setOnBufferingUpdateListener(onBufferingUpdateListener); player.setOnBufferingUpdateListener(onBufferingUpdateListener);
player.setOnInfoListener(onInfoListener);
mediaButtonReceiver = new ComponentName(getPackageName(), mediaButtonReceiver = new ComponentName(getPackageName(),
MediaButtonReceiver.class.getName()); MediaButtonReceiver.class.getName());
audioManager.registerMediaButtonEventReceiver(mediaButtonReceiver); audioManager.registerMediaButtonEventReceiver(mediaButtonReceiver);
@ -356,6 +359,7 @@ public class PlaybackService extends Service {
player.setOnSeekCompleteListener(onSeekCompleteListener); player.setOnSeekCompleteListener(onSeekCompleteListener);
player.setOnErrorListener(onErrorListener); player.setOnErrorListener(onErrorListener);
player.setOnBufferingUpdateListener(onBufferingUpdateListener); player.setOnBufferingUpdateListener(onBufferingUpdateListener);
player.setOnInfoListener(onInfoListener);
status = PlayerStatus.STOPPED; status = PlayerStatus.STOPPED;
setupMediaplayer(); setupMediaplayer();
} }
@ -446,6 +450,23 @@ public class PlaybackService extends Service {
} }
}; };
private MediaPlayer.OnInfoListener onInfoListener = new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
sendNotificationBroadcast(NOTIFICATION_TYPE_BUFFER_START, 0);
return true;
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
sendNotificationBroadcast(NOTIFICATION_TYPE_BUFFER_END, 0);
return true;
default:
return false;
}
}
};
private MediaPlayer.OnErrorListener onErrorListener = new MediaPlayer.OnErrorListener() { private MediaPlayer.OnErrorListener onErrorListener = new MediaPlayer.OnErrorListener() {
private static final String TAG = "PlaybackService.onErrorListener"; private static final String TAG = "PlaybackService.onErrorListener";