summaryrefslogtreecommitdiff
path: root/app
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
parent16d0a1befa09aaa40e29ff906bc86f5a1d496fb5 (diff)
downloadAntennaPod-e417f4a5f8f0a2e53deb5eba7059a83d85432a9e.zip
Added bottom sheet to activity
Diffstat (limited to 'app')
-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
-rw-r--r--app/src/main/res/layout/audioplayer_fragment.xml10
-rw-r--r--app/src/main/res/layout/main.xml48
6 files changed, 101 insertions, 69 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,
diff --git a/app/src/main/res/layout/audioplayer_fragment.xml b/app/src/main/res/layout/audioplayer_fragment.xml
index efd64ef3b..17352b93d 100644
--- a/app/src/main/res/layout/audioplayer_fragment.xml
+++ b/app/src/main/res/layout/audioplayer_fragment.xml
@@ -12,6 +12,7 @@
android:minHeight="?attr/actionBarSize"
android:theme="?attr/actionBarTheme"
android:layout_alignParentTop="true"
+ app:navigationIcon="?homeAsUpIndicator"
android:id="@+id/toolbar"/>
<de.danoeh.antennapod.view.PagerIndicatorView
@@ -23,6 +24,15 @@
android:layout_below="@id/toolbar"
android:layout_centerHorizontal="true"/>
+ <FrameLayout
+ android:id="@+id/playerFragment"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_alignParentTop="true"
+ android:background="?android:attr/windowBackground"
+ tools:layout_height="@dimen/external_player_height"
+ tools:background="@android:color/holo_green_light" />
+
<androidx.viewpager.widget.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml
index 89b7e0c47..90088b792 100644
--- a/app/src/main/res/layout/main.xml
+++ b/app/src/main/res/layout/main.xml
@@ -1,42 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/drawer_layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <RelativeLayout
- android:id="@+id/content"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
- <FrameLayout
- android:id="@+id/playerFragment"
+ <androidx.coordinatorlayout.widget.CoordinatorLayout
+ android:id="@+id/overview_coordinator_layout"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- tools:layout_height="64dp"
- tools:background="@android:color/holo_green_light" />
+ android:layout_height="match_parent">
<FrameLayout
android:id="@+id/main_view"
android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_above="@id/playerFragment"
+ android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:foreground="?android:windowContentOverlay"
+ android:layout_marginBottom="@dimen/external_player_height"
tools:background="@android:color/holo_red_dark" />
- </RelativeLayout>
+ <FrameLayout
+ android:id="@+id/audioplayerFragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="?android:attr/windowBackground"
+ app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" />
+
+ </androidx.coordinatorlayout.widget.CoordinatorLayout>
<FrameLayout
- android:id="@+id/navDrawerFragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginEnd="24dp"
- android:layout_marginRight="24dp"
- android:layout_gravity="start"
- android:orientation="vertical" />
+ android:id="@+id/navDrawerFragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginEnd="24dp"
+ android:layout_marginRight="24dp"
+ android:layout_gravity="start"
+ android:orientation="vertical" />
</androidx.drawerlayout.widget.DrawerLayout> \ No newline at end of file