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 569ae19ac..9ec043828 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -60,7 +60,7 @@ public class MainActivity extends CastEnabledActivity { public static final String EXTRA_FRAGMENT_TAG = "fragment_tag"; public static final String EXTRA_FRAGMENT_ARGS = "fragment_args"; - private static final String EXTRA_FEED_ID = "fragment_feed_id"; + public static final String EXTRA_FEED_ID = "fragment_feed_id"; private static final String SAVE_BACKSTACK_COUNT = "backstackCount"; diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java index 613b7f4c5..1a7631813 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerInfoActivity.java @@ -1,18 +1,12 @@ package de.danoeh.antennapod.activity; -import android.app.AlertDialog; -import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Bundle; import android.util.Log; -import android.view.ContextMenu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.widget.AdapterView; -import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.ActionBarDrawerToggle; @@ -24,38 +18,17 @@ 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.adapter.NavListAdapter; -import de.danoeh.antennapod.core.asynctask.FeedRemover; -import de.danoeh.antennapod.core.dialog.ConfirmationDialog; -import de.danoeh.antennapod.core.event.FeedListUpdateEvent; import de.danoeh.antennapod.core.event.MessageEvent; import de.danoeh.antennapod.core.feed.Chapter; -import de.danoeh.antennapod.core.feed.Feed; -import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; -import de.danoeh.antennapod.core.service.playback.PlayerStatus; -import de.danoeh.antennapod.core.storage.DBReader; -import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.util.IntentUtils; -import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackController; -import de.danoeh.antennapod.dialog.RenameFeedDialog; -import de.danoeh.antennapod.fragment.AddFeedFragment; import de.danoeh.antennapod.fragment.ChaptersFragment; import de.danoeh.antennapod.fragment.CoverFragment; -import de.danoeh.antennapod.fragment.DownloadsFragment; -import de.danoeh.antennapod.fragment.EpisodesFragment; import de.danoeh.antennapod.fragment.ItemDescriptionFragment; -import de.danoeh.antennapod.fragment.PlaybackHistoryFragment; -import de.danoeh.antennapod.fragment.QueueFragment; -import de.danoeh.antennapod.fragment.SubscriptionFragment; +import de.danoeh.antennapod.fragment.NavDrawerFragment; import de.danoeh.antennapod.view.PagerIndicatorView; import de.danoeh.antennapod.view.PlaybackSpeedIndicatorView; -import io.reactivex.Observable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.Disposable; -import io.reactivex.schedulers.Schedulers; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -76,31 +49,15 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { private static final String PREFS = "AudioPlayerActivityPreferences"; private static final String PREF_KEY_SELECTED_FRAGMENT_POSITION = "selectedFragmentPosition"; - private static final String[] NAV_DRAWER_TAGS = { - QueueFragment.TAG, - EpisodesFragment.TAG, - SubscriptionFragment.TAG, - DownloadsFragment.TAG, - PlaybackHistoryFragment.TAG, - AddFeedFragment.TAG, - NavListAdapter.SUBSCRIPTION_LIST_TAG - }; - PlaybackSpeedIndicatorView butPlaybackSpeed; TextView txtvPlaybackSpeed; private DrawerLayout drawerLayout; - private NavListAdapter navAdapter; - private ListView navList; private View navDrawer; private ActionBarDrawerToggle drawerToggle; - private int mPosition = -1; - private ViewPager pager; private PagerIndicatorView pageIndicator; private MediaplayerInfoPagerAdapter pagerAdapter; - private Disposable disposable; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -111,9 +68,6 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { protected void onStop() { super.onStop(); Log.d(TAG, "onStop()"); - if (disposable != null) { - disposable.dispose(); - } saveCurrentFragment(); } @@ -123,8 +77,6 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { super.onDestroy(); // don't risk creating memory leaks drawerLayout = null; - navAdapter = null; - navList = null; navDrawer = null; drawerToggle = null; pager = null; @@ -137,7 +89,7 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { } void saveCurrentFragment() { - if(pager == null) { + if (pager == null) { return; } Log.d(TAG, "Saving preferences"); @@ -150,7 +102,7 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - if(drawerToggle != null) { + if (drawerToggle != null) { drawerToggle.onConfigurationChanged(newConfig); } } @@ -162,12 +114,6 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { pager.setCurrentItem(lastPosition); } - @Override - protected void onStart() { - super.onStart(); - loadData(); - } - @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); @@ -206,44 +152,18 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle(""); drawerLayout = findViewById(R.id.drawer_layout); - navList = findViewById(R.id.nav_list); - navDrawer = findViewById(R.id.nav_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); - - navAdapter = new NavListAdapter(itemAccess, this); - navList.setAdapter(navAdapter); - navList.setOnItemClickListener((parent, view, position, id) -> { - int viewType = parent.getAdapter().getItemViewType(position); - if (viewType != NavListAdapter.VIEW_TYPE_SECTION_DIVIDER) { - Intent intent = new Intent(MediaplayerInfoActivity.this, MainActivity.class); - //intent.putExtra(MainActivity.EXTRA_NAV_TYPE, viewType); - //intent.putExtra(MainActivity.EXTRA_NAV_INDEX, position); //TODO - startActivity(intent); - } - drawerLayout.closeDrawer(navDrawer); - }); - navList.setOnItemLongClickListener((parent, view, position, id) -> { - if (position < navAdapter.getTags().size()) { - showDrawerPreferencesDialog(); - return true; - } else { - mPosition = position; - return false; - } - }); - registerForContextMenu(navList); drawerToggle.syncState(); - findViewById(R.id.nav_settings).setOnClickListener(v -> { - drawerLayout.closeDrawer(navDrawer); - startActivity(new Intent(MediaplayerInfoActivity.this, PreferenceActivity.class)); - }); - - butPlaybackSpeed = findViewById(R.id.butPlaybackSpeed); - txtvPlaybackSpeed = findViewById(R.id.txtvPlaybackSpeed); + getSupportFragmentManager().beginTransaction() + .replace(R.id.navDrawerFragment, new NavDrawerFragment(), NavDrawerFragment.TAG) + .commit(); pager = findViewById(R.id.pager); pager.setOffscreenPageLimit(3); @@ -256,7 +176,7 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { loadLastFragment(); pager.onSaveInstanceState(); - navList.post(this::supportStartPostponedEnterTransition); + pager.post(this::supportStartPostponedEnterTransition); } @Override @@ -302,84 +222,14 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { return R.layout.mediaplayerinfo_activity; } - @Override public boolean onOptionsItemSelected(MenuItem item) { return (drawerToggle != null && drawerToggle.onOptionsItemSelected(item)) || super.onOptionsItemSelected(item); } - @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - super.onCreateContextMenu(menu, v, menuInfo); - if(v.getId() != R.id.nav_list) { - return; - } - AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo; - int position = adapterInfo.position; - if(position < navAdapter.getSubscriptionOffset()) { - return; - } - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.nav_feed_context, menu); - Feed feed = navDrawerData.feeds.get(position - navAdapter.getSubscriptionOffset()); - menu.setHeaderTitle(feed.getTitle()); - // episodes are not loaded, so we cannot check if the podcast has new or unplayed ones! - } - - @Override - public boolean onContextItemSelected(MenuItem item) { - final int position = mPosition; - mPosition = -1; // reset - if(position < 0) { - return false; - } - Feed feed = navDrawerData.feeds.get(position - navAdapter.getSubscriptionOffset()); - switch(item.getItemId()) { - case R.id.remove_all_new_flags_item: - DBWriter.removeFeedNewFlag(feed.getId()); - return true; - case R.id.mark_all_read_item: - DBWriter.markFeedRead(feed.getId()); - return true; - case R.id.rename_item: - new RenameFeedDialog(this, feed).show(); - return true; - case R.id.remove_item: - final FeedRemover remover = new FeedRemover(this, feed); - ConfirmationDialog conDialog = new ConfirmationDialog(this, - R.string.remove_feed_label, - getString(R.string.feed_delete_confirmation_msg, feed.getTitle())) { - @Override - public void onConfirmButtonPressed( - DialogInterface dialog) { - dialog.dismiss(); - if (controller != null) { - Playable playable = controller.getMedia(); - if (playable != null && playable instanceof FeedMedia) { - FeedMedia media = (FeedMedia) playable; - if (media.getItem() != null && media.getItem().getFeed() != null && - media.getItem().getFeed().getId() == feed.getId()) { - Log.d(TAG, "Currently playing episode is about to be deleted, skipping"); - remover.skipOnCompletion = true; - if(controller.getStatus() == PlayerStatus.PLAYING) { - IntentUtils.sendLocalBroadcast(MediaplayerInfoActivity.this, PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE); - } - } - } - } - remover.executeAsync(); - } - }; - conDialog.createNewDialog().show(); - return true; - default: - return super.onContextItemSelected(item); - } - } - @Override public void onBackPressed() { - if(isDrawerOpen()) { + 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 @@ -391,46 +241,6 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { } } - private void showDrawerPreferencesDialog() { - final List hiddenDrawerItems = UserPreferences.getHiddenDrawerItems(); - String[] navLabels = new String[NAV_DRAWER_TAGS.length]; - final boolean[] checked = new boolean[NAV_DRAWER_TAGS.length]; - for (int i = 0; i < NAV_DRAWER_TAGS.length; i++) { - String tag = NAV_DRAWER_TAGS[i]; - navLabels[i] = navAdapter.getLabel(tag); - if (!hiddenDrawerItems.contains(tag)) { - checked[i] = true; - } - } - - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle(R.string.drawer_preferences); - builder.setMultiChoiceItems(navLabels, checked, (dialog, which, isChecked) -> { - if (isChecked) { - hiddenDrawerItems.remove(NAV_DRAWER_TAGS[which]); - } else { - hiddenDrawerItems.add(NAV_DRAWER_TAGS[which]); - } - }); - builder.setPositiveButton(R.string.confirm_label, (dialog, which) -> UserPreferences.setHiddenDrawerItems(hiddenDrawerItems)); - builder.setNegativeButton(R.string.cancel_label, null); - builder.create().show(); - } - - private DBReader.NavDrawerData navDrawerData; - - private void loadData() { - disposable = Observable.fromCallable(DBReader::getNavDrawerData) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(result -> { - navDrawerData = result; - if (navAdapter != null) { - navAdapter.notifyDataSetChanged(); - } - }, error -> Log.e(TAG, Log.getStackTraceString(error))); - } - @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(MessageEvent event) { Log.d(TAG, "onEvent(" + event + ")"); @@ -442,73 +252,6 @@ public abstract class MediaplayerInfoActivity extends MediaplayerActivity { snackbar.show(); } - @Subscribe - public void onFeedListChanged(FeedListUpdateEvent event) { - loadData(); - } - - private final NavListAdapter.ItemAccess itemAccess = new NavListAdapter.ItemAccess() { - @Override - public int getCount() { - if (navDrawerData != null) { - return navDrawerData.feeds.size(); - } else { - return 0; - } - } - - @Override - public Feed getItem(int position) { - if (navDrawerData != null && 0 <= position && position < navDrawerData.feeds.size()) { - return navDrawerData.feeds.get(position); - } else { - return null; - } - } - - @Override - public int getSelectedItemIndex() { - return -1; - } - - @Override - public int getQueueSize() { - return (navDrawerData != null) ? navDrawerData.queueSize : 0; - } - - @Override - public int getNumberOfNewItems() { - return (navDrawerData != null) ? navDrawerData.numNewItems : 0; - } - - @Override - public int getNumberOfDownloadedItems() { - return (navDrawerData != null) ? navDrawerData.numDownloadedItems : 0; - } - - @Override - public int getReclaimableItems() { - return (navDrawerData != null) ? navDrawerData.reclaimableSpace : 0; - } - - @Override - public int getFeedCounter(long feedId) { - return navDrawerData != null ? navDrawerData.feedCounters.get(feedId) : 0; - } - - @Override - public int getFeedCounterSum() { - if(navDrawerData == null) { - return 0; - } - int sum = 0; - for(int counter : navDrawerData.feedCounters.values()) { - sum += counter; - } - return sum; - } - }; - private static class MediaplayerInfoPagerAdapter extends FragmentStatePagerAdapter { private static final String TAG = "MPInfoPagerAdapter"; 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 4101ee46d..0c8e5d8db 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NavDrawerFragment.java @@ -184,7 +184,11 @@ public class NavDrawerFragment extends Fragment implements AdapterView.OnItemCli protected void onPostExecute(Void result) { super.onPostExecute(result); if (selectedNavListIndex == position) { - ((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null); + if (getActivity() instanceof MainActivity) { + ((MainActivity) getActivity()).loadFragment(EpisodesFragment.TAG, null); + } else { + showMainActivity(EpisodesFragment.TAG); + } saveLastNavFragment(EpisodesFragment.TAG); } } @@ -215,6 +219,12 @@ public class NavDrawerFragment extends Fragment implements AdapterView.OnItemCli } } + private void showMainActivity(String tag) { + Intent intent = new Intent(getActivity(), MainActivity.class); + intent.putExtra(MainActivity.EXTRA_FRAGMENT_TAG, tag); + startActivity(intent); + } + @Subscribe public void onUnreadItemsChanged(UnreadItemsUpdateEvent event) { loadData(); @@ -353,12 +363,22 @@ public class NavDrawerFragment extends Fragment implements AdapterView.OnItemCli if (viewType != NavListAdapter.VIEW_TYPE_SECTION_DIVIDER) { if (position < navAdapter.getSubscriptionOffset()) { String tag = navAdapter.getTags().get(position); - ((MainActivity) getActivity()).loadFragment(tag, null); + if (getActivity() instanceof MainActivity) { + ((MainActivity) getActivity()).loadFragment(tag, null); + } else { + showMainActivity(tag); + } saveLastNavFragment(tag); } else { int pos = position - navAdapter.getSubscriptionOffset(); long feedId = navDrawerData.feeds.get(pos).getId(); - ((MainActivity) getActivity()).loadFeedFragmentById(feedId, null); + if (getActivity() instanceof MainActivity) { + ((MainActivity) getActivity()).loadFeedFragmentById(feedId, null); + } else { + Intent intent = new Intent(getActivity(), MainActivity.class); + intent.putExtra(MainActivity.EXTRA_FEED_ID, feedId); + startActivity(intent); + } saveLastNavFragment(String.valueOf(feedId)); } selectedNavListIndex = position; diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml index 76139c57e..89b7e0c47 100644 --- a/app/src/main/res/layout/main.xml +++ b/app/src/main/res/layout/main.xml @@ -37,7 +37,6 @@ android:layout_marginEnd="24dp" android:layout_marginRight="24dp" android:layout_gravity="start" - android:background="?android:attr/windowBackground" android:orientation="vertical" /> \ No newline at end of file diff --git a/app/src/main/res/layout/mediaplayerinfo_activity.xml b/app/src/main/res/layout/mediaplayerinfo_activity.xml index c46672ceb..526994752 100644 --- a/app/src/main/res/layout/mediaplayerinfo_activity.xml +++ b/app/src/main/res/layout/mediaplayerinfo_activity.xml @@ -236,6 +236,13 @@ - + \ No newline at end of file