package de.danoeh.antennapod.activity; import android.content.Intent; import android.support.v4.view.ViewCompat; import android.text.TextUtils; import android.util.Log; import android.view.View; import java.util.concurrent.atomic.AtomicBoolean; import de.danoeh.antennapod.core.feed.MediaType; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.util.playback.ExternalMedia; import de.danoeh.antennapod.dialog.VariableSpeedDialog; /** * Activity for playing audio files. */ public class AudioplayerActivity extends MediaplayerInfoActivity { public static final String TAG = "AudioPlayerActivity"; private AtomicBoolean isSetup = new AtomicBoolean(false); @Override protected void onResume() { super.onResume(); if (TextUtils.equals(getIntent().getAction(), Intent.ACTION_VIEW)) { Intent intent = getIntent(); Log.d(TAG, "Received VIEW intent: " + intent.getData().getPath()); ExternalMedia media = new ExternalMedia(intent.getData().getPath(), MediaType.AUDIO); Intent launchIntent = new Intent(this, PlaybackService.class); launchIntent.putExtra(PlaybackService.EXTRA_PLAYABLE, media); launchIntent.putExtra(PlaybackService.EXTRA_START_WHEN_PREPARED, true); launchIntent.putExtra(PlaybackService.EXTRA_SHOULD_STREAM, false); launchIntent.putExtra(PlaybackService.EXTRA_PREPARE_IMMEDIATELY, true); startService(launchIntent); } else if (PlaybackService.isCasting()) { Intent intent = PlaybackService.getPlayerActivityIntent(this); if (!intent.getComponent().getClassName().equals(AudioplayerActivity.class.getName())) { saveCurrentFragment(); finish(); startActivity(intent); } } } @Override protected void onReloadNotification(int notificationCode) { if (notificationCode == PlaybackService.EXTRA_CODE_CAST) { Log.d(TAG, "ReloadNotification received, switching to Castplayer now"); saveCurrentFragment(); finish(); startActivity(new Intent(this, CastplayerActivity.class)); } else { super.onReloadNotification(notificationCode); } } @Override protected 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); } @Override protected 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); } @Override protected void setupGUI() { if(isSetup.getAndSet(true)) { return; } super.setupGUI(); if(butCastDisconnect != null) { butCastDisconnect.setVisibility(View.GONE); } if(butPlaybackSpeed != null) { butPlaybackSpeed.setOnClickListener(v -> { if (controller == null) { return; } if (controller.canSetPlaybackSpeed()) { String[] availableSpeeds = UserPreferences.getPlaybackSpeedArray(); String currentSpeed = UserPreferences.getPlaybackSpeed(); // Provide initial value in case the speed list has changed // out from under us // and our current speed isn't in the new list String newSpeed; if (availableSpeeds.length > 0) { newSpeed = availableSpeeds[0]; } else { newSpeed = "1.00"; } for (int i = 0; i < availableSpeeds.length; i++) { if (availableSpeeds[i].equals(currentSpeed)) { if (i == availableSpeeds.length - 1) { newSpeed = availableSpeeds[0]; } else { newSpeed = availableSpeeds[i + 1]; } break; } } UserPreferences.setPlaybackSpeed(newSpeed); controller.setPlaybackSpeed(Float.parseFloat(newSpeed)); } else { VariableSpeedDialog.showGetPluginDialog(this); } }); butPlaybackSpeed.setOnLongClickListener(v -> { VariableSpeedDialog.showDialog(this); return true; }); butPlaybackSpeed.setVisibility(View.VISIBLE); } } }