Merge pull request #1820 from mfietz/issue/1793-player-switch

Switch audio player implementation immediately
This commit is contained in:
Tom Hennen 2016-03-25 08:31:24 -04:00
commit a2c1d6f9f7
11 changed files with 169 additions and 41 deletions

View File

@ -53,7 +53,10 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
super.setUp();
assertionError = null;
final Context context = getInstrumentation().getTargetContext();
// create new database
PodDBAdapter.init(context);
PodDBAdapter.deleteDatabase();
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();
@ -62,7 +65,6 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
httpServer = new HTTPBin();
httpServer.start();
final Context context = getInstrumentation().getTargetContext();
File cacheDir = context.getExternalFilesDir("testFiles");
if (cacheDir == null)
cacheDir = context.getExternalFilesDir("testFiles");
@ -167,6 +169,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -236,6 +243,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -308,6 +320,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -381,6 +398,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -448,6 +470,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -516,6 +543,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -586,6 +618,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -659,6 +696,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -707,6 +749,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -775,6 +822,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -880,6 +932,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -962,6 +1019,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {
@ -1056,6 +1118,11 @@ public class PlaybackServiceMediaPlayerTest extends InstrumentationTestCase {
}
@Override
public void setSpeedAbilityChanged() {
}
@Override
public void onBufferingUpdate(int percent) {

View File

@ -34,6 +34,7 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
super.setUp();
// create new database
PodDBAdapter.init(getInstrumentation().getTargetContext());
PodDBAdapter.deleteDatabase();
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();

View File

@ -58,7 +58,7 @@ public class DBNullCleanupAlgorithmTest extends InstrumentationTestCase {
assertTrue(destFolder.canWrite());
// create new database
PodDBAdapter.init(getInstrumentation().getTargetContext());
PodDBAdapter.init(context);
PodDBAdapter.deleteDatabase();
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();

View File

@ -39,7 +39,7 @@ public class DBTasksTest extends InstrumentationTestCase {
context = getInstrumentation().getTargetContext();
// create new database
PodDBAdapter.init(getInstrumentation().getTargetContext());
PodDBAdapter.init(context);
PodDBAdapter.deleteDatabase();
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();

View File

@ -41,10 +41,12 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
@Override
protected void setUp() throws Exception {
super.setUp();
uiTestUtils = new UITestUtils(getInstrumentation().getTargetContext());
Context context = getInstrumentation().getTargetContext();
uiTestUtils = new UITestUtils(context);
uiTestUtils.setup();
// create new database
PodDBAdapter.init(context);
PodDBAdapter.deleteDatabase();
PodDBAdapter adapter = PodDBAdapter.getInstance();
adapter.open();

View File

@ -173,12 +173,21 @@ public abstract class MediaplayerActivity extends AppCompatActivity implements O
super.setScreenOn(enable);
MediaplayerActivity.this.setScreenOn(enable);
}
};
@Override
public void onSetSpeedAbilityChanged() {
MediaplayerActivity.this.onSetSpeedAbilityChanged();
}
};
}
protected void onSetSpeedAbilityChanged() {
Log.d(TAG, "onSetSpeedAbilityChanged()");
updatePlaybackSpeedButton();
}
protected void onPlaybackSpeedChange() {
updateButPlaybackSpeed();
updatePlaybackSpeedButtonText();
}
protected void onServiceQueried() {
@ -628,25 +637,50 @@ public abstract class MediaplayerActivity extends AppCompatActivity implements O
if (media != null) {
onPositionObserverUpdate();
checkFavorite();
if(butPlaybackSpeed != null) {
if (controller == null) {
butPlaybackSpeed.setVisibility(View.GONE);
} else {
butPlaybackSpeed.setVisibility(View.VISIBLE);
if (controller.canSetPlaybackSpeed()) {
ViewCompat.setAlpha(butPlaybackSpeed, 1.0f);
} else {
ViewCompat.setAlpha(butPlaybackSpeed, 0.5f);
}
}
updateButPlaybackSpeed();
}
updatePlaybackSpeedButton();
return true;
} else {
return false;
}
}
private void updatePlaybackSpeedButton() {
if(butPlaybackSpeed == null) {
return;
}
if (controller == null) {
butPlaybackSpeed.setVisibility(View.GONE);
return;
}
updatePlaybackSpeedButtonText();
ViewCompat.setAlpha(butPlaybackSpeed, controller.canSetPlaybackSpeed() ? 1.0f : 0.5f);
butPlaybackSpeed.setVisibility(View.VISIBLE);
}
private void updatePlaybackSpeedButtonText() {
if(butPlaybackSpeed == null) {
return;
}
if (controller == null) {
butPlaybackSpeed.setVisibility(View.GONE);
return;
}
float speed = 1.0f;
if(controller.canSetPlaybackSpeed()) {
try {
// we can only retrieve the playback speed from the controller/playback service
// once mediaplayer has been initialized
speed = Float.parseFloat(UserPreferences.getPlaybackSpeed());
} catch (NumberFormatException e) {
Log.e(TAG, Log.getStackTraceString(e));
UserPreferences.setPlaybackSpeed(String.valueOf(speed));
}
}
String speedStr = String.format("%.2fx", speed);
butPlaybackSpeed.setText(speedStr);
}
protected void setupGUI() {
setContentView(getContentViewResourceId());
sbPosition = (SeekBar) findViewById(R.id.sbPosition);
@ -874,20 +908,6 @@ public abstract class MediaplayerActivity extends AppCompatActivity implements O
}
}
private void updateButPlaybackSpeed() {
if (controller != null && butPlaybackSpeed != null) {
float speed = 1.0f;
try {
speed = Float.parseFloat(UserPreferences.getPlaybackSpeed());
} catch(NumberFormatException e) {
Log.e(TAG, Log.getStackTraceString(e));
UserPreferences.setPlaybackSpeed(String.valueOf(speed));
}
String speedStr = String.format("%.2fx", speed);
butPlaybackSpeed.setText(speedStr);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
if (controller != null) {

View File

@ -59,7 +59,7 @@ project.ext {
rxJavaVersion = "1.1.0"
rxJavaRulesVersion = "1.1.0.0"
audioPlayerVersion = "v1.0.14"
audioPlayerVersion = "v1.0.16"
}
task wrapper(type: Wrapper) {

View File

@ -141,6 +141,11 @@ public class PlaybackService extends Service {
*/
public static final int NOTIFICATION_TYPE_PLAYBACK_SPEED_CHANGE = 8;
/**
* Ability to set the playback speed has changed
*/
public static final int NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED = 9;
/**
* Returned by getPositionSafe() or getDurationSafe() if the playbackService
* is in an invalid state.
@ -512,8 +517,11 @@ public class PlaybackService extends Service {
@Override
public void playbackSpeedChanged(float s) {
sendNotificationBroadcast(
NOTIFICATION_TYPE_PLAYBACK_SPEED_CHANGE, 0);
sendNotificationBroadcast(NOTIFICATION_TYPE_PLAYBACK_SPEED_CHANGE, 0);
}
public void setSpeedAbilityChanged() {
sendNotificationBroadcast(NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED, 0);
}
@Override

View File

@ -25,6 +25,8 @@ import android.view.WindowManager;
import com.bumptech.glide.Glide;
import org.antennapod.audio.MediaPlayer;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.LinkedBlockingDeque;
@ -1016,6 +1018,8 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
void playbackSpeedChanged(float s);
void setSpeedAbilityChanged();
void onBufferingUpdate(int percent);
boolean onMediaPlayerInfo(int code);
@ -1036,6 +1040,7 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
((AudioPlayer) mp)
.setOnBufferingUpdateListener(audioBufferingUpdateListener);
((AudioPlayer) mp).setOnInfoListener(audioInfoListener);
((AudioPlayer) mp).setOnSpeedAdjustmentAvailableChangedListener(audioSetSpeedAbilityListener);
} else {
((VideoPlayer) mp)
.setOnCompletionListener(videoCompletionListener);
@ -1050,7 +1055,7 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
return mp;
}
private final org.antennapod.audio.MediaPlayer.OnCompletionListener audioCompletionListener =
private final MediaPlayer.OnCompletionListener audioCompletionListener =
mp -> genericOnCompletion();
private final android.media.MediaPlayer.OnCompletionListener videoCompletionListener =
@ -1060,7 +1065,7 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
endPlayback(false);
}
private final org.antennapod.audio.MediaPlayer.OnBufferingUpdateListener audioBufferingUpdateListener =
private final MediaPlayer.OnBufferingUpdateListener audioBufferingUpdateListener =
(mp, percent) -> genericOnBufferingUpdate(percent);
private final android.media.MediaPlayer.OnBufferingUpdateListener videoBufferingUpdateListener =
@ -1070,7 +1075,7 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
callback.onBufferingUpdate(percent);
}
private final org.antennapod.audio.MediaPlayer.OnInfoListener audioInfoListener =
private final MediaPlayer.OnInfoListener audioInfoListener =
(mp, what, extra) -> genericInfoListener(what);
private final android.media.MediaPlayer.OnInfoListener videoInfoListener =
@ -1080,7 +1085,16 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
return callback.onMediaPlayerInfo(what);
}
private final org.antennapod.audio.MediaPlayer.OnErrorListener audioErrorListener =
private final MediaPlayer.OnSpeedAdjustmentAvailableChangedListener
audioSetSpeedAbilityListener = new MediaPlayer.OnSpeedAdjustmentAvailableChangedListener() {
@Override
public void onSpeedAdjustmentAvailableChanged(MediaPlayer arg0, boolean speedAdjustmentAvailable) {
callback.setSpeedAbilityChanged();
}
};
private final MediaPlayer.OnErrorListener audioErrorListener =
(mp, what, extra) -> {
if(mp.canFallback()) {
mp.fallback();
@ -1096,7 +1110,7 @@ public class PlaybackServiceMediaPlayer implements SharedPreferences.OnSharedPre
return callback.onMediaPlayerError(inObj, what, extra);
}
private final org.antennapod.audio.MediaPlayer.OnSeekCompleteListener audioSeekCompleteListener =
private final MediaPlayer.OnSeekCompleteListener audioSeekCompleteListener =
mp -> genericSeekCompleteListener();
private final android.media.MediaPlayer.OnSeekCompleteListener videoSeekCompleteListener =

View File

@ -1,8 +1,11 @@
package de.danoeh.antennapod.core.util.playback;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.SurfaceHolder;
import org.antennapod.audio.MediaPlayer;
import de.danoeh.antennapod.core.preferences.UserPreferences;
@ -12,8 +15,17 @@ public class AudioPlayer extends MediaPlayer implements IPlayer {
public AudioPlayer(Context context) {
super(context);
PreferenceManager.getDefaultSharedPreferences(context)
.registerOnSharedPreferenceChangeListener(sonicListener);
}
private final SharedPreferences.OnSharedPreferenceChangeListener sonicListener =
(sharedPreferences, key) -> {
if (key.equals(UserPreferences.PREF_SONIC)) {
checkMpi();
}
};
@Override
public void setScreenOnWhilePlaying(boolean screenOn) {
Log.e(TAG, "Setting screen on while playing not supported in Audio Player");

View File

@ -336,6 +336,8 @@ public abstract class PlaybackController {
case PlaybackService.NOTIFICATION_TYPE_PLAYBACK_SPEED_CHANGE:
onPlaybackSpeedChange();
break;
case PlaybackService.NOTIFICATION_TYPE_SET_SPEED_ABILITY_CHANGED:
onSetSpeedAbilityChanged();
}
}
@ -362,6 +364,8 @@ public abstract class PlaybackController {
public void onPlaybackSpeedChange() {}
public void onSetSpeedAbilityChanged() {}
public void onShutdownNotification() {}
/**