diff options
author | daniel oeh <daniel.oeh@gmail.com> | 2012-08-04 19:07:47 +0200 |
---|---|---|
committer | daniel oeh <daniel.oeh@gmail.com> | 2012-08-04 19:07:47 +0200 |
commit | c1dcfe7aa6278907aaf9ee64ff9af8d1ec5125f8 (patch) | |
tree | ec6b89b0089efe8e8cc466091bd92940c536f064 /src | |
parent | a6bdf5bb30b4ef663b85141b82363df63a08c543 (diff) | |
download | AntennaPod-c1dcfe7aa6278907aaf9ee64ff9af8d1ec5125f8.zip |
Created superclass for mediaplayer, implemented Audioplayer
Diffstat (limited to 'src')
7 files changed, 485 insertions, 443 deletions
diff --git a/src/de/danoeh/antennapod/activity/AudioplayerActivity.java b/src/de/danoeh/antennapod/activity/AudioplayerActivity.java new file mode 100644 index 000000000..3f828796a --- /dev/null +++ b/src/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -0,0 +1,325 @@ +package de.danoeh.antennapod.activity; + +import android.annotation.SuppressLint; +import android.app.AlertDialog.Builder; +import android.media.MediaPlayer; +import android.os.AsyncTask; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentStatePagerAdapter; +import android.support.v4.view.ViewPager; +import android.util.Log; +import android.view.MotionEvent; +import android.view.SurfaceHolder; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ArrayAdapter; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.VideoView; + +import com.actionbarsherlock.app.SherlockFragmentActivity; +import com.actionbarsherlock.app.SherlockListFragment; +import com.viewpagerindicator.TabPageIndicator; + +import de.danoeh.antennapod.AppConfig; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.adapter.SCListAdapter; +import de.danoeh.antennapod.feed.SimpleChapter; +import de.danoeh.antennapod.fragment.CoverFragment; +import de.danoeh.antennapod.fragment.ItemDescriptionFragment; +import de.danoeh.antennapod.service.PlaybackService; +import de.danoeh.antennapod.service.PlayerStatus; + +public class AudioplayerActivity extends MediaplayerActivity implements + SurfaceHolder.Callback { + + final String TAG = "AudioplayerActivity"; + + /** True if video controls are currently visible. */ + private boolean videoControlsShowing = true; + private VideoControlsHider videoControlsToggler; + + // Widgets + private CoverFragment coverFragment; + private ItemDescriptionFragment descriptionFragment; + ViewPager viewpager; + TabPageIndicator tabs; + MediaPlayerPagerAdapter pagerAdapter; + VideoView videoview; + TextView txtvStatus; + LinearLayout videoOverlay; + + @Override + protected void onPause() { + super.onPause(); + if (PlaybackService.isRunning && playbackService != null + && playbackService.isPlayingVideo()) { + playbackService.stop(); + } + if (videoControlsToggler != null) { + videoControlsToggler.cancel(true); + } + finish(); + } + + @Override + protected void onAwaitingVideoSurface() { + // TODO Auto-generated method stub + + } + + @Override + protected void postStatusMsg(int resId) { + txtvStatus.setText(resId); + + } + + @Override + protected void clearStatusMsg() { + txtvStatus.setText(""); + + } + + @Override + protected void setupGUI() { + super.setupGUI(); + txtvStatus = (TextView) findViewById(R.id.txtvStatus); + viewpager = (ViewPager) findViewById(R.id.viewpager); + tabs = (TabPageIndicator) findViewById(R.id.tabs); + + int tabcount = 2; + if (media != null && media.getItem().getSimpleChapters() != null) { + tabcount = 3; + } + pagerAdapter = new MediaPlayerPagerAdapter(getSupportFragmentManager(), + tabcount, this); + viewpager.setAdapter(pagerAdapter); + tabs.setViewPager(viewpager); + } + + @Override + protected void onPositionObserverUpdate() { + super.onPositionObserverUpdate(); + pagerAdapter.notifyMediaPositionChanged(); + } + + @Override + protected void loadMediaInfo() { + super.loadMediaInfo(); + if (!mediaInfoLoaded && media != null) { + pagerAdapter.notifyDataSetChanged(); + + } + } + + View.OnTouchListener onVideoviewTouched = new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + if (videoControlsToggler != null) { + videoControlsToggler.cancel(true); + } + toggleVideoControlsVisibility(); + if (videoControlsShowing) { + setupVideoControlsToggler(); + } + + return true; + } else { + return false; + } + } + }; + + @SuppressLint("NewApi") + void setupVideoControlsToggler() { + if (videoControlsToggler != null) { + videoControlsToggler.cancel(true); + } + videoControlsToggler = new VideoControlsHider(); + if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) { + videoControlsToggler + .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } else { + videoControlsToggler.execute(); + } + } + + private void toggleVideoControlsVisibility() { + if (videoControlsShowing) { + getSupportActionBar().hide(); + videoOverlay.setVisibility(View.GONE); + } else { + getSupportActionBar().show(); + videoOverlay.setVisibility(View.VISIBLE); + } + videoControlsShowing = !videoControlsShowing; + } + + private boolean holderCreated; + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, + int height) { + holder.setFixedSize(width, height); + } + + @Override + public void surfaceCreated(SurfaceHolder holder) { + holderCreated = true; + if (AppConfig.DEBUG) + Log.d(TAG, "Videoview holder created"); + if (status == PlayerStatus.AWAITING_VIDEO_SURFACE) { + if (playbackService != null) { + playbackService.setVideoSurface(holder); + } else { + Log.e(TAG, + "Could'nt attach surface to mediaplayer - reference to service was null"); + } + } + + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + holderCreated = false; + } + + public static class MediaPlayerPagerAdapter extends + FragmentStatePagerAdapter { + private int numItems; + private AudioplayerActivity activity; + + private SherlockListFragment sCChapterFragment; + + private static final int POS_COVER = 0; + private static final int POS_DESCR = 1; + private static final int POS_CHAPTERS = 2; + + public MediaPlayerPagerAdapter(FragmentManager fm, int numItems, + AudioplayerActivity activity) { + super(fm); + this.numItems = numItems; + this.activity = activity; + } + + @Override + public Fragment getItem(int position) { + if (activity.media != null) { + switch (position) { + case POS_COVER: + activity.coverFragment = CoverFragment + .newInstance(activity.media.getItem()); + return activity.coverFragment; + case POS_DESCR: + activity.descriptionFragment = ItemDescriptionFragment + .newInstance(activity.media.getItem()); + return activity.descriptionFragment; + case POS_CHAPTERS: + sCChapterFragment = new SherlockListFragment() { + + @Override + public void onListItemClick(ListView l, View v, + int position, long id) { + super.onListItemClick(l, v, position, id); + SimpleChapter chapter = (SimpleChapter) this + .getListAdapter().getItem(position); + if (activity.playbackService != null) { + activity.playbackService.seekToChapter(chapter); + } + } + + }; + + sCChapterFragment.setListAdapter(new SCListAdapter( + activity, 0, activity.media.getItem() + .getSimpleChapters())); + + return sCChapterFragment; + default: + return CoverFragment.newInstance(null); + } + } else { + return CoverFragment.newInstance(null); + } + } + + @Override + public CharSequence getPageTitle(int position) { + switch (position) { + case POS_COVER: + return activity.getString(R.string.cover_label); + case POS_DESCR: + return activity.getString(R.string.shownotes_label); + case POS_CHAPTERS: + return activity.getString(R.string.chapters_label); + default: + return super.getPageTitle(position); + } + } + + @Override + public int getCount() { + return numItems; + } + + @Override + public int getItemPosition(Object object) { + return POSITION_UNCHANGED; + } + + public void notifyMediaPositionChanged() { + if (sCChapterFragment != null) { + ArrayAdapter<SimpleChapter> adapter = (ArrayAdapter<SimpleChapter>) sCChapterFragment + .getListAdapter(); + adapter.notifyDataSetChanged(); + } + } + + } + + // ---------------------- ASYNC TASKS + + /** Hides the videocontrols after a certain period of time. */ + public class VideoControlsHider extends AsyncTask<Void, Void, Void> { + @Override + protected void onCancelled() { + videoControlsToggler = null; + } + + @Override + protected void onPostExecute(Void result) { + videoControlsToggler = null; + } + + private static final int WAITING_INTERVALL = 5000; + private static final String TAG = "VideoControlsToggler"; + + @Override + protected void onProgressUpdate(Void... values) { + if (videoControlsShowing) { + if (AppConfig.DEBUG) + Log.d(TAG, "Hiding video controls"); + getSupportActionBar().hide(); + videoOverlay.setVisibility(View.GONE); + videoControlsShowing = false; + } + } + + @Override + protected Void doInBackground(Void... params) { + try { + Thread.sleep(WAITING_INTERVALL); + } catch (InterruptedException e) { + return null; + } + publishProgress(); + return null; + } + + } +} diff --git a/src/de/danoeh/antennapod/activity/MainActivity.java b/src/de/danoeh/antennapod/activity/MainActivity.java index c98db63c8..a8d436813 100644 --- a/src/de/danoeh/antennapod/activity/MainActivity.java +++ b/src/de/danoeh/antennapod/activity/MainActivity.java @@ -104,7 +104,7 @@ public class MainActivity extends SherlockFragmentActivity { startActivity(new Intent(this, PreferenceActivity.class)); return true; case R.id.show_player: - startActivity(new Intent(this, MediaplayerActivity.class)); + startActivity(new Intent(this, AudioplayerActivity.class)); return true; case R.id.opml_import: startActivity(new Intent(this, OpmlImportActivity.class)); diff --git a/src/de/danoeh/antennapod/activity/MediaplayerActivity.java b/src/de/danoeh/antennapod/activity/MediaplayerActivity.java index 1ce365c2a..90da4eed0 100644 --- a/src/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/src/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -2,7 +2,6 @@ package de.danoeh.antennapod.activity; import android.annotation.SuppressLint; import android.app.AlertDialog; -import android.app.AlertDialog.Builder; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -18,29 +17,19 @@ import android.media.MediaPlayer; import android.os.AsyncTask; import android.os.Bundle; import android.os.IBinder; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.util.Log; -import android.view.MotionEvent; -import android.view.SurfaceHolder; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; -import android.widget.AdapterView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.LinearLayout; -import android.widget.ListView; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.VideoView; import com.actionbarsherlock.app.SherlockFragmentActivity; -import com.actionbarsherlock.app.SherlockListFragment; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; @@ -49,13 +38,11 @@ import com.viewpagerindicator.TabPageIndicator; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.adapter.SCListAdapter; +import de.danoeh.antennapod.activity.AudioplayerActivity.MediaPlayerPagerAdapter; +import de.danoeh.antennapod.activity.AudioplayerActivity.MediaPositionObserver; import de.danoeh.antennapod.dialog.TimeDialog; import de.danoeh.antennapod.feed.FeedManager; import de.danoeh.antennapod.feed.FeedMedia; -import de.danoeh.antennapod.feed.SimpleChapter; -import de.danoeh.antennapod.fragment.CoverFragment; -import de.danoeh.antennapod.fragment.ItemDescriptionFragment; import de.danoeh.antennapod.service.PlaybackService; import de.danoeh.antennapod.service.PlayerStatus; import de.danoeh.antennapod.util.Converter; @@ -63,45 +50,129 @@ import de.danoeh.antennapod.util.MediaPlayerError; import de.danoeh.antennapod.util.StorageUtils; import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler; -public class MediaplayerActivity extends SherlockFragmentActivity implements - SurfaceHolder.Callback { +public abstract class MediaplayerActivity extends SherlockFragmentActivity { + private static final String TAG = "MediaplayerActivity"; - private final String TAG = "MediaplayerActivity"; + static final int DEFAULT_SEEK_DELTA = 30000; - private static final int DEFAULT_SEEK_DELTA = 30000; // Seek-Delta to use - // when using FF or - // Rev Buttons - /** Current screen orientation. */ - private int orientation; - - /** True if video controls are currently visible. */ - private boolean videoControlsShowing = true; /** True if media information was loaded. */ - private boolean mediaInfoLoaded = false; - - private PlaybackService playbackService; - private MediaPositionObserver positionObserver; - private VideoControlsHider videoControlsToggler; - - private FeedMedia media; - private PlayerStatus status; - private FeedManager manager; - - // Widgets - private CoverFragment coverFragment; - private ItemDescriptionFragment descriptionFragment; - private ViewPager viewpager; - private TabPageIndicator tabs; - private MediaPlayerPagerAdapter pagerAdapter; - private VideoView videoview; - private TextView txtvStatus; - private TextView txtvPosition; - private TextView txtvLength; - private SeekBar sbPosition; - private ImageButton butPlay; - private ImageButton butRev; - private ImageButton butFF; - private LinearLayout videoOverlay; + protected boolean mediaInfoLoaded = false; + protected PlaybackService playbackService; + protected MediaPositionObserver positionObserver; + protected FeedMedia media; + protected PlayerStatus status; + protected FeedManager manager; + + protected TextView txtvPosition; + protected TextView txtvLength; + protected SeekBar sbPosition; + protected ImageButton butPlay; + protected ImageButton butRev; + protected ImageButton butFF; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (AppConfig.DEBUG) + Log.d(TAG, "Creating Activity"); + StorageUtils.checkStorageAvailability(this); + + orientation = getResources().getConfiguration().orientation; + manager = FeedManager.getInstance(); + getWindow().setFormat(PixelFormat.TRANSPARENT); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + bindToService(); + } + + protected OnClickListener playbuttonListener = new OnClickListener() { + @Override + public void onClick(View v) { + if (status == PlayerStatus.PLAYING) { + playbackService.pause(true); + } else if (status == PlayerStatus.PAUSED + || status == PlayerStatus.PREPARED) { + playbackService.play(); + } + } + }; + protected ServiceConnection mConnection = new ServiceConnection() { + public void onServiceConnected(ComponentName className, IBinder service) { + playbackService = ((PlaybackService.LocalBinder) service) + .getService(); + + registerReceiver(statusUpdate, new IntentFilter( + PlaybackService.ACTION_PLAYER_STATUS_CHANGED)); + + registerReceiver(notificationReceiver, new IntentFilter( + PlaybackService.ACTION_PLAYER_NOTIFICATION)); + + queryService(); + if (AppConfig.DEBUG) + Log.d(TAG, "Connection to Service established"); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + playbackService = null; + if (AppConfig.DEBUG) + Log.d(TAG, "Disconnected from Service"); + + } + }; + protected BroadcastReceiver statusUpdate = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (AppConfig.DEBUG) + Log.d(TAG, "Received statusUpdate Intent."); + status = playbackService.getStatus(); + handleStatus(); + } + }; + protected BroadcastReceiver notificationReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + int type = intent.getIntExtra( + PlaybackService.EXTRA_NOTIFICATION_TYPE, -1); + int code = intent.getIntExtra( + PlaybackService.EXTRA_NOTIFICATION_CODE, -1); + if (code != -1 && type != -1) { + switch (type) { + case PlaybackService.NOTIFICATION_TYPE_ERROR: + handleError(code); + break; + case PlaybackService.NOTIFICATION_TYPE_BUFFER_UPDATE: + if (sbPosition != null) { + float progress = ((float) code) / 100; + sbPosition.setSecondaryProgress((int) progress + * sbPosition.getMax()); + } + break; + case PlaybackService.NOTIFICATION_TYPE_RELOAD: + if (positionObserver != null) { + positionObserver.cancel(true); + positionObserver = null; + } + mediaInfoLoaded = false; + queryService(); + + break; + case PlaybackService.NOTIFICATION_TYPE_SLEEPTIMER_UPDATE: + invalidateOptionsMenu(); + break; + } + + } else { + if (AppConfig.DEBUG) + Log.d(TAG, "Bad arguments. Won't handle intent"); + } + + } + + }; + + /** Current screen orientation. */ + protected int orientation; @Override protected void onStop() { @@ -231,45 +302,11 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - if (AppConfig.DEBUG) - Log.d(TAG, "Configuration changed"); - orientation = newConfig.orientation; - if (positionObserver != null) { - positionObserver.cancel(true); - } - setupGUI(); - handleStatus(); + // ignore orientation change } - @Override - protected void onPause() { - super.onPause(); - if (PlaybackService.isRunning && playbackService != null - && playbackService.isPlayingVideo()) { - playbackService.stop(); - } - if (videoControlsToggler != null) { - videoControlsToggler.cancel(true); - } - finish(); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (AppConfig.DEBUG) - Log.d(TAG, "Creating Activity"); - StorageUtils.checkStorageAvailability(this); - - orientation = getResources().getConfiguration().orientation; - manager = FeedManager.getInstance(); - getWindow().setFormat(PixelFormat.TRANSPARENT); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - bindToService(); - } - - private void bindToService() { + protected void bindToService() { Intent serviceIntent = new Intent(this, PlaybackService.class); boolean bound = false; if (!PlaybackService.isRunning) { @@ -310,10 +347,10 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements switch (status) { case ERROR: - setStatusMsg(R.string.player_error_msg, View.VISIBLE); + postStatusMsg(R.string.player_error_msg); break; case PAUSED: - setStatusMsg(R.string.player_paused_msg, View.VISIBLE); + postStatusMsg(R.string.player_paused_msg); loadMediaInfo(); if (positionObserver != null) { positionObserver.cancel(true); @@ -322,40 +359,45 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements butPlay.setImageResource(R.drawable.av_play); break; case PLAYING: - setStatusMsg(R.string.player_playing_msg, View.INVISIBLE); + clearStatusMsg(); loadMediaInfo(); setupPositionObserver(); butPlay.setImageResource(R.drawable.av_pause); break; case PREPARING: - setStatusMsg(R.string.player_preparing_msg, View.VISIBLE); + postStatusMsg(R.string.player_preparing_msg); loadMediaInfo(); break; case STOPPED: - setStatusMsg(R.string.player_stopped_msg, View.VISIBLE); + postStatusMsg(R.string.player_stopped_msg); break; case PREPARED: loadMediaInfo(); - setStatusMsg(R.string.player_ready_msg, View.VISIBLE); + postStatusMsg(R.string.player_ready_msg); butPlay.setImageResource(R.drawable.av_play); break; case SEEKING: - setStatusMsg(R.string.player_seeking_msg, View.VISIBLE); + postStatusMsg(R.string.player_seeking_msg); break; case AWAITING_VIDEO_SURFACE: - if (AppConfig.DEBUG) - Log.d(TAG, "Preparing video playback"); - this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + onAwaitingVideoSurface(); + break; } } - - private void setStatusMsg(int resId, int visibility) { - if (orientation == Configuration.ORIENTATION_PORTRAIT) { - if (visibility == View.VISIBLE) { - txtvStatus.setText(resId); - } - txtvStatus.setVisibility(visibility); - } + + protected abstract void onAwaitingVideoSurface(); + + protected abstract void postStatusMsg(int resId); + + protected abstract void clearStatusMsg(); + + protected void onPositionObserverUpdate() { + int currentPosition = playbackService.getPlayer().getCurrentPosition(); + media.setPosition(currentPosition); + txtvPosition.setText(Converter.getDurationStringLong(currentPosition)); + txtvLength.setText(Converter.getDurationStringLong(playbackService + .getPlayer().getDuration())); + updateProgressbarPosition(); } @SuppressLint("NewApi") @@ -368,16 +410,7 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements @Override protected void onProgressUpdate(Void... v) { super.onProgressUpdate(); - int currentPosition = playbackService.getPlayer() - .getCurrentPosition(); - media.setPosition(currentPosition); - txtvPosition.setText(Converter - .getDurationStringLong(currentPosition)); - txtvLength.setText(Converter - .getDurationStringLong(playbackService.getPlayer() - .getDuration())); - updateProgressbarPosition(); - pagerAdapter.notifyMediaPositionChanged(); + onPositionObserverUpdate(); } }; @@ -401,7 +434,7 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements sbPosition.setProgress((int) (progress * sbPosition.getMax())); } - private void loadMediaInfo() { + protected void loadMediaInfo() { if (!mediaInfoLoaded) { if (AppConfig.DEBUG) Log.d(TAG, "Loading media info"); @@ -409,11 +442,6 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements getSupportActionBar().setSubtitle(media.getItem().getTitle()); getSupportActionBar().setTitle( media.getItem().getFeed().getTitle()); - if (orientation == Configuration.ORIENTATION_PORTRAIT) { - pagerAdapter.notifyDataSetChanged(); - - } - txtvPosition.setText(Converter.getDurationStringLong((media .getPosition()))); @@ -430,7 +458,7 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements } } - private void setupGUI() { + protected void setupGUI() { setContentView(R.layout.mediaplayer_activity); sbPosition = (SeekBar) findViewById(R.id.sbPosition); txtvPosition = (TextView) findViewById(R.id.txtvPosition); @@ -497,21 +525,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements } }); - // PORTRAIT ORIENTATION SETUP - if (orientation == Configuration.ORIENTATION_PORTRAIT) { - txtvStatus = (TextView) findViewById(R.id.txtvStatus); - viewpager = (ViewPager) findViewById(R.id.viewpager); - tabs = (TabPageIndicator) findViewById(R.id.tabs); - int tabcount = 2; - if (media != null && media.getItem().getSimpleChapters() != null) { - tabcount = 3; - } - pagerAdapter = new MediaPlayerPagerAdapter( - getSupportFragmentManager(), tabcount, this); - viewpager.setAdapter(pagerAdapter); - tabs.setViewPager(viewpager); } else { videoOverlay = (LinearLayout) findViewById(R.id.overlay); videoview = (VideoView) findViewById(R.id.videoview); @@ -524,64 +539,7 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements } } - private OnClickListener playbuttonListener = new OnClickListener() { - @Override - public void onClick(View v) { - if (status == PlayerStatus.PLAYING) { - playbackService.pause(true); - } else if (status == PlayerStatus.PAUSED - || status == PlayerStatus.PREPARED) { - playbackService.play(); - } - } - }; - - private View.OnTouchListener onVideoviewTouched = new View.OnTouchListener() { - - @Override - public boolean onTouch(View v, MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_DOWN) { - if (videoControlsToggler != null) { - videoControlsToggler.cancel(true); - } - toggleVideoControlsVisibility(); - if (videoControlsShowing) { - setupVideoControlsToggler(); - } - - return true; - } else { - return false; - } - } - }; - - @SuppressLint("NewApi") - private void setupVideoControlsToggler() { - if (videoControlsToggler != null) { - videoControlsToggler.cancel(true); - } - videoControlsToggler = new VideoControlsHider(); - if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) { - videoControlsToggler - .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - } else { - videoControlsToggler.execute(); - } - } - - private void toggleVideoControlsVisibility() { - if (videoControlsShowing) { - getSupportActionBar().hide(); - videoOverlay.setVisibility(View.GONE); - } else { - getSupportActionBar().show(); - videoOverlay.setVisibility(View.VISIBLE); - } - videoControlsShowing = !videoControlsShowing; - } - - private void handleError(int errorCode) { + void handleError(int errorCode) { final AlertDialog.Builder errorDialog = new AlertDialog.Builder(this); errorDialog.setTitle(R.string.error_label); errorDialog @@ -597,36 +555,11 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements errorDialog.create().show(); } - private ServiceConnection mConnection = new ServiceConnection() { - public void onServiceConnected(ComponentName className, IBinder service) { - playbackService = ((PlaybackService.LocalBinder) service) - .getService(); - - registerReceiver(statusUpdate, new IntentFilter( - PlaybackService.ACTION_PLAYER_STATUS_CHANGED)); - - registerReceiver(notificationReceiver, new IntentFilter( - PlaybackService.ACTION_PLAYER_NOTIFICATION)); - - queryService(); - if (AppConfig.DEBUG) - Log.d(TAG, "Connection to Service established"); - } - - @Override - public void onServiceDisconnected(ComponentName name) { - playbackService = null; - if (AppConfig.DEBUG) - Log.d(TAG, "Disconnected from Service"); - - } - }; - /** * Called when connection to playback service has been established or * information has to be refreshed */ - private void queryService() { + void queryService() { if (AppConfig.DEBUG) Log.d(TAG, "Querying service info"); if (playbackService != null) { @@ -660,183 +593,6 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements } } - private BroadcastReceiver statusUpdate = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (AppConfig.DEBUG) - Log.d(TAG, "Received statusUpdate Intent."); - status = playbackService.getStatus(); - handleStatus(); - } - }; - - private BroadcastReceiver notificationReceiver = new BroadcastReceiver() { - - @Override - public void onReceive(Context context, Intent intent) { - int type = intent.getIntExtra( - PlaybackService.EXTRA_NOTIFICATION_TYPE, -1); - int code = intent.getIntExtra( - PlaybackService.EXTRA_NOTIFICATION_CODE, -1); - if (code != -1 && type != -1) { - switch (type) { - case PlaybackService.NOTIFICATION_TYPE_ERROR: - handleError(code); - break; - case PlaybackService.NOTIFICATION_TYPE_BUFFER_UPDATE: - if (sbPosition != null) { - float progress = ((float) code) / 100; - sbPosition.setSecondaryProgress((int) progress - * sbPosition.getMax()); - } - break; - case PlaybackService.NOTIFICATION_TYPE_RELOAD: - if (positionObserver != null) { - positionObserver.cancel(true); - positionObserver = null; - } - mediaInfoLoaded = false; - queryService(); - - break; - case PlaybackService.NOTIFICATION_TYPE_SLEEPTIMER_UPDATE: - invalidateOptionsMenu(); - break; - } - - } else { - if (AppConfig.DEBUG) - Log.d(TAG, "Bad arguments. Won't handle intent"); - } - - } - - }; - - private boolean holderCreated; - - @Override - public void surfaceChanged(SurfaceHolder holder, int format, int width, - int height) { - holder.setFixedSize(width, height); - } - - @Override - public void surfaceCreated(SurfaceHolder holder) { - holderCreated = true; - if (AppConfig.DEBUG) - Log.d(TAG, "Videoview holder created"); - if (status == PlayerStatus.AWAITING_VIDEO_SURFACE) { - if (playbackService != null) { - playbackService.setVideoSurface(holder); - } else { - Log.e(TAG, - "Could'nt attach surface to mediaplayer - reference to service was null"); - } - } - - } - - @Override - public void surfaceDestroyed(SurfaceHolder holder) { - holderCreated = false; - } - - public static class MediaPlayerPagerAdapter extends - FragmentStatePagerAdapter { - private int numItems; - private MediaplayerActivity activity; - - private SherlockListFragment sCChapterFragment; - - private static final int POS_COVER = 0; - private static final int POS_DESCR = 1; - private static final int POS_CHAPTERS = 2; - - public MediaPlayerPagerAdapter(FragmentManager fm, int numItems, - MediaplayerActivity activity) { - super(fm); - this.numItems = numItems; - this.activity = activity; - } - - @Override - public Fragment getItem(int position) { - if (activity.media != null) { - switch (position) { - case POS_COVER: - activity.coverFragment = CoverFragment - .newInstance(activity.media.getItem()); - return activity.coverFragment; - case POS_DESCR: - activity.descriptionFragment = ItemDescriptionFragment - .newInstance(activity.media.getItem()); - return activity.descriptionFragment; - case POS_CHAPTERS: - sCChapterFragment = new SherlockListFragment() { - - @Override - public void onListItemClick(ListView l, View v, - int position, long id) { - super.onListItemClick(l, v, position, id); - SimpleChapter chapter = (SimpleChapter) this - .getListAdapter().getItem(position); - if (activity.playbackService != null) { - activity.playbackService.seekToChapter(chapter); - } - } - - }; - - sCChapterFragment.setListAdapter(new SCListAdapter( - activity, 0, activity.media.getItem() - .getSimpleChapters())); - - return sCChapterFragment; - default: - return CoverFragment.newInstance(null); - } - } else { - return CoverFragment.newInstance(null); - } - } - - @Override - public CharSequence getPageTitle(int position) { - switch (position) { - case POS_COVER: - return activity.getString(R.string.cover_label); - case POS_DESCR: - return activity.getString(R.string.shownotes_label); - case POS_CHAPTERS: - return activity.getString(R.string.chapters_label); - default: - return super.getPageTitle(position); - } - } - - @Override - public int getCount() { - return numItems; - } - - @Override - public int getItemPosition(Object object) { - return POSITION_UNCHANGED; - } - - public void notifyMediaPositionChanged() { - if (sCChapterFragment != null) { - ArrayAdapter<SimpleChapter> adapter = (ArrayAdapter<SimpleChapter>) sCChapterFragment - .getListAdapter(); - adapter.notifyDataSetChanged(); - } - } - - } - - // ---------------------- ASYNC TASKS - /** Refreshes the current position of the media file that is playing. */ public class MediaPositionObserver extends AsyncTask<MediaPlayer, Void, Void> { @@ -879,43 +635,4 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements } } - /** Hides the videocontrols after a certain period of time. */ - public class VideoControlsHider extends AsyncTask<Void, Void, Void> { - @Override - protected void onCancelled() { - videoControlsToggler = null; - } - - @Override - protected void onPostExecute(Void result) { - videoControlsToggler = null; - } - - private static final int WAITING_INTERVALL = 5000; - private static final String TAG = "VideoControlsToggler"; - - @Override - protected void onProgressUpdate(Void... values) { - if (videoControlsShowing) { - if (AppConfig.DEBUG) - Log.d(TAG, "Hiding video controls"); - getSupportActionBar().hide(); - videoOverlay.setVisibility(View.GONE); - videoControlsShowing = false; - } - } - - @Override - protected Void doInBackground(Void... params) { - try { - Thread.sleep(WAITING_INTERVALL); - } catch (InterruptedException e) { - return null; - } - publishProgress(); - return null; - } - - } - } diff --git a/src/de/danoeh/antennapod/feed/FeedManager.java b/src/de/danoeh/antennapod/feed/FeedManager.java index 853890308..5b4e12635 100644 --- a/src/de/danoeh/antennapod/feed/FeedManager.java +++ b/src/de/danoeh/antennapod/feed/FeedManager.java @@ -7,7 +7,7 @@ import java.util.Date; import java.util.List; import de.danoeh.antennapod.AppConfig; -import de.danoeh.antennapod.activity.MediaplayerActivity; +import de.danoeh.antennapod.activity.AudioplayerActivity; import de.danoeh.antennapod.asynctask.DownloadStatus; import de.danoeh.antennapod.service.PlaybackService; import de.danoeh.antennapod.storage.*; @@ -106,7 +106,7 @@ public class FeedManager { context.startService(launchIntent); if (showPlayer) { // Launch Mediaplayer - Intent playerIntent = new Intent(context, MediaplayerActivity.class); + Intent playerIntent = new Intent(context, AudioplayerActivity.class); context.startActivity(playerIntent); } } diff --git a/src/de/danoeh/antennapod/service/DownloadService.java b/src/de/danoeh/antennapod/service/DownloadService.java index c7a1ce6f6..2f2bebfd3 100644 --- a/src/de/danoeh/antennapod/service/DownloadService.java +++ b/src/de/danoeh/antennapod/service/DownloadService.java @@ -19,7 +19,7 @@ import org.xml.sax.SAXException; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.activity.DownloadActivity; -import de.danoeh.antennapod.activity.MediaplayerActivity; +import de.danoeh.antennapod.activity.AudioplayerActivity; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.asynctask.DownloadObserver; import de.danoeh.antennapod.asynctask.DownloadStatus; diff --git a/src/de/danoeh/antennapod/service/PlaybackService.java b/src/de/danoeh/antennapod/service/PlaybackService.java index af8b50060..373af2957 100644 --- a/src/de/danoeh/antennapod/service/PlaybackService.java +++ b/src/de/danoeh/antennapod/service/PlaybackService.java @@ -27,7 +27,7 @@ import android.view.SurfaceHolder; import de.danoeh.antennapod.AppConfig; import de.danoeh.antennapod.PodcastApp; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.activity.MediaplayerActivity; +import de.danoeh.antennapod.activity.AudioplayerActivity; import de.danoeh.antennapod.feed.Feed; import de.danoeh.antennapod.feed.FeedItem; import de.danoeh.antennapod.feed.FeedManager; @@ -563,7 +563,7 @@ public class PlaybackService extends Service { /** Prepares notification and starts the service in the foreground. */ private void setupNotification() { PendingIntent pIntent = PendingIntent.getActivity(this, 0, new Intent( - this, MediaplayerActivity.class), + this, AudioplayerActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); Bitmap icon = BitmapFactory.decodeResource(null, diff --git a/src/de/danoeh/antennapod/service/PlayerWidgetService.java b/src/de/danoeh/antennapod/service/PlayerWidgetService.java index 0b2c91ffb..b574ef0d7 100644 --- a/src/de/danoeh/antennapod/service/PlayerWidgetService.java +++ b/src/de/danoeh/antennapod/service/PlayerWidgetService.java @@ -12,7 +12,7 @@ import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.RemoteViews; -import de.danoeh.antennapod.activity.MediaplayerActivity; +import de.danoeh.antennapod.activity.AudioplayerActivity; import de.danoeh.antennapod.feed.FeedMedia; import de.danoeh.antennapod.receiver.MediaButtonReceiver; import de.danoeh.antennapod.receiver.PlayerWidget; @@ -68,7 +68,7 @@ public class PlayerWidgetService extends Service { RemoteViews views = new RemoteViews(getPackageName(), R.layout.player_widget); PendingIntent startMediaplayer = PendingIntent.getActivity(this, 0, - new Intent(this, MediaplayerActivity.class), 0); + new Intent(this, AudioplayerActivity.class), 0); views.setOnClickPendingIntent(R.id.layout_left, startMediaplayer); if (playbackService != null) { |