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:layout_width="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 -->
<LinearLayout

View File

@ -168,6 +168,7 @@
<string name="best_rating_label">Best rating</string>
<string name="add_feed_label">Add feed</string>
<string name="miro_feed_added">Feed is being added</string>
<string name="player_buffering_msg">Buffering</string>
</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.
*/
protected abstract void onReloadNotification(int notificationCode);
protected abstract void onBufferStart();
protected abstract void onBufferEnd();
protected BroadcastReceiver notificationReceiver = new BroadcastReceiver() {
@ -162,6 +164,12 @@ public abstract class MediaplayerActivity extends SherlockFragmentActivity imple
case PlaybackService.NOTIFICATION_TYPE_SLEEPTIMER_UPDATE:
invalidateOptionsMenu();
break;
case PlaybackService.NOTIFICATION_TYPE_BUFFER_START:
onBufferStart();
break;
case PlaybackService.NOTIFICATION_TYPE_BUFFER_END:
onBufferEnd();
break;
}
} else {

View File

@ -16,6 +16,7 @@ import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.VideoView;
@ -30,6 +31,7 @@ public class VideoplayerActivity extends MediaplayerActivity implements
private LinearLayout videoOverlay;
private VideoView videoview;
private ProgressBar progressIndicator;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -64,6 +66,7 @@ public class VideoplayerActivity extends MediaplayerActivity implements
super.setupGUI();
videoOverlay = (LinearLayout) findViewById(R.id.overlay);
videoview = (VideoView) findViewById(R.id.videoview);
progressIndicator = (ProgressBar) findViewById(R.id.progressIndicator);
videoview.getHolder().addCallback(this);
videoview.setOnClickListener(playbuttonListener);
videoview.setOnTouchListener(onVideoviewTouched);
@ -85,14 +88,15 @@ public class VideoplayerActivity extends MediaplayerActivity implements
@Override
protected void postStatusMsg(int resId) {
// TODO Auto-generated method stub
if (resId == R.string.player_preparing_msg) {
progressIndicator.setVisibility(View.VISIBLE);
}
}
@Override
protected void clearStatusMsg() {
// TODO Auto-generated method stub
progressIndicator.setVisibility(View.INVISIBLE);
}
View.OnTouchListener onVideoviewTouched = new View.OnTouchListener() {
@ -229,6 +233,16 @@ public class VideoplayerActivity extends MediaplayerActivity implements
super.onStopTrackingTouch(seekBar);
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;
/** The state of the sleeptimer changed. */
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. */
public static boolean isRunning = false;
@ -171,6 +173,7 @@ public class PlaybackService extends Service {
player.setOnSeekCompleteListener(onSeekCompleteListener);
player.setOnErrorListener(onErrorListener);
player.setOnBufferingUpdateListener(onBufferingUpdateListener);
player.setOnInfoListener(onInfoListener);
mediaButtonReceiver = new ComponentName(getPackageName(),
MediaButtonReceiver.class.getName());
audioManager.registerMediaButtonEventReceiver(mediaButtonReceiver);
@ -356,6 +359,7 @@ public class PlaybackService extends Service {
player.setOnSeekCompleteListener(onSeekCompleteListener);
player.setOnErrorListener(onErrorListener);
player.setOnBufferingUpdateListener(onBufferingUpdateListener);
player.setOnInfoListener(onInfoListener);
status = PlayerStatus.STOPPED;
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 static final String TAG = "PlaybackService.onErrorListener";