implemented chapterlist in mediaplayer
This commit is contained in:
parent
ea2c8e6e4b
commit
81e03efc3d
|
@ -1,15 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/txtvTitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:textStyle="bold" />
|
||||
android:layout_height="48dp" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/txtvStart"
|
||||
|
@ -17,6 +9,17 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_margin="8dp"
|
||||
android:textColor="@color/gray" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/txtvTitle"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_margin="8dp"
|
||||
android:layout_toLeftOf="@id/txtvStart"
|
||||
android:textStyle="bold" />
|
||||
|
||||
</RelativeLayout>
|
|
@ -125,5 +125,6 @@
|
|||
<string name="size_prefix">Size:\u0020</string>
|
||||
<string name="processing_label">Processing</string>
|
||||
<string name="flattring_label">flattring</string>
|
||||
<string name="chapters_label">Chapters</string>
|
||||
|
||||
</resources>
|
|
@ -28,14 +28,17 @@ import android.view.SurfaceHolder;
|
|||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.WindowManager;
|
||||
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;
|
||||
|
@ -44,8 +47,10 @@ 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.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;
|
||||
|
@ -98,7 +103,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Activity stopped");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Activity stopped");
|
||||
try {
|
||||
unregisterReceiver(statusUpdate);
|
||||
} catch (IllegalArgumentException e) {
|
||||
|
@ -157,7 +163,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Resuming Activity");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Resuming Activity");
|
||||
StorageUtils.checkStorageAvailability(this);
|
||||
bindToService();
|
||||
|
||||
|
@ -166,7 +173,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Configuration changed");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Configuration changed");
|
||||
orientation = newConfig.orientation;
|
||||
if (positionObserver != null) {
|
||||
positionObserver.cancel(true);
|
||||
|
@ -192,7 +200,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Creating Activity");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Creating Activity");
|
||||
StorageUtils.checkStorageAvailability(this);
|
||||
|
||||
orientation = getResources().getConfiguration().orientation;
|
||||
|
@ -206,7 +215,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
Intent serviceIntent = new Intent(this, PlaybackService.class);
|
||||
boolean bound = false;
|
||||
if (!PlaybackService.isRunning) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Trying to restore last played media");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Trying to restore last played media");
|
||||
SharedPreferences prefs = getApplicationContext()
|
||||
.getSharedPreferences(PodcastApp.PREF_NAME, 0);
|
||||
long mediaId = prefs.getLong(PlaybackService.PREF_LAST_PLAYED_ID,
|
||||
|
@ -225,7 +235,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
bound = bindService(serviceIntent, mConnection,
|
||||
Context.BIND_AUTO_CREATE);
|
||||
} else {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "No last played media found");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "No last played media found");
|
||||
status = PlayerStatus.STOPPED;
|
||||
setupGUI();
|
||||
handleStatus();
|
||||
|
@ -233,7 +244,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
} else {
|
||||
bound = bindService(serviceIntent, mConnection, 0);
|
||||
}
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Result for service binding: " + bound);
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Result for service binding: " + bound);
|
||||
}
|
||||
|
||||
private void handleStatus() {
|
||||
|
@ -273,7 +285,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
setStatusMsg(R.string.player_seeking_msg, View.VISIBLE);
|
||||
break;
|
||||
case AWAITING_VIDEO_SURFACE:
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Preparing video playback");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Preparing video playback");
|
||||
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
}
|
||||
}
|
||||
|
@ -290,7 +303,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
@SuppressLint("NewApi")
|
||||
private void setupPositionObserver() {
|
||||
if (positionObserver == null || positionObserver.isCancelled()) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Setting up position observer");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Setting up position observer");
|
||||
positionObserver = new MediaPositionObserver() {
|
||||
|
||||
@Override
|
||||
|
@ -303,6 +317,7 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
.getDurationStringLong(playbackService.getPlayer()
|
||||
.getDuration()));
|
||||
updateProgressbarPosition();
|
||||
pagerAdapter.notifyMediaPositionChanged();
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -318,7 +333,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
}
|
||||
|
||||
private void updateProgressbarPosition() {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Updating progressbar info");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Updating progressbar info");
|
||||
MediaPlayer player = playbackService.getPlayer();
|
||||
float progress = ((float) player.getCurrentPosition())
|
||||
/ player.getDuration();
|
||||
|
@ -327,7 +343,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
|
||||
private void loadMediaInfo() {
|
||||
if (!mediaInfoLoaded) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Loading media info");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Loading media info");
|
||||
if (media != null) {
|
||||
getSupportActionBar().setSubtitle(media.getItem().getTitle());
|
||||
getSupportActionBar().setTitle(
|
||||
|
@ -424,8 +441,13 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
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(), 2, this);
|
||||
getSupportFragmentManager(), tabcount, this);
|
||||
viewpager.setAdapter(pagerAdapter);
|
||||
tabs.setViewPager(viewpager);
|
||||
} else {
|
||||
|
@ -479,8 +501,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
}
|
||||
videoControlsToggler = new VideoControlsHider();
|
||||
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {
|
||||
videoControlsToggler.executeOnExecutor(
|
||||
AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
videoControlsToggler
|
||||
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
||||
} else {
|
||||
videoControlsToggler.execute();
|
||||
}
|
||||
|
@ -525,13 +547,15 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
PlaybackService.ACTION_PLAYER_NOTIFICATION));
|
||||
|
||||
queryService();
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Connection to Service established");
|
||||
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");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Disconnected from Service");
|
||||
|
||||
}
|
||||
};
|
||||
|
@ -541,7 +565,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
* information has to be refreshed
|
||||
*/
|
||||
private void queryService() {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Querying service info");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Querying service info");
|
||||
if (playbackService != null) {
|
||||
int requestedOrientation;
|
||||
status = playbackService.getStatus();
|
||||
|
@ -558,12 +583,14 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
// check if orientation is correct
|
||||
if ((requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE && orientation == Configuration.ORIENTATION_LANDSCAPE)
|
||||
|| (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT && orientation == Configuration.ORIENTATION_PORTRAIT)) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Orientation correct");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Orientation correct");
|
||||
setupGUI();
|
||||
handleStatus();
|
||||
} else {
|
||||
if (AppConfig.DEBUG) Log.d(TAG,
|
||||
"Orientation incorrect, waiting for orientation change");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG,
|
||||
"Orientation incorrect, waiting for orientation change");
|
||||
}
|
||||
} else {
|
||||
Log.e(TAG,
|
||||
|
@ -574,7 +601,8 @@ 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.");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Received statusUpdate Intent.");
|
||||
status = playbackService.getStatus();
|
||||
handleStatus();
|
||||
}
|
||||
|
@ -612,7 +640,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
}
|
||||
|
||||
} else {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Bad arguments. Won't handle intent");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Bad arguments. Won't handle intent");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -630,7 +659,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
@Override
|
||||
public void surfaceCreated(SurfaceHolder holder) {
|
||||
holderCreated = true;
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Videoview holder created");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Videoview holder created");
|
||||
if (status == PlayerStatus.AWAITING_VIDEO_SURFACE) {
|
||||
if (playbackService != null) {
|
||||
playbackService.setVideoSurface(holder);
|
||||
|
@ -652,6 +682,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
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;
|
||||
|
@ -675,6 +707,26 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
activity.descriptionFragment = ItemDescriptionFragment
|
||||
.newInstance(activity.media.getItem(), true);
|
||||
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);
|
||||
}
|
||||
|
@ -690,6 +742,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
return activity.getString(R.string.cover_label);
|
||||
case POS_DESCR:
|
||||
return activity.getString(R.string.description_label);
|
||||
case POS_CHAPTERS:
|
||||
return activity.getString(R.string.chapters_label);
|
||||
default:
|
||||
return super.getPageTitle(position);
|
||||
}
|
||||
|
@ -705,6 +759,14 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
return POSITION_UNCHANGED;
|
||||
}
|
||||
|
||||
public void notifyMediaPositionChanged() {
|
||||
if (sCChapterFragment != null) {
|
||||
ArrayAdapter<SimpleChapter> adapter = (ArrayAdapter<SimpleChapter>) sCChapterFragment
|
||||
.getListAdapter();
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ---------------------- ASYNC TASKS
|
||||
|
@ -719,29 +781,34 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
|
||||
@Override
|
||||
protected void onCancelled() {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Task was cancelled");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Task was cancelled");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(MediaPlayer... p) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Background Task started");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Background Task started");
|
||||
player = p[0];
|
||||
try {
|
||||
while (player.isPlaying() && !isCancelled()) {
|
||||
try {
|
||||
Thread.sleep(WAITING_INTERVALL);
|
||||
} catch (InterruptedException e) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG,
|
||||
"Thread was interrupted while waiting. Finishing now");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG,
|
||||
"Thread was interrupted while waiting. Finishing now");
|
||||
return null;
|
||||
}
|
||||
publishProgress();
|
||||
|
||||
}
|
||||
} catch (IllegalStateException e) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "player is in illegal state, exiting now");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "player is in illegal state, exiting now");
|
||||
}
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Background Task finished");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Background Task finished");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -764,7 +831,8 @@ public class MediaplayerActivity extends SherlockFragmentActivity implements
|
|||
@Override
|
||||
protected void onProgressUpdate(Void... values) {
|
||||
if (videoControlsShowing) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Hiding video controls");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Hiding video controls");
|
||||
getSupportActionBar().hide();
|
||||
videoOverlay.setVisibility(View.GONE);
|
||||
videoControlsShowing = false;
|
||||
|
|
|
@ -32,6 +32,7 @@ import de.danoeh.antennapod.feed.Feed;
|
|||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedManager;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.feed.SimpleChapter;
|
||||
import de.danoeh.antennapod.receiver.MediaButtonReceiver;
|
||||
import de.danoeh.antennapod.receiver.PlayerWidget;
|
||||
|
||||
|
@ -111,7 +112,8 @@ public class PlaybackService extends Service {
|
|||
isRunning = true;
|
||||
pausedBecauseOfTransientAudiofocusLoss = false;
|
||||
status = PlayerStatus.STOPPED;
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Service created.");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Service created.");
|
||||
audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
|
||||
manager = FeedManager.getInstance();
|
||||
player = new MediaPlayer();
|
||||
|
@ -133,7 +135,8 @@ public class PlaybackService extends Service {
|
|||
super.onDestroy();
|
||||
isRunning = false;
|
||||
unregisterReceiver(headsetDisconnected);
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Service is about to be destroyed");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Service is about to be destroyed");
|
||||
audioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiver);
|
||||
audioManager.abandonAudioFocus(audioFocusChangeListener);
|
||||
player.release();
|
||||
|
@ -152,24 +155,28 @@ public class PlaybackService extends Service {
|
|||
public void onAudioFocusChange(int focusChange) {
|
||||
switch (focusChange) {
|
||||
case AudioManager.AUDIOFOCUS_LOSS:
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Lost audio focus");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Lost audio focus");
|
||||
pause(true);
|
||||
stopSelf();
|
||||
break;
|
||||
case AudioManager.AUDIOFOCUS_GAIN:
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Gained audio focus");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Gained audio focus");
|
||||
if (pausedBecauseOfTransientAudiofocusLoss) {
|
||||
play();
|
||||
}
|
||||
break;
|
||||
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Lost audio focus temporarily. Ducking...");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Lost audio focus temporarily. Ducking...");
|
||||
audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
|
||||
AudioManager.ADJUST_LOWER, 0);
|
||||
pausedBecauseOfTransientAudiofocusLoss = true;
|
||||
break;
|
||||
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Lost audio focus temporarily. Pausing...");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Lost audio focus temporarily. Pausing...");
|
||||
pause(false);
|
||||
pausedBecauseOfTransientAudiofocusLoss = true;
|
||||
}
|
||||
|
@ -180,7 +187,8 @@ public class PlaybackService extends Service {
|
|||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
int keycode = intent.getIntExtra(MediaButtonReceiver.EXTRA_KEYCODE, -1);
|
||||
if (keycode != -1) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Received media button event");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Received media button event");
|
||||
handleKeycode(keycode);
|
||||
} else {
|
||||
|
||||
|
@ -257,7 +265,8 @@ public class PlaybackService extends Service {
|
|||
* mediaplayer.
|
||||
*/
|
||||
public void setVideoSurface(SurfaceHolder sh) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Setting display");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Setting display");
|
||||
player.setDisplay(null);
|
||||
player.setDisplay(sh);
|
||||
if (status == PlayerStatus.STOPPED
|
||||
|
@ -360,7 +369,8 @@ public class PlaybackService extends Service {
|
|||
private MediaPlayer.OnPreparedListener preparedListener = new MediaPlayer.OnPreparedListener() {
|
||||
@Override
|
||||
public void onPrepared(MediaPlayer mp) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Resource prepared");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Resource prepared");
|
||||
mp.seekTo(media.getPosition());
|
||||
setStatus(PlayerStatus.PREPARED);
|
||||
if (startWhenPrepared) {
|
||||
|
@ -399,7 +409,8 @@ public class PlaybackService extends Service {
|
|||
|
||||
@Override
|
||||
public void onCompletion(MediaPlayer mp) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Playback completed");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Playback completed");
|
||||
// Save state
|
||||
positionSaver.cancel(true);
|
||||
media.setPosition(0);
|
||||
|
@ -416,14 +427,16 @@ public class PlaybackService extends Service {
|
|||
.getBoolean(PodcastApp.PREF_FOLLOW_QUEUE, false);
|
||||
FeedItem nextItem = manager.getFirstQueueItem();
|
||||
if (isInQueue && followQueue && nextItem != null) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Loading next item in queue");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Loading next item in queue");
|
||||
media = nextItem.getMedia();
|
||||
feed = nextItem.getFeed();
|
||||
shouldStream = !media.isDownloaded();
|
||||
resetVideoSurface();
|
||||
sendNotificationBroadcast(NOTIFICATION_TYPE_RELOAD, 0);
|
||||
} else {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Stopping playback");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Stopping playback");
|
||||
stopWidgetUpdater();
|
||||
setStatus(PlayerStatus.STOPPED);
|
||||
stopForeground(true);
|
||||
|
@ -449,7 +462,8 @@ public class PlaybackService extends Service {
|
|||
*/
|
||||
public void pause(boolean abandonFocus) {
|
||||
if (player.isPlaying()) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Pausing playback.");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Pausing playback.");
|
||||
player.pause();
|
||||
if (abandonFocus) {
|
||||
audioManager.abandonAudioFocus(audioFocusChangeListener);
|
||||
|
@ -478,8 +492,10 @@ public class PlaybackService extends Service {
|
|||
AudioManager.AUDIOFOCUS_GAIN);
|
||||
|
||||
if (focusGained == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Audiofocus successfully requested");
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Resuming/Starting playback");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Audiofocus successfully requested");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Resuming/Starting playback");
|
||||
SharedPreferences.Editor editor = getApplicationContext()
|
||||
.getSharedPreferences(PodcastApp.PREF_NAME, 0).edit();
|
||||
editor.putLong(PREF_LAST_PLAYED_ID, media.getId());
|
||||
|
@ -495,13 +511,15 @@ public class PlaybackService extends Service {
|
|||
setupNotification();
|
||||
pausedBecauseOfTransientAudiofocusLoss = false;
|
||||
} else {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Failed to request Audiofocus");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Failed to request Audiofocus");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setStatus(PlayerStatus newStatus) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Setting status to " + newStatus);
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Setting status to " + newStatus);
|
||||
status = newStatus;
|
||||
sendBroadcast(new Intent(ACTION_PLAYER_STATUS_CHANGED));
|
||||
updateWidget();
|
||||
|
@ -529,7 +547,8 @@ public class PlaybackService extends Service {
|
|||
.setSmallIcon(R.drawable.ic_stat_antenna);
|
||||
|
||||
startForeground(NOTIFICATION_ID, notificationBuilder.getNotification());
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Notification set up");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Notification set up");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -543,7 +562,8 @@ public class PlaybackService extends Service {
|
|||
}
|
||||
|
||||
public void seek(int i) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Seeking position " + i);
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Seeking position " + i);
|
||||
if (shouldStream) {
|
||||
statusBeforeSeek = status;
|
||||
setStatus(PlayerStatus.SEEKING);
|
||||
|
@ -552,9 +572,15 @@ public class PlaybackService extends Service {
|
|||
saveCurrentPosition();
|
||||
}
|
||||
|
||||
public void seekToChapter(SimpleChapter chapter) {
|
||||
seek((int) chapter.getStart());
|
||||
}
|
||||
|
||||
/** Saves the current position of the media file to the DB */
|
||||
private synchronized void saveCurrentPosition() {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Saving current position to " + player.getCurrentPosition());
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG,
|
||||
"Saving current position to " + player.getCurrentPosition());
|
||||
media.setPosition(player.getCurrentPosition());
|
||||
manager.setFeedMedia(this, media);
|
||||
}
|
||||
|
@ -577,7 +603,8 @@ public class PlaybackService extends Service {
|
|||
}
|
||||
|
||||
private void updateWidget() {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Sending widget update request");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Sending widget update request");
|
||||
PlaybackService.this.sendBroadcast(new Intent(
|
||||
PlayerWidget.FORCE_WIDGET_UPDATE));
|
||||
}
|
||||
|
@ -595,19 +622,22 @@ public class PlaybackService extends Service {
|
|||
if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
|
||||
int state = intent.getIntExtra("state", -1);
|
||||
if (state != -1) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Headset plug event. State is " + state);
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Headset plug event. State is " + state);
|
||||
boolean pauseOnDisconnect = PreferenceManager
|
||||
.getDefaultSharedPreferences(
|
||||
getApplicationContext())
|
||||
.getBoolean(
|
||||
PodcastApp.PREF_PAUSE_ON_HEADSET_DISCONNECT,
|
||||
false);
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "pauseOnDisconnect preference is "
|
||||
+ pauseOnDisconnect);
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "pauseOnDisconnect preference is "
|
||||
+ pauseOnDisconnect);
|
||||
if (state == UNPLUGGED && pauseOnDisconnect
|
||||
&& status == PlayerStatus.PLAYING) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG,
|
||||
"Pausing playback because headset was disconnected");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG,
|
||||
"Pausing playback because headset was disconnected");
|
||||
pause(true);
|
||||
}
|
||||
} else {
|
||||
|
@ -628,11 +658,13 @@ public class PlaybackService extends Service {
|
|||
Thread.sleep(WAITING_INTERVALL);
|
||||
saveCurrentPosition();
|
||||
} catch (InterruptedException e) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG,
|
||||
"Thread was interrupted while waiting. Finishing now...");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG,
|
||||
"Thread was interrupted while waiting. Finishing now...");
|
||||
return null;
|
||||
} catch (IllegalStateException e) {
|
||||
if (AppConfig.DEBUG) Log.d(TAG, "Player is in illegal state. Finishing now");
|
||||
if (AppConfig.DEBUG)
|
||||
Log.d(TAG, "Player is in illegal state. Finishing now");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -507,7 +507,7 @@ public class PodDBAdapter {
|
|||
public final Cursor getSimpleChaptersOfFeedItemCursor(final FeedItem item) {
|
||||
open();
|
||||
Cursor c = db
|
||||
.query(TABLE_NAME_SIMPLECHAPTERS, null, KEY_ID + "=?",
|
||||
.query(TABLE_NAME_SIMPLECHAPTERS, null, KEY_FEEDITEM + "=?",
|
||||
new String[] { String.valueOf(item.getId()) }, null,
|
||||
null, null);
|
||||
return c;
|
||||
|
|
Loading…
Reference in New Issue