summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-03-23 01:46:50 +0100
committerByteHamster <info@bytehamster.com>2020-03-23 01:46:50 +0100
commite417f4a5f8f0a2e53deb5eba7059a83d85432a9e (patch)
tree116347b35be2a30d53267be45767d0793bb211f3 /app/src/main/java/de/danoeh/antennapod
parent16d0a1befa09aaa40e29ff906bc86f5a1d496fb5 (diff)
downloadAntennaPod-e417f4a5f8f0a2e53deb5eba7059a83d85432a9e.zip
Added bottom sheet to activity
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java41
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java60
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java10
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java1
4 files changed, 67 insertions, 45 deletions
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 35328f0c3..c8b10751d 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;
@@ -34,7 +35,6 @@ 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;
@@ -68,6 +68,7 @@ public class MainActivity extends CastEnabledActivity {
private DrawerLayout drawerLayout;
private View navDrawer;
private ActionBarDrawerToggle drawerToggle;
+ private BottomSheetBehavior sheetBehavior;
private long lastBackButtonPressTime = 0;
@NonNull
@@ -112,15 +113,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 = 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
@@ -152,6 +172,14 @@ public class MainActivity extends CastEnabledActivity {
return drawerLayout != null && navDrawer != null && drawerLayout.isDrawerOpen(navDrawer);
}
+ public void expandBottomSheet() {
+ sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
+ }
+
+ public void collapseBottomSheet() {
+ sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
+ }
+
public void loadFragment(String tag, Bundle args) {
Log.d(TAG, "loadFragment(tag: " + tag + ", args: " + args + ")");
Fragment fragment;
@@ -159,9 +187,6 @@ public class MainActivity extends CastEnabledActivity {
case QueueFragment.TAG:
fragment = new QueueFragment();
break;
- case AudioPlayerFragment.TAG:
- fragment = new AudioPlayerFragment();
- break;
case EpisodesFragment.TAG:
fragment = new EpisodesFragment();
break;
@@ -344,6 +369,8 @@ public class MainActivity extends CastEnabledActivity {
public void onBackPressed() {
if (isDrawerOpen()) {
drawerLayout.closeDrawer(navDrawer);
+ } else if (sheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
+ collapseBottomSheet();
} else if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
super.onBackPressed();
} else {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
index 7fcb3f973..7d8500f44 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/AudioPlayerFragment.java
@@ -6,17 +6,13 @@ import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.SeekBar;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -55,7 +51,8 @@ import java.util.List;
/**
* Shows the audio player.
*/
-public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarChangeListener {
+public class AudioPlayerFragment extends Fragment implements
+ SeekBar.OnSeekBarChangeListener, Toolbar.OnMenuItemClickListener {
public static final String TAG = "AudioPlayerFragment";
private static final int POS_COVER = 0;
private static final int POS_DESCR = 1;
@@ -69,7 +66,6 @@ public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarCh
TextView txtvPlaybackSpeed;
private ViewPager pager;
private PagerIndicatorView pageIndicator;
- private AudioPlayerPagerAdapter pagerAdapter;
private TextView txtvPosition;
private TextView txtvLength;
private SeekBar sbPosition;
@@ -79,6 +75,7 @@ public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarCh
private ImageButton butFF;
private TextView txtvFF;
private ImageButton butSkip;
+ private Toolbar toolbar;
private PlaybackController controller;
private boolean showTimeLeft;
@@ -87,9 +84,16 @@ public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarCh
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View root = inflater.inflate(R.layout.audioplayer_fragment, container, false);
- Toolbar toolbar = root.findViewById(R.id.toolbar);
+ toolbar = root.findViewById(R.id.toolbar);
toolbar.setTitle("");
- ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
+ toolbar.setNavigationOnClickListener(v -> ((MainActivity) getActivity()).collapseBottomSheet());
+ toolbar.setOnMenuItemClickListener(this);
+ setupOptionsMenu();
+
+ ExternalPlayerFragment externalPlayerFragment = new ExternalPlayerFragment();
+ getFragmentManager().beginTransaction()
+ .replace(R.id.playerFragment, externalPlayerFragment, ExternalPlayerFragment.TAG)
+ .commit();
butPlaybackSpeed = root.findViewById(R.id.butPlaybackSpeed);
txtvPlaybackSpeed = root.findViewById(R.id.txtvPlaybackSpeed);
@@ -111,7 +115,7 @@ public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarCh
sbPosition.setOnSeekBarChangeListener(this);
pager = root.findViewById(R.id.pager);
- pagerAdapter = new AudioPlayerPagerAdapter(getFragmentManager());
+ AudioPlayerPagerAdapter pagerAdapter = new AudioPlayerPagerAdapter(getFragmentManager());
pager.setAdapter(pagerAdapter);
pageIndicator = root.findViewById(R.id.page_indicator);
pageIndicator.setViewPager(pager);
@@ -120,6 +124,10 @@ public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarCh
return root;
}
+ public View getExternalPlayerHolder() {
+ return getView().findViewById(R.id.playerFragment);
+ }
+
private void setupControlButtons() {
butRev.setOnClickListener(v -> {
if (controller != null) {
@@ -256,7 +264,7 @@ public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarCh
@Override
public void onSleepTimerUpdate() {
- getActivity().invalidateOptionsMenu();
+ setupOptionsMenu();
}
@Override
@@ -313,7 +321,7 @@ public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarCh
}
updatePosition(new PlaybackPositionEvent(controller.getPosition(), controller.getDuration()));
updatePlaybackSpeedButton();
- getActivity().invalidateOptionsMenu();
+ setupOptionsMenu();
List<Chapter> chapters = controller.getMedia().getChapters();
boolean hasChapters = chapters != null && !chapters.isEmpty();
@@ -324,7 +332,7 @@ public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarCh
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
- setHasOptionsMenu(true);
+ //setHasOptionsMenu(true);
}
@Override
@@ -371,7 +379,7 @@ public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarCh
@Subscribe(threadMode = ThreadMode.MAIN)
public void favoritesChanged(FavoritesEvent event) {
- getActivity().invalidateOptionsMenu();
+ setupOptionsMenu();
}
@Override
@@ -407,34 +415,26 @@ public class AudioPlayerFragment extends Fragment implements SeekBar.OnSeekBarCh
}
}
- @Override
- public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
- super.onCreateOptionsMenu(menu, inflater);
- /*if (Flavors.FLAVOR == Flavors.PLAY) {
- requestCastButton(MenuItem.SHOW_AS_ACTION_ALWAYS);
- }*/
- inflater.inflate(R.menu.mediaplayer, menu);
- }
-
- @Override
- public void onPrepareOptionsMenu(Menu menu) {
- super.onPrepareOptionsMenu(menu);
+ public void setupOptionsMenu() {
+ if (toolbar.getMenu().size() == 0) {
+ toolbar.inflateMenu(R.menu.mediaplayer);
+ }
if (controller == null) {
return;
}
Playable media = controller.getMedia();
boolean isFeedMedia = media instanceof FeedMedia;
- menu.findItem(R.id.open_feed_item).setVisible(isFeedMedia);
+ toolbar.getMenu().findItem(R.id.open_feed_item).setVisible(isFeedMedia);
if (isFeedMedia) {
- FeedItemMenuHandler.onPrepareMenu(menu, ((FeedMedia) media).getItem());
+ FeedItemMenuHandler.onPrepareMenu(toolbar.getMenu(), ((FeedMedia) media).getItem());
}
- menu.findItem(R.id.set_sleeptimer_item).setVisible(!controller.sleepTimerActive());
- menu.findItem(R.id.disable_sleeptimer_item).setVisible(controller.sleepTimerActive());
+ toolbar.getMenu().findItem(R.id.set_sleeptimer_item).setVisible(!controller.sleepTimerActive());
+ toolbar.getMenu().findItem(R.id.disable_sleeptimer_item).setVisible(controller.sleepTimerActive());
}
@Override
- public boolean onOptionsItemSelected(MenuItem item) {
+ public boolean onMenuItemClick(MenuItem item) {
if (controller == null) {
return false;
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
index ce2232a55..fa753aac8 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java
@@ -1,9 +1,7 @@
package de.danoeh.antennapod.fragment;
import android.content.Intent;
-import android.os.Build;
import android.os.Bundle;
-import androidx.core.app.ActivityOptionsCompat;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
@@ -18,6 +16,7 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.core.event.PlaybackPositionEvent;
import de.danoeh.antennapod.core.feed.MediaType;
import de.danoeh.antennapod.core.glide.ApGlideSettings;
@@ -69,13 +68,10 @@ public class ExternalPlayerFragment extends Fragment {
Log.d(TAG, "layoutInfo was clicked");
if (controller != null && controller.getMedia() != null) {
- Intent intent = PlaybackService.getPlayerActivityIntent(getActivity(), controller.getMedia());
-
if (controller.getMedia().getMediaType() == MediaType.AUDIO) {
- ActivityOptionsCompat options = ActivityOptionsCompat
- .makeSceneTransitionAnimation(getActivity(), imgvCover, "coverTransition");
- startActivity(intent, options.toBundle());
+ ((MainActivity) getActivity()).expandBottomSheet();
} else {
+ Intent intent = PlaybackService.getPlayerActivityIntent(getActivity(), controller.getMedia());
startActivity(intent);
}
}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java
index 0ab6b78b9..63969345c 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java
@@ -56,7 +56,6 @@ public class NavDrawerFragment extends Fragment implements AdapterView.OnItemCli
public static final String TAG = "NavDrawerFragment";
public static final String[] NAV_DRAWER_TAGS = {
- AudioPlayerFragment.TAG,
QueueFragment.TAG,
EpisodesFragment.TAG,
SubscriptionFragment.TAG,