summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/activity
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/activity')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java136
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/CastplayerActivity.java80
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java70
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java133
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java282
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java7
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/OpmlImportActivity.java1
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java15
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java23
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java3
10 files changed, 71 insertions, 679 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java
deleted file mode 100644
index ae8634516..000000000
--- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package de.danoeh.antennapod.activity;
-
-import android.content.Intent;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.View;
-import de.danoeh.antennapod.core.feed.MediaType;
-import de.danoeh.antennapod.core.feed.util.PlaybackSpeedUtils;
-import de.danoeh.antennapod.core.preferences.PlaybackPreferences;
-import de.danoeh.antennapod.core.preferences.UserPreferences;
-import de.danoeh.antennapod.core.service.playback.PlaybackService;
-import de.danoeh.antennapod.dialog.VariableSpeedDialog;
-
-import java.text.DecimalFormat;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-/**
- * Activity for playing audio files.
- */
-public class AudioplayerActivity extends MediaplayerInfoActivity {
- private static final String TAG = "AudioPlayerActivity";
- private static final float EPSILON = 0.001f;
-
- private final AtomicBoolean isSetup = new AtomicBoolean(false);
-
- @Override
- protected void onResume() {
- super.onResume();
- if (TextUtils.equals(getIntent().getAction(), Intent.ACTION_VIEW)) {
- playExternalMedia(getIntent(), MediaType.AUDIO);
- } else if (PlaybackService.isCasting()) {
- Intent intent = PlaybackService.getPlayerActivityIntent(this);
- if (intent.getComponent() != null
- && !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);
- txtvPlaybackSpeed.setVisibility(View.GONE);
- return;
- }
- updatePlaybackSpeedButtonText();
- butPlaybackSpeed.setAlpha(controller.canSetPlaybackSpeed() ? 1.0f : 0.5f);
- butPlaybackSpeed.setVisibility(View.VISIBLE);
- txtvPlaybackSpeed.setVisibility(View.VISIBLE);
- }
-
- @Override
- protected void updatePlaybackSpeedButtonText() {
- if (butPlaybackSpeed == null) {
- return;
- }
- if (controller == null) {
- butPlaybackSpeed.setVisibility(View.GONE);
- txtvPlaybackSpeed.setVisibility(View.GONE);
- return;
- }
- float speed = 1.0f;
- if (controller.canSetPlaybackSpeed()) {
- speed = PlaybackSpeedUtils.getCurrentPlaybackSpeed(controller.getMedia());
- }
- String speedStr = new DecimalFormat("0.00").format(speed);
- txtvPlaybackSpeed.setText(speedStr);
- butPlaybackSpeed.setSpeed(speed);
- }
-
- @Override
- protected void setupGUI() {
- if (isSetup.getAndSet(true)) {
- return;
- }
- super.setupGUI();
- if (butPlaybackSpeed != null) {
- butPlaybackSpeed.setOnClickListener(v -> {
- if (controller == null) {
- return;
- }
- if (controller.canSetPlaybackSpeed()) {
- float[] availableSpeeds = UserPreferences.getPlaybackSpeedArray();
- float currentSpeed = controller.getCurrentPlaybackSpeedMultiplier();
-
- int newSpeedIndex = 0;
- while (newSpeedIndex < availableSpeeds.length
- && availableSpeeds[newSpeedIndex] < currentSpeed + EPSILON) {
- newSpeedIndex++;
- }
-
- float newSpeed;
- if (availableSpeeds.length == 0) {
- newSpeed = 1.0f;
- } else if (newSpeedIndex == availableSpeeds.length) {
- newSpeed = availableSpeeds[0];
- } else {
- newSpeed = availableSpeeds[newSpeedIndex];
- }
-
- PlaybackPreferences.setCurrentlyPlayingTemporaryPlaybackSpeed(newSpeed);
- UserPreferences.setPlaybackSpeed(newSpeed);
- controller.setPlaybackSpeed(newSpeed);
- onPositionObserverUpdate();
- } else {
- VariableSpeedDialog.showGetPluginDialog(this);
- }
- });
- butPlaybackSpeed.setOnLongClickListener(v -> {
- VariableSpeedDialog.showDialog(this);
- return true;
- });
- butPlaybackSpeed.setVisibility(View.VISIBLE);
- txtvPlaybackSpeed.setVisibility(View.VISIBLE);
- }
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/CastplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/CastplayerActivity.java
deleted file mode 100644
index bbab235c8..000000000
--- a/app/src/main/java/de/danoeh/antennapod/activity/CastplayerActivity.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package de.danoeh.antennapod.activity;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import de.danoeh.antennapod.core.service.playback.PlaybackService;
-
-/**
- * Activity for controlling the remote playback on a Cast device.
- */
-public class CastplayerActivity extends MediaplayerInfoActivity {
- private static final String TAG = "CastPlayerActivity";
-
- private final AtomicBoolean isSetup = new AtomicBoolean(false);
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (!PlaybackService.isCasting()) {
- Intent intent = PlaybackService.getPlayerActivityIntent(this);
- if (!intent.getComponent().getClassName().equals(CastplayerActivity.class.getName())) {
- finish();
- startActivity(intent);
- }
- }
- }
-
- @Override
- protected void onReloadNotification(int notificationCode) {
- if (notificationCode == PlaybackService.EXTRA_CODE_AUDIO) {
- Log.d(TAG, "ReloadNotification received, switching to Audioplayer now");
- saveCurrentFragment();
- finish();
- startActivity(new Intent(this, AudioplayerActivity.class));
- } else {
- super.onReloadNotification(notificationCode);
- }
- }
-
- @Override
- protected void setupGUI() {
- if(isSetup.getAndSet(true)) {
- return;
- }
- super.setupGUI();
- if (butPlaybackSpeed != null) {
- butPlaybackSpeed.setVisibility(View.GONE);
- txtvPlaybackSpeed.setVisibility(View.GONE);
- }
- }
-
- @Override
- protected void onResume() {
- if (!PlaybackService.isCasting()) {
- Intent intent = PlaybackService.getPlayerActivityIntent(this);
- if (!intent.getComponent().getClassName().equals(CastplayerActivity.class.getName())) {
- saveCurrentFragment();
- finish();
- startActivity(intent);
- }
- }
- super.onResume();
- }
-
- @Override
- protected void onBufferStart() {
- //sbPosition.setIndeterminate(true);
- sbPosition.setEnabled(false);
- }
-
- @Override
- protected void onBufferEnd() {
- //sbPosition.setIndeterminate(false);
- sbPosition.setEnabled(true);
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
index 6dab5ab45..403198bea 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
@@ -23,6 +23,7 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.bumptech.glide.Glide;
+import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.snackbar.Snackbar;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.event.MessageEvent;
@@ -31,9 +32,9 @@ import de.danoeh.antennapod.core.util.Flavors;
import de.danoeh.antennapod.core.util.StorageUtils;
import de.danoeh.antennapod.dialog.RatingDialog;
import de.danoeh.antennapod.fragment.AddFeedFragment;
+import de.danoeh.antennapod.fragment.AudioPlayerFragment;
import de.danoeh.antennapod.fragment.DownloadsFragment;
import de.danoeh.antennapod.fragment.EpisodesFragment;
-import de.danoeh.antennapod.fragment.ExternalPlayerFragment;
import de.danoeh.antennapod.fragment.FeedItemlistFragment;
import de.danoeh.antennapod.fragment.NavDrawerFragment;
import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
@@ -41,6 +42,7 @@ import de.danoeh.antennapod.fragment.QueueFragment;
import de.danoeh.antennapod.fragment.SubscriptionFragment;
import de.danoeh.antennapod.fragment.TransitionEffect;
import de.danoeh.antennapod.preferences.PreferenceUpgrader;
+import de.danoeh.antennapod.view.LockableBottomSheetBehavior;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.Validate;
import org.greenrobot.eventbus.EventBus;
@@ -61,12 +63,14 @@ public class MainActivity extends CastEnabledActivity {
public static final String EXTRA_FRAGMENT_TAG = "fragment_tag";
public static final String EXTRA_FRAGMENT_ARGS = "fragment_args";
public static final String EXTRA_FEED_ID = "fragment_feed_id";
+ public static final String EXTRA_OPEN_PLAYER = "open_player";
private static final String SAVE_BACKSTACK_COUNT = "backstackCount";
private DrawerLayout drawerLayout;
private View navDrawer;
private ActionBarDrawerToggle drawerToggle;
+ private LockableBottomSheetBehavior sheetBehavior;
private long lastBackButtonPressTime = 0;
@NonNull
@@ -111,15 +115,34 @@ public class MainActivity extends CastEnabledActivity {
}
}
}
- ExternalPlayerFragment externalPlayerFragment = new ExternalPlayerFragment();
- transaction.replace(R.id.playerFragment, externalPlayerFragment, ExternalPlayerFragment.TAG);
NavDrawerFragment navDrawerFragment = new NavDrawerFragment();
transaction.replace(R.id.navDrawerFragment, navDrawerFragment, NavDrawerFragment.TAG);
-
+ AudioPlayerFragment audioPlayerFragment = new AudioPlayerFragment();
+ transaction.replace(R.id.audioplayerFragment, audioPlayerFragment, AudioPlayerFragment.TAG);
transaction.commit();
checkFirstLaunch();
PreferenceUpgrader.checkUpgrades(this);
+ View bottomSheet = findViewById(R.id.audioplayerFragment);
+ sheetBehavior = (LockableBottomSheetBehavior) BottomSheetBehavior.from(bottomSheet);
+ sheetBehavior.setPeekHeight((int) getResources().getDimension(R.dimen.external_player_height));
+ sheetBehavior.setHideable(false);
+ sheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
+ @Override
+ public void onStateChanged(@NonNull View view, int state) {
+
+ }
+
+ @Override
+ public void onSlide(@NonNull View view, float slideOffset) {
+ AudioPlayerFragment audioPlayer =
+ (AudioPlayerFragment) getSupportFragmentManager().findFragmentByTag(AudioPlayerFragment.TAG);
+ float condensedSlideOffset = Math.max(0.0f, Math.min(0.1f, slideOffset - 0.5f)) / 0.1f;
+ audioPlayer.getExternalPlayerHolder().setAlpha(1 - condensedSlideOffset);
+ audioPlayer.getExternalPlayerHolder().setVisibility(
+ condensedSlideOffset > 0.99f ? View.GONE : View.VISIBLE);
+ }
+ });
}
@Override
@@ -151,6 +174,10 @@ public class MainActivity extends CastEnabledActivity {
return drawerLayout != null && navDrawer != null && drawerLayout.isDrawerOpen(navDrawer);
}
+ public LockableBottomSheetBehavior getBottomSheet() {
+ return sheetBehavior;
+ }
+
public void loadFragment(String tag, Bundle args) {
Log.d(TAG, "loadFragment(tag: " + tag + ", args: " + args + ")");
Fragment fragment;
@@ -176,6 +203,7 @@ public class MainActivity extends CastEnabledActivity {
default:
// default to the queue
fragment = new QueueFragment();
+ tag = QueueFragment.TAG;
args = null;
break;
}
@@ -183,6 +211,7 @@ public class MainActivity extends CastEnabledActivity {
if (args != null) {
fragment.setArguments(args);
}
+ NavDrawerFragment.saveLastNavFragment(this, tag);
loadFragment(fragment);
}
@@ -191,6 +220,7 @@ public class MainActivity extends CastEnabledActivity {
if (args != null) {
fragment.setArguments(args);
}
+ NavDrawerFragment.saveLastNavFragment(this, String.valueOf(feedId));
loadFragment(fragment);
}
@@ -299,29 +329,6 @@ public class MainActivity extends CastEnabledActivity {
}
@Override
- public boolean onCreateOptionsMenu(Menu menu) {
- boolean retVal = super.onCreateOptionsMenu(menu);
- if (Flavors.FLAVOR == Flavors.PLAY) {
- switch (NavDrawerFragment.getLastNavFragment(this)) {
- case QueueFragment.TAG:
- case EpisodesFragment.TAG:
- requestCastButton(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- return retVal;
- case DownloadsFragment.TAG:
- case PlaybackHistoryFragment.TAG:
- case AddFeedFragment.TAG:
- case SubscriptionFragment.TAG:
- return retVal;
- default:
- requestCastButton(MenuItem.SHOW_AS_ACTION_NEVER);
- return retVal;
- }
- } else {
- return retVal;
- }
- }
-
- @Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
@@ -339,6 +346,8 @@ public class MainActivity extends CastEnabledActivity {
public void onBackPressed() {
if (isDrawerOpen()) {
drawerLayout.closeDrawer(navDrawer);
+ } else if (sheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
+ sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
} else if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
super.onBackPressed();
} else {
@@ -367,7 +376,6 @@ public class MainActivity extends CastEnabledActivity {
super.onBackPressed();
} else {
loadFragment(UserPreferences.getBackButtonGoToPage(), null);
- NavDrawerFragment.saveLastNavFragment(this, UserPreferences.getBackButtonGoToPage());
}
break;
default: super.onBackPressed();
@@ -398,9 +406,11 @@ public class MainActivity extends CastEnabledActivity {
} else if (feedId > 0) {
loadFeedFragmentById(feedId, args);
}
- // to avoid handling the intent twice when the configuration changes
- setIntent(new Intent(MainActivity.this, MainActivity.class));
+ } else if (intent.hasExtra(EXTRA_OPEN_PLAYER)) {
+ sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
+ // to avoid handling the intent twice when the configuration changes
+ setIntent(new Intent(MainActivity.this, MainActivity.class));
}
@Override
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
index c0ba75ba6..55aadc60b 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java
@@ -2,7 +2,6 @@ package de.danoeh.antennapod.activity;
import android.Manifest;
import android.annotation.TargetApi;
-import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
@@ -22,9 +21,12 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
+import androidx.arch.core.util.Function;
import androidx.core.app.ActivityCompat;
import androidx.core.app.ActivityOptionsCompat;
import androidx.core.content.ContextCompat;
+import androidx.core.util.Consumer;
+import androidx.core.util.Supplier;
import com.bumptech.glide.Glide;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.event.PlaybackPositionEvent;
@@ -35,15 +37,12 @@ import de.danoeh.antennapod.core.preferences.UserPreferences;
import de.danoeh.antennapod.core.service.playback.PlaybackService;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
-import de.danoeh.antennapod.core.util.Consumer;
import de.danoeh.antennapod.core.util.Converter;
import de.danoeh.antennapod.core.util.FeedItemUtil;
import de.danoeh.antennapod.core.util.Flavors;
-import de.danoeh.antennapod.core.util.Function;
import de.danoeh.antennapod.core.util.IntentUtils;
import de.danoeh.antennapod.core.util.ShareUtils;
import de.danoeh.antennapod.core.util.StorageUtils;
-import de.danoeh.antennapod.core.util.Supplier;
import de.danoeh.antennapod.core.util.TimeSpeedConverter;
import de.danoeh.antennapod.core.util.gui.PictureInPictureUtil;
import de.danoeh.antennapod.core.util.playback.ExternalMedia;
@@ -52,6 +51,7 @@ import de.danoeh.antennapod.core.util.playback.Playable;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
import de.danoeh.antennapod.core.util.playback.PlaybackServiceStarter;
import de.danoeh.antennapod.dialog.PlaybackControlsDialog;
+import de.danoeh.antennapod.dialog.SkipPreferenceDialog;
import de.danoeh.antennapod.dialog.SleepTimerDialog;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -141,16 +141,6 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
}
@Override
- public void postStatusMsg(int msg, boolean showToast) {
- MediaplayerActivity.this.postStatusMsg(msg, showToast);
- }
-
- @Override
- public void clearStatusMsg() {
- MediaplayerActivity.this.clearStatusMsg();
- }
-
- @Override
public boolean loadMediaInfo() {
return MediaplayerActivity.this.loadMediaInfo();
}
@@ -198,13 +188,6 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
onPositionObserverUpdate();
}
- private static TextView getTxtvFFFromActivity(MediaplayerActivity activity) {
- return activity.txtvFF;
- }
- private static TextView getTxtvRevFromActivity(MediaplayerActivity activity) {
- return activity.txtvRev;
- }
-
private void onSetSpeedAbilityChanged() {
Log.d(TAG, "onSetSpeedAbilityChanged()");
updatePlaybackSpeedButton();
@@ -258,12 +241,16 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
* Should be used to inform the user that the PlaybackService is currently
* buffering.
*/
- protected abstract void onBufferStart();
+ protected void onBufferStart() {
+
+ }
/**
* Should be used to hide the view that was showing the 'buffering'-message.
*/
- protected abstract void onBufferEnd();
+ protected void onBufferEnd() {
+
+ }
private void onBufferUpdate(float progress) {
if (sbPosition != null) {
@@ -311,9 +298,7 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
- if (Flavors.FLAVOR == Flavors.PLAY) {
- requestCastButton(MenuItem.SHOW_AS_ACTION_ALWAYS);
- }
+ requestCastButton(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mediaplayer, menu);
return true;
@@ -478,10 +463,6 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
*/
protected abstract void onAwaitingVideoSurface();
- protected abstract void postStatusMsg(int resId, boolean showToast);
-
- protected abstract void clearStatusMsg();
-
void onPositionObserverUpdate() {
if (controller == null || txtvPosition == null || txtvLength == null) {
return;
@@ -543,92 +524,6 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
// Only meaningful on AudioplayerActivity, where it is overridden.
}
- /**
- * Abstract directions to skip forward or back (rewind) and encapsulates behavior to get or set preference (including update of UI on the skip buttons).
- */
- public enum SkipDirection {
- SKIP_FORWARD(
- UserPreferences::getFastForwardSecs,
- MediaplayerActivity::getTxtvFFFromActivity,
- UserPreferences::setFastForwardSecs,
- R.string.pref_fast_forward),
- SKIP_REWIND(UserPreferences::getRewindSecs,
- MediaplayerActivity::getTxtvRevFromActivity,
- UserPreferences::setRewindSecs,
- R.string.pref_rewind);
-
- private final Supplier<Integer> getPrefSecsFn;
- private final Function<MediaplayerActivity, TextView> getTextViewFn;
- private final Consumer<Integer> setPrefSecsFn;
- private final int titleResourceID;
-
- /**
- * Constructor for skip direction enum. Stores references to utility functions and resource
- * id's that vary dependending on the direction.
- *
- * @param getPrefSecsFn Handle to function that retrieves current seconds of the skip delta
- * @param getTextViewFn Handle to function that gets the TextView which displays the current skip delta value
- * @param setPrefSecsFn Handle to function that sets the preference (setting) for the skip delta value (and optionally updates the button label with the current values)
- * @param titleResourceID ID of the resource string with the title for a view
- */
- SkipDirection(Supplier<Integer> getPrefSecsFn, Function<MediaplayerActivity, TextView> getTextViewFn, Consumer<Integer> setPrefSecsFn, int titleResourceID) {
- this.getPrefSecsFn = getPrefSecsFn;
- this.getTextViewFn = getTextViewFn;
- this.setPrefSecsFn = setPrefSecsFn;
- this.titleResourceID = titleResourceID;
- }
-
-
- public int getPrefSkipSeconds() {
- return(getPrefSecsFn.get());
- }
-
- /**
- * Updates preferences for a forward or backward skip depending on the direction of the instance, optionally updating the UI.
- *
- * @param seconds Number of seconds to set the preference associated with the direction of the instance.
- * @param activity MediaplyerActivity that contains textview to update the display of the skip delta setting (or null if nothing to update)
- */
- public void setPrefSkipSeconds(int seconds, @Nullable Activity activity) {
- setPrefSecsFn.accept(seconds);
-
- if (activity != null && activity instanceof MediaplayerActivity) {
- TextView tv = getTextViewFn.apply((MediaplayerActivity)activity);
- if (tv != null) tv.setText(String.valueOf(seconds));
- }
- }
- public int getTitleResourceID() {
- return titleResourceID;
- }
- }
-
- public static void showSkipPreference(Activity activity, SkipDirection direction) {
- int checked = 0;
- int skipSecs = direction.getPrefSkipSeconds();
- final int[] values = activity.getResources().getIntArray(R.array.seek_delta_values);
- final String[] choices = new String[values.length];
- for (int i = 0; i < values.length; i++) {
- if (skipSecs == values[i]) {
- checked = i;
- }
- choices[i] = String.valueOf(values[i]) + " " + activity.getString(R.string.time_seconds);
- }
-
- AlertDialog.Builder builder = new AlertDialog.Builder(activity);
- builder.setTitle(direction.getTitleResourceID());
- builder.setSingleChoiceItems(choices, checked, null);
- builder.setNegativeButton(R.string.cancel_label, null);
- builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> {
- int choice = ((AlertDialog)dialog).getListView().getCheckedItemPosition();
- if (choice < 0 || choice >= values.length) {
- System.err.printf("Choice in showSkipPreference is out of bounds %d", choice);
- } else {
- direction.setPrefSkipSeconds(values[choice], activity);
- }
- });
- builder.create().show();
- }
-
void setupGUI() {
setContentView(getContentViewResourceId());
sbPosition = findViewById(R.id.sbPosition);
@@ -688,7 +583,8 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
if (butRev != null) {
butRev.setOnClickListener(v -> onRewind());
butRev.setOnLongClickListener(v -> {
- showSkipPreference(MediaplayerActivity.this, SkipDirection.SKIP_REWIND);
+ SkipPreferenceDialog.showSkipPreference(MediaplayerActivity.this,
+ SkipPreferenceDialog.SkipDirection.SKIP_REWIND, txtvRev);
return true;
});
}
@@ -698,7 +594,8 @@ public abstract class MediaplayerActivity extends CastEnabledActivity implements
if (butFF != null) {
butFF.setOnClickListener(v -> onFastForward());
butFF.setOnLongClickListener(v -> {
- showSkipPreference(MediaplayerActivity.this, SkipDirection.SKIP_FORWARD);
+ SkipPreferenceDialog.showSkipPreference(MediaplayerActivity.this,
+ SkipPreferenceDialog.SkipDirection.SKIP_FORWARD, txtvFF);
return false;
});
}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java
deleted file mode 100644
index 1a7631813..000000000
--- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java
+++ /dev/null
@@ -1,282 +0,0 @@
-package de.danoeh.antennapod.activity;
-
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.res.Configuration;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.TextView;
-import android.widget.Toast;
-import androidx.appcompat.app.ActionBarDrawerToggle;
-import androidx.appcompat.widget.Toolbar;
-import androidx.drawerlayout.widget.DrawerLayout;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentStatePagerAdapter;
-import androidx.viewpager.widget.ViewPager;
-import com.google.android.material.snackbar.Snackbar;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.core.event.MessageEvent;
-import de.danoeh.antennapod.core.feed.Chapter;
-import de.danoeh.antennapod.core.preferences.UserPreferences;
-import de.danoeh.antennapod.core.service.playback.PlaybackService;
-import de.danoeh.antennapod.core.util.playback.PlaybackController;
-import de.danoeh.antennapod.fragment.ChaptersFragment;
-import de.danoeh.antennapod.fragment.CoverFragment;
-import de.danoeh.antennapod.fragment.ItemDescriptionFragment;
-import de.danoeh.antennapod.fragment.NavDrawerFragment;
-import de.danoeh.antennapod.view.PagerIndicatorView;
-import de.danoeh.antennapod.view.PlaybackSpeedIndicatorView;
-import org.greenrobot.eventbus.Subscribe;
-import org.greenrobot.eventbus.ThreadMode;
-
-import java.util.List;
-
-/**
- * Activity for playing files that do not require a video surface.
- */
-public abstract class MediaplayerInfoActivity extends MediaplayerActivity {
-
- private static final String TAG = "MediaplayerInfoActivity";
-
- private static final int POS_COVER = 0;
- private static final int POS_DESCR = 1;
- private static final int POS_CHAPTERS = 2;
- private static final int NUM_CONTENT_FRAGMENTS = 3;
-
- private static final String PREFS = "AudioPlayerActivityPreferences";
- private static final String PREF_KEY_SELECTED_FRAGMENT_POSITION = "selectedFragmentPosition";
-
- PlaybackSpeedIndicatorView butPlaybackSpeed;
- TextView txtvPlaybackSpeed;
- private DrawerLayout drawerLayout;
- private View navDrawer;
- private ActionBarDrawerToggle drawerToggle;
- private ViewPager pager;
- private PagerIndicatorView pageIndicator;
- private MediaplayerInfoPagerAdapter pagerAdapter;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- supportPostponeEnterTransition();
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- Log.d(TAG, "onStop()");
- saveCurrentFragment();
- }
-
- @Override
- public void onDestroy() {
- Log.d(TAG, "onDestroy()");
- super.onDestroy();
- // don't risk creating memory leaks
- drawerLayout = null;
- navDrawer = null;
- drawerToggle = null;
- pager = null;
- pagerAdapter = null;
- }
-
- @Override
- protected void chooseTheme() {
- setTheme(UserPreferences.getNoTitleTheme());
- }
-
- void saveCurrentFragment() {
- if (pager == null) {
- return;
- }
- Log.d(TAG, "Saving preferences");
- SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE);
- prefs.edit()
- .putInt(PREF_KEY_SELECTED_FRAGMENT_POSITION, pager.getCurrentItem())
- .apply();
- }
-
- @Override
- public void onConfigurationChanged(Configuration newConfig) {
- super.onConfigurationChanged(newConfig);
- if (drawerToggle != null) {
- drawerToggle.onConfigurationChanged(newConfig);
- }
- }
-
- private void loadLastFragment() {
- Log.d(TAG, "Restoring instance state");
- SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE);
- int lastPosition = prefs.getInt(PREF_KEY_SELECTED_FRAGMENT_POSITION, -1);
- pager.setCurrentItem(lastPosition);
- }
-
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
- setIntent(intent);
- }
-
- @Override
- protected void onAwaitingVideoSurface() {
- Log.d(TAG, "onAwaitingVideoSurface was called in audio player -> switching to video player");
- startActivity(new Intent(this, VideoplayerActivity.class));
- }
-
- @Override
- protected void postStatusMsg(int resId, boolean showToast) {
- if (resId == R.string.player_preparing_msg
- || resId == R.string.player_seeking_msg
- || resId == R.string.player_buffering_msg) {
- // TODO Show progress bar here
- }
- if (showToast) {
- Toast.makeText(this, resId, Toast.LENGTH_SHORT).show();
- }
- }
-
- @Override
- protected void clearStatusMsg() {
- // TODO Hide progress bar here
- }
-
-
- @Override
- protected void setupGUI() {
- super.setupGUI();
- Toolbar toolbar = findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getSupportActionBar().setTitle("");
- drawerLayout = findViewById(R.id.drawer_layout);
- navDrawer = findViewById(R.id.navDrawerFragment);
- butPlaybackSpeed = findViewById(R.id.butPlaybackSpeed);
- txtvPlaybackSpeed = findViewById(R.id.txtvPlaybackSpeed);
-
- drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close);
- drawerToggle.setDrawerIndicatorEnabled(false);
- drawerLayout.addDrawerListener(drawerToggle);
- drawerToggle.syncState();
-
- getSupportFragmentManager().beginTransaction()
- .replace(R.id.navDrawerFragment, new NavDrawerFragment(), NavDrawerFragment.TAG)
- .commit();
-
- pager = findViewById(R.id.pager);
- pager.setOffscreenPageLimit(3);
- pagerAdapter = new MediaplayerInfoPagerAdapter(getSupportFragmentManager());
- pager.setAdapter(pagerAdapter);
- pageIndicator = findViewById(R.id.page_indicator);
- pageIndicator.setViewPager(pager);
- pageIndicator.setOnClickListener(v
- -> pager.setCurrentItem((pager.getCurrentItem() + 1) % pager.getChildCount()));
- loadLastFragment();
- pager.onSaveInstanceState();
-
- pager.post(this::supportStartPostponedEnterTransition);
- }
-
- @Override
- boolean loadMediaInfo() {
- if (controller != null && controller.getMedia() != null) {
- List<Chapter> chapters = controller.getMedia().getChapters();
- boolean hasChapters = chapters != null && !chapters.isEmpty();
- pageIndicator.setDisabledPage(hasChapters ? -1 : 2);
- }
- return super.loadMediaInfo();
- }
-
- @Override
- protected void onReloadNotification(int notificationCode) {
- if (notificationCode == PlaybackService.EXTRA_CODE_VIDEO) {
- Log.d(TAG, "ReloadNotification received, switching to Videoplayer now");
- finish();
- startActivity(new Intent(this, VideoplayerActivity.class));
-
- }
- }
-
- @Override
- protected void onBufferStart() {
- postStatusMsg(R.string.player_buffering_msg, false);
- }
-
- @Override
- protected void onBufferEnd() {
- clearStatusMsg();
- }
-
- public PlaybackController getPlaybackController() {
- return controller;
- }
-
- public boolean isDrawerOpen() {
- return drawerLayout != null && navDrawer != null && drawerLayout.isDrawerOpen(navDrawer);
- }
-
- @Override
- protected int getContentViewResourceId() {
- return R.layout.mediaplayerinfo_activity;
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- return (drawerToggle != null && drawerToggle.onOptionsItemSelected(item)) || super.onOptionsItemSelected(item);
- }
-
- @Override
- public void onBackPressed() {
- if (isDrawerOpen()) {
- drawerLayout.closeDrawer(navDrawer);
- } else if (pager == null || pager.getCurrentItem() == 0) {
- // If the user is currently looking at the first step, allow the system to handle the
- // Back button. This calls finish() on this activity and pops the back stack.
- super.onBackPressed();
- } else {
- // Otherwise, select the previous step.
- pager.setCurrentItem(pager.getCurrentItem() - 1);
- }
- }
-
- @Subscribe(threadMode = ThreadMode.MAIN)
- public void onEventMainThread(MessageEvent event) {
- Log.d(TAG, "onEvent(" + event + ")");
- View parentLayout = findViewById(R.id.drawer_layout);
- Snackbar snackbar = Snackbar.make(parentLayout, event.message, Snackbar.LENGTH_SHORT);
- if (event.action != null) {
- snackbar.setAction(getString(R.string.undo), v -> event.action.run());
- }
- snackbar.show();
- }
-
- private static class MediaplayerInfoPagerAdapter extends FragmentStatePagerAdapter {
- private static final String TAG = "MPInfoPagerAdapter";
-
- public MediaplayerInfoPagerAdapter(FragmentManager fm) {
- super(fm);
- }
-
- @Override
- public Fragment getItem(int position) {
- Log.d(TAG, "getItem(" + position + ")");
- switch (position) {
- case POS_COVER:
- return new CoverFragment();
- case POS_DESCR:
- return new ItemDescriptionFragment();
- case POS_CHAPTERS:
- return new ChaptersFragment();
- default:
- return null;
- }
- }
-
- @Override
- public int getCount() {
- return NUM_CONTENT_FRAGMENTS;
- }
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
index 1f0039189..821defd86 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java
@@ -113,6 +113,9 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
listView = findViewById(R.id.listview);
progressBar = findViewById(R.id.progressBar);
+ findViewById(R.id.transparentBackground).setOnClickListener(v -> finish());
+ findViewById(R.id.card).setOnClickListener(null);
+
String feedUrl = null;
if (getIntent().hasExtra(ARG_FEEDURL)) {
feedUrl = getIntent().getStringExtra(ARG_FEEDURL);
@@ -615,7 +618,7 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
private final String feedUrl;
FeedViewAuthenticationDialog(Context context, int titleRes, String feedUrl) {
- super(context, titleRes, true, false, null, null);
+ super(context, titleRes, true, null, null);
this.feedUrl = feedUrl;
}
@@ -626,7 +629,7 @@ public class OnlineFeedViewActivity extends AppCompatActivity {
}
@Override
- protected void onConfirmed(String username, String password, boolean saveUsernamePassword) {
+ protected void onConfirmed(String username, String password) {
startFeedDownload(feedUrl, username, password);
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportActivity.java
index 03e6b89db..f4d312a4f 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportActivity.java
@@ -57,6 +57,7 @@ public class OpmlImportActivity extends AppCompatActivity {
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "Received result");
if (resultCode == RESULT_CANCELED) {
Log.d(TAG, "Activity was cancelled");
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java
index 8527949b0..d1cd50608 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/StorageErrorActivity.java
@@ -121,8 +121,9 @@ public class StorageErrorActivity extends AppCompatActivity {
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (resultCode == Activity.RESULT_OK &&
- requestCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (resultCode == Activity.RESULT_OK
+ && requestCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) {
String dir = data.getStringExtra(DirectoryChooserActivity.RESULT_SELECTED_DIR);
File path;
@@ -131,19 +132,19 @@ public class StorageErrorActivity extends AppCompatActivity {
} else {
path = getExternalFilesDir(null);
}
- if(path == null) {
+ if (path == null) {
return;
}
String message = null;
- if(!path.exists()) {
+ if (!path.exists()) {
message = String.format(getString(R.string.folder_does_not_exist_error), dir);
- } else if(!path.canRead()) {
+ } else if (!path.canRead()) {
message = String.format(getString(R.string.folder_not_readable_error), dir);
- } else if(!path.canWrite()) {
+ } else if (!path.canWrite()) {
message = String.format(getString(R.string.folder_not_writable_error), dir);
}
- if(message == null) {
+ if (message == null) {
Log.d(TAG, "Setting data folder: " + dir);
UserPreferences.setDataFolder(dir);
leaveErrorState();
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
index a1a4e0374..212cb2f75 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
@@ -171,20 +171,6 @@ public class VideoplayerActivity extends MediaplayerActivity {
}
}
- @Override
- protected void postStatusMsg(int resId, boolean showToast) {
- if (resId == R.string.player_preparing_msg) {
- progressIndicator.setVisibility(View.VISIBLE);
- } else {
- progressIndicator.setVisibility(View.INVISIBLE);
- }
- }
-
- @Override
- protected void clearStatusMsg() {
- progressIndicator.setVisibility(View.INVISIBLE);
- }
-
private final View.OnTouchListener onVideoviewTouched = (v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (PictureInPictureUtil.isInPictureInPictureMode(this)) {
@@ -292,16 +278,11 @@ public class VideoplayerActivity extends MediaplayerActivity {
}
return;
}
- if (notificationCode == PlaybackService.EXTRA_CODE_AUDIO) {
- Log.d(TAG, "ReloadNotification received, switching to Audioplayer now");
- destroyingDueToReload = true;
- finish();
- startActivity(new Intent(this, AudioplayerActivity.class));
- } else if (notificationCode == PlaybackService.EXTRA_CODE_CAST) {
+ if (notificationCode == PlaybackService.EXTRA_CODE_CAST) {
Log.d(TAG, "ReloadNotification received, switching to Castplayer now");
destroyingDueToReload = true;
finish();
- startActivity(new Intent(this, CastplayerActivity.class));
+ startActivity(new Intent(this, MainActivity.class).putExtra(MainActivity.EXTRA_OPEN_PLAYER, true));
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java
index c79c611ce..224b8d182 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java
@@ -190,8 +190,6 @@ public class GpodnetAuthenticationActivity extends AppCompatActivity {
final AtomicReference<List<GpodnetDevice>> devices = new AtomicReference<>();
new AsyncTask<GpodnetService, Void, List<GpodnetDevice>>() {
- private volatile Exception exception;
-
@Override
protected void onPreExecute() {
super.onPreExecute();
@@ -226,7 +224,6 @@ public class GpodnetAuthenticationActivity extends AppCompatActivity {
return params[0].getDevices(username);
} catch (GpodnetServiceException e) {
e.printStackTrace();
- exception = e;
return null;
}
}