From 67cc7c98857b3fa0897ab96b2b87f52d99e4de2f Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 28 Mar 2015 10:59:07 +0100 Subject: Sync episode actions with gpodder, smart mark as played * Create episode actions when episodes are downloaded, played, deleted and marked as read * Sync (download and upload) episode actions * MediaPlayerActivity deletes almost completely played episode on close * Improved parsing of datetime strings * Smart mark as played can be disabled or set in the preferences --- .../antennapod/activity/AudioplayerActivity.java | 4 +-- .../antennapod/activity/MediaplayerActivity.java | 32 ++++++++++++---------- .../adapter/DefaultActionButtonCallback.java | 15 ++++++++++ .../menuhandler/FeedItemMenuHandler.java | 22 +++++++++++++++ .../preferences/PreferenceController.java | 20 +++++++++++++- 5 files changed, 75 insertions(+), 18 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 821c86044..f056b107b 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -135,11 +135,9 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc @Override protected void onStop() { super.onStop(); - if (BuildConfig.DEBUG) - Log.d(TAG, "onStop"); + Log.d(TAG, "onStop()"); cancelLoadTask(); EventDistributor.getInstance().unregister(contentUpdate); - } @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 099e96be9..51a1a0eb6 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -12,19 +12,18 @@ import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.view.Window; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; -import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.FeedItem; 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.storage.DBTasks; +import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.ShareUtils; import de.danoeh.antennapod.core.util.StorageUtils; @@ -167,8 +166,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity chooseTheme(); super.onCreate(savedInstanceState); - if (BuildConfig.DEBUG) - Log.d(TAG, "Creating Activity"); + Log.d(TAG, "onCreate()"); StorageUtils.checkStorageAvailability(this); setVolumeControlStream(AudioManager.STREAM_MUSIC); @@ -224,8 +222,18 @@ public abstract class MediaplayerActivity extends ActionBarActivity @Override protected void onStop() { super.onStop(); - if (BuildConfig.DEBUG) - Log.d(TAG, "Activity stopped"); + Log.d(TAG, "onStop()"); + + // delete if auto delete is enabled and less than 3% of episode is left + Playable playable = controller.getMedia(); + if(playable instanceof FeedMedia) { + FeedMedia media = (FeedMedia) playable; + if(UserPreferences.isAutoDelete() && media.hasAlmostEnded()) { + Log.d(TAG, "Delete " + media.toString()); + DBWriter.deleteFeedMediaOfItem(this, media.getId()); + } + } + if (controller != null) { controller.release(); } @@ -234,8 +242,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity @Override protected void onDestroy() { super.onDestroy(); - if (BuildConfig.DEBUG) - Log.d(TAG, "Activity destroyed"); + Log.d(TAG, "onDestroy()"); } @Override @@ -358,8 +365,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity @Override protected void onResume() { super.onResume(); - if (BuildConfig.DEBUG) - Log.d(TAG, "Resuming Activity"); + Log.d(TAG, "onResume()"); StorageUtils.checkStorageAvailability(this); controller.init(); } @@ -393,8 +399,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity } private void updateProgressbarPosition(int position, int duration) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Updating progressbar info"); + Log.d(TAG, "updateProgressbarPosition(" + position + ", " + duration +")"); float progress = ((float) position) / duration; sbPosition.setProgress((int) (progress * sbPosition.getMax())); } @@ -406,8 +411,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity * FeedMedia object. */ protected boolean loadMediaInfo() { - if (BuildConfig.DEBUG) - Log.d(TAG, "Loading media info"); + Log.d(TAG, "loadMediaInfo()"); Playable media = controller.getMedia(); if (media != null) { txtvPosition.setText(Converter.getDurationStringLong((media diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java index 14644dd68..d3843934a 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java @@ -11,6 +11,8 @@ import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.service.playback.PlaybackService; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction; +import de.danoeh.antennapod.core.preferences.GpodnetPreferences; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequestException; @@ -61,6 +63,19 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { } else { if (!item.isRead()) { DBWriter.markItemRead(context, item, true, true); + + if(GpodnetPreferences.loggedIn()) { + // gpodder: send played action + FeedMedia media = item.getMedia(); + GpodnetEpisodeAction action = new GpodnetEpisodeAction.Builder(item, GpodnetEpisodeAction.Action.PLAY) + .currentDeviceId() + .currentTimestamp() + .started(media.getDuration() / 1000) + .position(media.getDuration() / 1000) + .total(media.getDuration() / 1000) + .build(); + GpodnetPreferences.enqueueEpisodeAction(action); + } } } } diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index 8ccbdafc6..ab8613bbe 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -7,6 +7,10 @@ import android.net.Uri; import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction.Action; +import de.danoeh.antennapod.core.preferences.GpodnetPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; @@ -156,9 +160,27 @@ public class FeedItemMenuHandler { break; case R.id.mark_read_item: DBWriter.markItemRead(context, selectedItem, true, true); + if(GpodnetPreferences.loggedIn()) { + FeedMedia media = selectedItem.getMedia(); + GpodnetEpisodeAction actionPlay = new GpodnetEpisodeAction.Builder(selectedItem, Action.PLAY) + .currentDeviceId() + .currentTimestamp() + .started(media.getDuration() / 1000) + .position(media.getDuration() / 1000) + .total(media.getDuration() / 1000) + .build(); + GpodnetPreferences.enqueueEpisodeAction(actionPlay); + } break; case R.id.mark_unread_item: DBWriter.markItemRead(context, selectedItem, false, true); + if(GpodnetPreferences.loggedIn()) { + GpodnetEpisodeAction actionNew = new GpodnetEpisodeAction.Builder(selectedItem, Action.NEW) + .currentDeviceId() + .currentTimestamp() + .build(); + GpodnetPreferences.enqueueEpisodeAction(actionNew); + } break; case R.id.add_to_queue_item: DBWriter.addQueueItem(context, selectedItem.getId()); diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java index 227ea8dfb..32683c65c 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -343,6 +343,7 @@ public class PreferenceController { } }); buildUpdateIntervalPreference(); + buildSmartMarkAsPlayedPreference(); buildAutodownloadSelectedNetworsPreference(); setSelectedNetworksEnabled(UserPreferences .isEnableAutodownloadWifiFilter()); @@ -403,6 +404,24 @@ public class PreferenceController { } + private void buildSmartMarkAsPlayedPreference() { + final Resources res = ui.getActivity().getResources(); + + ListPreference pref = (ListPreference) ui.findPreference(UserPreferences.PREF_SMART_MARK_AS_PLAYED_SECS); + String[] values = res.getStringArray( + R.array.smart_mark_as_played_values); + String[] entries = new String[values.length]; + for (int x = 0; x < values.length; x++) { + if(x == 0) { + entries[x] = res.getString(R.string.pref_smart_mark_as_played_disabled); + } else { + Integer v = Integer.parseInt(values[x]); + entries[x] = v + " " + res.getString(R.string.time_unit_seconds); + } + } + pref.setEntries(entries); + } + private void setSelectedNetworksEnabled(boolean b) { if (selectedNetworks != null) { for (Preference p : selectedNetworks) { @@ -430,7 +449,6 @@ public class PreferenceController { .setEnabled(UserPreferences.isEnableAutodownload()); } - private void setParallelDownloadsText(int downloads) { final Resources res = ui.getActivity().getResources(); -- cgit v1.2.3 From fbf1d8373c4e6bd38a73af7e8ff0abe932da0ad8 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 5 Apr 2015 19:48:57 +0200 Subject: Minor changes: Log, import order, small refactorings --- .../danoeh/antennapod/activity/MainActivity.java | 6 ++--- .../fragment/CompletedDownloadsFragment.java | 18 ++++++--------- .../fragment/ExternalPlayerFragment.java | 23 +++++-------------- .../danoeh/antennapod/fragment/ItemFragment.java | 24 +++++++++++--------- .../antennapod/fragment/ItemlistFragment.java | 26 ++++++++++++---------- .../antennapod/fragment/NewEpisodesFragment.java | 19 +++++++++++----- .../fragment/PlaybackHistoryFragment.java | 26 +++++++++++++--------- .../danoeh/antennapod/fragment/QueueFragment.java | 6 +++-- .../danoeh/antennapod/fragment/SearchFragment.java | 22 +++++++----------- .../menuhandler/FeedItemMenuHandler.java | 7 +++--- 10 files changed, 87 insertions(+), 90 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 2efee838d..7f0dceb77 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -25,11 +25,11 @@ import org.apache.commons.lang3.Validate; import java.util.List; -import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.adapter.NavListAdapter; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.QueueEvent; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.util.StorageUtils; @@ -42,6 +42,7 @@ import de.danoeh.antennapod.fragment.PlaybackHistoryFragment; import de.danoeh.antennapod.fragment.QueueFragment; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import de.danoeh.antennapod.preferences.PreferenceController; +import de.greenrobot.event.EventBus; /** * The activity that is shown when the user launches the app. @@ -440,8 +441,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity @Override public void update(EventDistributor eventDistributor, Integer arg) { if ((EVENTS & arg) != 0) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Received contentUpdate Intent."); + Log.d(TAG, "Received contentUpdate Intent."); loadData(); } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java index d63d66966..3ca5b3c89 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/CompletedDownloadsFragment.java @@ -8,6 +8,7 @@ import android.support.v4.app.ListFragment; import android.view.View; import android.widget.ListView; +import java.util.Collections; import java.util.List; import de.danoeh.antennapod.R; @@ -17,7 +18,6 @@ import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.util.QueueAccess; /** * Displays all running downloads and provides a button to delete them @@ -26,11 +26,9 @@ public class CompletedDownloadsFragment extends ListFragment { private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOADLOG_UPDATE | - EventDistributor.QUEUE_UPDATE | EventDistributor.UNREAD_ITEMS_UPDATE; private List items; - private QueueAccess queue; private DownloadedEpisodesListAdapter listAdapter; private boolean viewCreated = false; @@ -155,7 +153,7 @@ public class CompletedDownloadsFragment extends ListFragment { } } - private class ItemLoader extends AsyncTask { + private class ItemLoader extends AsyncTask> { @Override protected void onPreExecute() { @@ -166,11 +164,10 @@ public class CompletedDownloadsFragment extends ListFragment { } @Override - protected void onPostExecute(Object[] results) { + protected void onPostExecute(List results) { super.onPostExecute(results); if (results != null) { - items = (List) results[0]; - queue = (QueueAccess) results[1]; + items = results; itemsLoaded = true; if (viewCreated && getActivity() != null) { onFragmentLoaded(); @@ -179,13 +176,12 @@ public class CompletedDownloadsFragment extends ListFragment { } @Override - protected Object[] doInBackground(Void... params) { + protected List doInBackground(Void... params) { Context context = getActivity(); if (context != null) { - return new Object[]{DBReader.getDownloadedItems(context), - QueueAccess.IDListAccess(DBReader.getQueueIDList(context))}; + return DBReader.getDownloadedItems(context); } - return null; + return Collections.emptyList(); } } } 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 a42658057..fdb128f03 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ExternalPlayerFragment.java @@ -13,7 +13,6 @@ import android.widget.TextView; import com.squareup.picasso.Picasso; -import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.util.Converter; @@ -54,8 +53,7 @@ public class ExternalPlayerFragment extends Fragment { @Override public void onClick(View v) { - if (BuildConfig.DEBUG) - Log.d(TAG, "layoutInfo was clicked"); + Log.d(TAG, "layoutInfo was clicked"); if (controller.getMedia() != null) { startActivity(PlaybackService.getPlayerActivityIntent( @@ -90,14 +88,10 @@ public class ExternalPlayerFragment extends Fragment { @Override public void onBufferStart() { - // TODO Auto-generated method stub - } @Override public void onBufferEnd() { - // TODO Auto-generated method stub - } @Override @@ -153,7 +147,6 @@ public class ExternalPlayerFragment extends Fragment { butPlay.setOnClickListener(controller .newOnPlayButtonClickListener()); } - } @Override @@ -170,8 +163,6 @@ public class ExternalPlayerFragment extends Fragment { @Override public void onPlaybackSpeedChange() { - // TODO Auto-generated method stub - } }; } @@ -185,8 +176,7 @@ public class ExternalPlayerFragment extends Fragment { @Override public void onDestroy() { super.onDestroy(); - if (BuildConfig.DEBUG) - Log.d(TAG, "Fragment is about to be destroyed"); + Log.d(TAG, "Fragment is about to be destroyed"); if (controller != null) { controller.release(); } @@ -201,8 +191,7 @@ public class ExternalPlayerFragment extends Fragment { } private boolean loadMediaInfo() { - if (BuildConfig.DEBUG) - Log.d(TAG, "Loading media info"); + Log.d(TAG, "Loading media info"); if (controller.serviceAvailable()) { Playable media = controller.getMedia(); if (media != null) { @@ -221,13 +210,11 @@ public class ExternalPlayerFragment extends Fragment { } return true; } else { - Log.w(TAG, - "loadMediaInfo was called while the media object of playbackService was null!"); + Log.w(TAG, "loadMediaInfo was called while the media object of playbackService was null!"); return false; } } else { - Log.w(TAG, - "loadMediaInfo was called while playbackService was null!"); + Log.w(TAG, "loadMediaInfo was called while playbackService was null!"); return false; } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java index e80bf5f14..b6edd30aa 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java @@ -17,6 +17,7 @@ import android.support.v7.widget.PopupMenu; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.text.format.DateUtils; +import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -43,6 +44,7 @@ import de.danoeh.antennapod.core.asynctask.DownloadObserver; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.QueueEvent; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; @@ -51,14 +53,17 @@ import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; -import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.playback.Timeline; import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; +import de.greenrobot.event.EventBus; /** * Displays information about a FeedItem and actions. */ -public class ItemFragment extends Fragment implements LoaderManager.LoaderCallbacks> { +public class ItemFragment extends Fragment implements LoaderManager.LoaderCallbacks> { + + private static final String TAG = "ItemFragment"; private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED | @@ -84,7 +89,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba private boolean itemsLoaded = false; private long itemID; private FeedItem item; - private QueueAccess queue; + private LongList queue; private String webviewData; private DownloadObserver downloadObserver; private List downloaderList; @@ -389,23 +394,23 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba @Override - public Loader> onCreateLoader(int id, Bundle args) { - return new DBTaskLoader>(getActivity()) { + public Loader> onCreateLoader(int id, Bundle args) { + return new DBTaskLoader>(getActivity()) { @Override - public Pair loadInBackground() { + public Pair loadInBackground() { FeedItem data1 = DBReader.getFeedItem(getContext(), itemID); if (data1 != null) { Timeline t = new Timeline(getActivity(), data1); webviewData = t.processShownotes(false); } - QueueAccess data2 = QueueAccess.IDListAccess(DBReader.getQueueIDList(getContext())); + LongList data2 = DBReader.getQueueIDList(getContext()); return Pair.create(data1, data2); } }; } @Override - public void onLoadFinished(Loader> loader, Pair data) { + public void onLoadFinished(Loader> loader, Pair data) { if (data != null) { item = data.first; @@ -420,8 +425,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba } @Override - public void onLoaderReset(Loader> loader) { - + public void onLoaderReset(Loader> loader) { } private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index acb07626c..d59add6b3 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -9,6 +9,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.ListFragment; +import android.support.v4.util.Pair; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.SearchView; import android.util.Log; @@ -29,7 +30,6 @@ import org.apache.commons.lang3.Validate; import java.util.List; -import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.FeedInfoActivity; import de.danoeh.antennapod.activity.MainActivity; @@ -44,17 +44,19 @@ import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.QueueEvent; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; -import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.gui.MoreContentListFooterUtil; import de.danoeh.antennapod.menuhandler.FeedMenuHandler; import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; +import de.greenrobot.event.EventBus; /** * Displays a list of FeedItems. @@ -76,7 +78,7 @@ public class ItemlistFragment extends ListFragment { private long feedID; private Feed feed; - protected QueueAccess queue; + private LongList queue; private boolean itemsLoaded = false; private boolean viewsCreated = false; @@ -288,8 +290,7 @@ public class ItemlistFragment extends ListFragment { @Override public void update(EventDistributor eventDistributor, Integer arg) { if ((EVENTS & arg) != 0) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Received contentUpdate Intent."); + Log.d(TAG, "Received contentUpdate Intent."); if ((EventDistributor.DOWNLOAD_QUEUED & arg) != 0) { updateProgressBarVisibility(); } else { @@ -474,25 +475,26 @@ public class ItemlistFragment extends ListFragment { } } - private class ItemLoader extends AsyncTask { + private class ItemLoader extends AsyncTask> { @Override - protected Object[] doInBackground(Long... params) { + protected Pair doInBackground(Long... params) { long feedID = params[0]; Context context = getActivity(); if (context != null) { - return new Object[]{DBReader.getFeed(context, feedID), - QueueAccess.IDListAccess(DBReader.getQueueIDList(context))}; + Feed feed = DBReader.getFeed(context, feedID); + LongList queue = DBReader.getQueueIDList(context); + return Pair.create(feed, queue); } else { return null; } } @Override - protected void onPostExecute(Object[] res) { + protected void onPostExecute(Pair res) { super.onPostExecute(res); if (res != null) { - feed = (Feed) res[0]; - queue = (QueueAccess) res[1]; + feed = res.first; + queue = res.second; itemsLoaded = true; if (viewsCreated) { onFragmentLoaded(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java index 5601000dc..9ed44a8dd 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java @@ -37,6 +37,7 @@ import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.QueueEvent; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; @@ -44,11 +45,16 @@ import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; + import de.danoeh.antennapod.core.util.QueueAccess; import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken; import de.danoeh.antennapod.core.util.gui.UndoBarController; + +import de.danoeh.antennapod.core.util.LongList; + import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; +import de.greenrobot.event.EventBus; /** * Shows unread or recently published episodes @@ -57,7 +63,6 @@ public class NewEpisodesFragment extends Fragment { private static final String TAG = "NewEpisodesFragment"; private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED | - EventDistributor.QUEUE_UPDATE | EventDistributor.UNREAD_ITEMS_UPDATE | EventDistributor.PLAYER_STATUS_UPDATE; @@ -75,7 +80,7 @@ public class NewEpisodesFragment extends Fragment { private List unreadItems; private List recentItems; - private QueueAccess queueAccess; + private LongList queue; private List downloaderList; private boolean itemsLoaded = false; @@ -357,7 +362,7 @@ public class NewEpisodesFragment extends Fragment { @Override public boolean isInQueue(FeedItem item) { if (itemsLoaded) { - return queueAccess.contains(item.getId()); + return queue.contains(item.getId()); } else { return false; } @@ -437,9 +442,11 @@ public class NewEpisodesFragment extends Fragment { protected Object[] doInBackground(Void... params) { Context context = activity.get(); if (context != null) { - return new Object[]{DBReader.getUnreadItemsList(context), + return new Object[] { + DBReader.getUnreadItemsList(context), DBReader.getRecentlyPublishedEpisodes(context, RECENT_EPISODES_LIMIT), - QueueAccess.IDListAccess(DBReader.getQueueIDList(context))}; + DBReader.getQueueIDList(context) + }; } else { return null; } @@ -454,7 +461,7 @@ public class NewEpisodesFragment extends Fragment { if (lists != null) { unreadItems = (List) lists[0]; recentItems = (List) lists[1]; - queueAccess = (QueueAccess) lists[2]; + queue = (LongList) lists[2]; itemsLoaded = true; if (viewsCreated && activity.get() != null) { onFragmentLoaded(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index ab38af106..6e2e6834c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -7,7 +7,9 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.ListFragment; +import android.support.v4.util.Pair; import android.support.v4.view.MenuItemCompat; +import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -25,12 +27,14 @@ import de.danoeh.antennapod.core.asynctask.DownloadObserver; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.QueueEvent; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; +import de.greenrobot.event.EventBus; public class PlaybackHistoryFragment extends ListFragment { private static final String TAG = "PlaybackHistoryFragment"; @@ -38,7 +42,7 @@ public class PlaybackHistoryFragment extends ListFragment { EventDistributor.PLAYER_STATUS_UPDATE; private List playbackHistory; - private QueueAccess queue; + private LongList queue; private FeedItemlistAdapter adapter; private boolean itemsLoaded = false; @@ -251,27 +255,27 @@ public class PlaybackHistoryFragment extends ListFragment { } } - private class ItemLoader extends AsyncTask { + private class ItemLoader extends AsyncTask,LongList>> { @Override - protected Object[] doInBackground(Void... params) { + protected Pair,LongList> doInBackground(Void... params) { Context context = activity.get(); if (context != null) { - List ph = DBReader.getPlaybackHistory(context); - DBReader.loadFeedDataOfFeedItemlist(context, ph); - return new Object[]{ph, - QueueAccess.IDListAccess(DBReader.getQueueIDList(context))}; + List history = DBReader.getPlaybackHistory(context); + LongList queue = DBReader.getQueueIDList(context); + DBReader.loadFeedDataOfFeedItemlist(context, history); + return Pair.create(history, queue); } else { return null; } } @Override - protected void onPostExecute(Object[] res) { + protected void onPostExecute(Pair,LongList> res) { super.onPostExecute(res); if (res != null) { - playbackHistory = (List) res[0]; - queue = (QueueAccess) res[1]; + playbackHistory = res.first; + queue = res.second; itemsLoaded = true; if (viewsCreated) { onFragmentLoaded(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 70a231cad..509c9fc31 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -7,7 +7,6 @@ import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; -import android.os.Parcelable; import android.support.v4.app.Fragment; import android.support.v7.widget.SearchView; import android.util.Log; @@ -37,6 +36,8 @@ import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; @@ -48,6 +49,7 @@ import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken; import de.danoeh.antennapod.core.util.gui.UndoBarController; import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; +import de.greenrobot.event.EventBus; /** * Shows all items in the queue @@ -295,7 +297,7 @@ public class QueueFragment extends Fragment { DBWriter.moveQueueItemToBottom(getActivity(), selectedItem.getId(), true); return true; case R.id.remove_from_queue_item: - DBWriter.removeQueueItem(getActivity(), selectedItem.getId(), false); + DBWriter.removeQueueItem(getActivity(), selectedItem, false); return true; default: return super.onContextItemSelected(item); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java index cf96bb094..3d6722370 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java @@ -13,6 +13,7 @@ import android.view.MenuItem; import android.view.View; import android.widget.ListView; +import java.util.Collections; import java.util.List; import de.danoeh.antennapod.R; @@ -23,9 +24,7 @@ import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedComponent; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.SearchResult; -import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.FeedSearcher; -import de.danoeh.antennapod.core.util.QueueAccess; import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; @@ -44,8 +43,6 @@ public class SearchFragment extends ListFragment { private boolean viewCreated = false; private boolean itemsLoaded = false; - private QueueAccess queue; - /** * Create a new SearchFragment that searches all feeds. */ @@ -165,8 +162,7 @@ public class SearchFragment extends ListFragment { @Override public void update(EventDistributor eventDistributor, Integer arg) { if ((arg & (EventDistributor.UNREAD_ITEMS_UPDATE - | EventDistributor.DOWNLOAD_HANDLED - | EventDistributor.QUEUE_UPDATE)) != 0) { + | EventDistributor.DOWNLOAD_HANDLED)) != 0) { startSearchTask(); } } @@ -209,17 +205,16 @@ public class SearchFragment extends ListFragment { } } - private class SearchTask extends AsyncTask { + private class SearchTask extends AsyncTask> { @Override - protected Object[] doInBackground(Bundle... params) { + protected List doInBackground(Bundle... params) { String query = params[0].getString(ARG_QUERY); long feed = params[0].getLong(ARG_FEED); Context context = getActivity(); if (context != null) { - return new Object[]{FeedSearcher.performSearch(context, query, feed), - QueueAccess.IDListAccess(DBReader.getQueueIDList(context))}; + return FeedSearcher.performSearch(context, query, feed); } else { - return null; + return Collections.emptyList(); } } @@ -232,12 +227,11 @@ public class SearchFragment extends ListFragment { } @Override - protected void onPostExecute(Object[] results) { + protected void onPostExecute(List results) { super.onPostExecute(results); if (results != null) { itemsLoaded = true; - searchResults = (List) results[0]; - queue = (QueueAccess) results[1]; + searchResults = results; if (viewCreated) { onFragmentLoaded(); } diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index ab8613bbe..b23f0ef28 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -4,8 +4,8 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; -import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction; @@ -16,6 +16,7 @@ import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.QueueAccess; import de.danoeh.antennapod.core.util.ShareUtils; @@ -126,7 +127,7 @@ public class FeedItemMenuHandler { * @return true if selectedItem is not null. */ public static boolean onPrepareMenu(MenuInterface mi, - FeedItem selectedItem, boolean showExtendedMenu, QueueAccess queueAccess, int... excludeIds) { + FeedItem selectedItem, boolean showExtendedMenu, LongList queueAccess, int... excludeIds) { boolean rc = onPrepareMenu(mi, selectedItem, showExtendedMenu, queueAccess); if (rc && excludeIds != null) { for (int id : excludeIds) { @@ -186,7 +187,7 @@ public class FeedItemMenuHandler { DBWriter.addQueueItem(context, selectedItem.getId()); break; case R.id.remove_from_queue_item: - DBWriter.removeQueueItem(context, selectedItem.getId(), true); + DBWriter.removeQueueItem(context, selectedItem, true); break; case R.id.stream_item: DBTasks.playMedia(context, selectedItem.getMedia(), true, true, -- cgit v1.2.3 From b2a50983efe865b473e8be590deedee5a62113b7 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 5 Apr 2015 19:53:21 +0200 Subject: smart mark as played: media player activity, player widget, when media is changed --- .../antennapod/activity/MediaplayerActivity.java | 15 +++++--- .../antennapod/service/PlayerWidgetService.java | 41 +++++++++++++++------- 2 files changed, 39 insertions(+), 17 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 51a1a0eb6..f9030ac77 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -226,11 +226,18 @@ public abstract class MediaplayerActivity extends ActionBarActivity // delete if auto delete is enabled and less than 3% of episode is left Playable playable = controller.getMedia(); - if(playable instanceof FeedMedia) { + if(playable != null && playable instanceof FeedMedia) { FeedMedia media = (FeedMedia) playable; - if(UserPreferences.isAutoDelete() && media.hasAlmostEnded()) { - Log.d(TAG, "Delete " + media.toString()); - DBWriter.deleteFeedMediaOfItem(this, media.getId()); + if(media.hasAlmostEnded()) { + Log.d(TAG, "smart mark as read"); + FeedItem item = media.getItem(); + DBWriter.markItemRead(this, item, true, false); + DBWriter.removeQueueItem(this, item, false); + DBWriter.addItemToPlaybackHistory(this, media); + if (UserPreferences.isAutoDelete()) { + Log.d(TAG, "Delete " + media.toString()); + DBWriter.deleteFeedMediaOfItem(this, media.getId()); + } } } diff --git a/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java b/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java index 55dfdc20b..1d9e8e412 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java +++ b/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java @@ -12,14 +12,18 @@ import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.RemoteViews; -import de.danoeh.antennapod.core.BuildConfig; + import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.receiver.MediaButtonReceiver; -import de.danoeh.antennapod.receiver.PlayerWidget; import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.service.playback.PlayerStatus; +import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.playback.Playable; +import de.danoeh.antennapod.receiver.PlayerWidget; /** Updates the state of the player widget */ public class PlayerWidgetService extends Service { @@ -39,8 +43,7 @@ public class PlayerWidgetService extends Service { @Override public void onCreate() { super.onCreate(); - if (BuildConfig.DEBUG) - Log.d(TAG, "Service created"); + Log.d(TAG, "Service created"); isUpdating = false; psLock = new Object(); } @@ -48,8 +51,24 @@ public class PlayerWidgetService extends Service { @Override public void onDestroy() { super.onDestroy(); - if (BuildConfig.DEBUG) - Log.d(TAG, "Service is about to be destroyed"); + Log.d(TAG, "Service is about to be destroyed"); + + Playable playable = playbackService.getPlayable(); + if(playable != null && playable instanceof FeedMedia) { + FeedMedia media = (FeedMedia) playable; + if(media.hasAlmostEnded()) { + Log.d(TAG, "smart mark as read"); + FeedItem item = media.getItem(); + DBWriter.markItemRead(this, item, true, false); + DBWriter.removeQueueItem(this, item, false); + DBWriter.addItemToPlaybackHistory(this, media); + if (UserPreferences.isAutoDelete()) { + Log.d(TAG, "Delete " + media.toString()); + DBWriter.deleteFeedMediaOfItem(this, media.getId()); + } + } + } + try { unbindService(mConnection); } catch (IllegalArgumentException e) { @@ -72,9 +91,7 @@ public class PlayerWidgetService extends Service { startViewUpdaterIfNotRunning(); } } else { - if (BuildConfig.DEBUG) - Log.d(TAG, - "Service was called while updating. Ignoring update request"); + Log.d(TAG, "Service was called while updating. Ignoring update request"); } return Service.START_NOT_STICKY; } @@ -153,8 +170,7 @@ public class PlayerWidgetService extends Service { private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Connection to service established"); + Log.d(TAG, "Connection to service established"); synchronized (psLock) { playbackService = ((PlaybackService.LocalBinder) service) .getService(); @@ -166,8 +182,7 @@ public class PlayerWidgetService extends Service { public void onServiceDisconnected(ComponentName name) { synchronized (psLock) { playbackService = null; - if (BuildConfig.DEBUG) - Log.d(TAG, "Disconnected from service"); + Log.d(TAG, "Disconnected from service"); } } -- cgit v1.2.3 From 8850c09920723559895062050163817979bcd8d2 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 5 Apr 2015 20:49:11 +0200 Subject: QueueEvents, Queue shows undobar on removal of an item --- .../danoeh/antennapod/activity/MainActivity.java | 17 ++++-- .../danoeh/antennapod/fragment/ItemFragment.java | 7 ++- .../antennapod/fragment/ItemlistFragment.java | 8 ++- .../antennapod/fragment/NewEpisodesFragment.java | 35 ++++++++----- .../fragment/PlaybackHistoryFragment.java | 7 +++ .../danoeh/antennapod/fragment/QueueFragment.java | 61 +++++++++++++++------- .../menuhandler/FeedItemMenuHandler.java | 3 +- 7 files changed, 99 insertions(+), 39 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 7f0dceb77..a28e4114b 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -52,8 +52,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED | EventDistributor.FEED_LIST_UPDATE - | EventDistributor.UNREAD_ITEMS_UPDATE - | EventDistributor.QUEUE_UPDATE; + | EventDistributor.UNREAD_ITEMS_UPDATE; public static final String PREF_NAME = "MainActivityPrefs"; public static final String PREF_IS_FIRST_LAUNCH = "prefMainActivityIsFirstLaunch"; @@ -324,6 +323,13 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } + @Override + public void onStart() { + super.onStart(); + EventDistributor.getInstance().register(contentUpdate); + EventBus.getDefault().register(this); + } + @Override protected void onPause() { super.onPause(); @@ -333,7 +339,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity protected void onResume() { super.onResume(); StorageUtils.checkStorageAvailability(this); - EventDistributor.getInstance().register(contentUpdate); Intent intent = getIntent(); if (navDrawerData != null && intent.hasExtra(EXTRA_NAV_INDEX) && intent.hasExtra(EXTRA_NAV_TYPE)) { @@ -348,6 +353,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity super.onStop(); cancelLoadTask(); EventDistributor.getInstance().unregister(contentUpdate); + EventBus.getDefault().unregister(this); } @Override @@ -436,6 +442,11 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } } + public void onEvent(QueueEvent event) { + Log.d(TAG, "onEvent(" + event + ")"); + loadData(); + } + private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java index b6edd30aa..10409a421 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java @@ -67,7 +67,6 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED | - EventDistributor.QUEUE_UPDATE | EventDistributor.UNREAD_ITEMS_UPDATE; private static final String ARG_FEEDITEM = "feeditem"; @@ -129,6 +128,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba public void onStart() { super.onStart(); EventDistributor.getInstance().register(contentUpdate); + EventBus.getDefault().register(this); if (downloadObserver != null) { downloadObserver.setActivity(getActivity()); downloadObserver.onResume(); @@ -143,6 +143,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba public void onStop() { super.onStop(); EventDistributor.getInstance().unregister(contentUpdate); + EventBus.getDefault().unregister(this); } private void resetViewState() { @@ -392,6 +393,10 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba } } + public void onEvent(QueueEvent event) { + Log.d(TAG, "onEvent(" + event + ")"); + getLoaderManager().restartLoader(0, null, ItemFragment.this); + } @Override public Loader> onCreateLoader(int id, Bundle args) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index d59add6b3..a2cb8da18 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -67,7 +67,6 @@ public class ItemlistFragment extends ListFragment { private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED - | EventDistributor.QUEUE_UPDATE | EventDistributor.UNREAD_ITEMS_UPDATE | EventDistributor.PLAYER_STATUS_UPDATE; @@ -120,6 +119,7 @@ public class ItemlistFragment extends ListFragment { public void onStart() { super.onStart(); EventDistributor.getInstance().register(contentUpdate); + EventBus.getDefault().register(this); if (downloadObserver != null) { downloadObserver.setActivity(getActivity()); downloadObserver.onResume(); @@ -133,6 +133,7 @@ public class ItemlistFragment extends ListFragment { public void onStop() { super.onStop(); EventDistributor.getInstance().unregister(contentUpdate); + EventBus.getDefault().unregister(this); stopItemLoader(); } @@ -285,6 +286,11 @@ public class ItemlistFragment extends ListFragment { } } + public void onEvent(QueueEvent event) { + Log.d(TAG, "onEvent(" + event + ")"); + startItemLoader(); + } + private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java index 9ed44a8dd..b24bf195a 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java @@ -7,7 +7,6 @@ import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; -import android.os.Parcelable; import android.support.v4.app.Fragment; import android.support.v7.widget.SearchView; import android.util.Log; @@ -45,13 +44,9 @@ import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; - -import de.danoeh.antennapod.core.util.QueueAccess; +import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken; import de.danoeh.antennapod.core.util.gui.UndoBarController; - -import de.danoeh.antennapod.core.util.LongList; - import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import de.greenrobot.event.EventBus; @@ -112,6 +107,7 @@ public class NewEpisodesFragment extends Fragment { public void onStart() { super.onStart(); EventDistributor.getInstance().register(contentUpdate); + EventBus.getDefault().register(this); this.activity.set((MainActivity) getActivity()); if (downloadObserver != null) { downloadObserver.setActivity(getActivity()); @@ -126,6 +122,7 @@ public class NewEpisodesFragment extends Fragment { public void onStop() { super.onStop(); EventDistributor.getInstance().unregister(contentUpdate); + EventBus.getDefault().unregister(this); stopItemLoader(); } @@ -269,17 +266,26 @@ public class NewEpisodesFragment extends Fragment { } }); - undoBarController = new UndoBarController(root.findViewById(R.id.undobar), new UndoBarController.UndoListener() { + undoBarController = new UndoBarController(root.findViewById(R.id.undobar), new UndoBarController.UndoListener() { @Override - public void onUndo(Parcelable token) { - // Perform the undo - FeedItemUndoToken undoToken = (FeedItemUndoToken) token; + public void onUndo(FeedItemUndoToken token) { if (token != null) { - long itemId = undoToken.getFeedItemId(); - int position = undoToken.getPosition(); + long itemId = token.getFeedItemId(); + int position = token.getPosition(); DBWriter.markItemRead(getActivity(), itemId, false); } } + @Override + public void onHide(FeedItemUndoToken token) { + if (token != null) { + long itemId = token.getFeedItemId(); + FeedItem item = DBReader.getFeedItem(getActivity(), itemId); + FeedMedia media = item.getMedia(); + if(media != null && media.hasAlmostEnded() && UserPreferences.isAutoDelete()) { + DBWriter.deleteFeedMediaOfItem(getActivity(), media.getId()); + } + } + } }); final int secondColor = (UserPreferences.getTheme() == R.style.Theme_AntennaPod_Dark) ? R.color.swipe_refresh_secondary_color_dark : R.color.swipe_refresh_secondary_color_light; @@ -371,6 +377,11 @@ public class NewEpisodesFragment extends Fragment { }; + public void onEvent(QueueEvent event) { + Log.d(TAG, "onEvent(" + event + ")"); + startItemLoader(); + } + private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { @Override public void update(EventDistributor eventDistributor, Integer arg) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index 6e2e6834c..647fe550d 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -70,12 +70,14 @@ public class PlaybackHistoryFragment extends ListFragment { public void onStart() { super.onStart(); EventDistributor.getInstance().register(contentUpdate); + EventBus.getDefault().register(this); } @Override public void onStop() { super.onStop(); EventDistributor.getInstance().unregister(contentUpdate); + EventBus.getDefault().unregister(this); stopItemLoader(); } @@ -169,6 +171,11 @@ public class PlaybackHistoryFragment extends ListFragment { } } + public void onEvent(QueueEvent event) { + Log.d(TAG, "onEvent(" + event + ")"); + startItemLoader(); + } + private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 509c9fc31..93b99c728 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -58,7 +58,6 @@ public class QueueFragment extends Fragment { private static final String TAG = "QueueFragment"; private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED | - EventDistributor.QUEUE_UPDATE | EventDistributor.PLAYER_STATUS_UPDATE; private DragSortListView listView; @@ -66,7 +65,7 @@ public class QueueFragment extends Fragment { private TextView txtvEmpty; private ProgressBar progLoading; - private UndoBarController undoBarController; + private UndoBarController undoBarController; private List queue; private List downloaderList; @@ -106,6 +105,7 @@ public class QueueFragment extends Fragment { public void onStart() { super.onStart(); EventDistributor.getInstance().register(contentUpdate); + EventBus.getDefault().register(this); this.activity.set((MainActivity) getActivity()); if (downloadObserver != null) { downloadObserver.setActivity(getActivity()); @@ -126,6 +126,7 @@ public class QueueFragment extends Fragment { public void onStop() { super.onStop(); EventDistributor.getInstance().unregister(contentUpdate); + EventBus.getDefault().unregister(this); stopItemLoader(); } @@ -135,6 +136,15 @@ public class QueueFragment extends Fragment { this.activity.set((MainActivity) activity); } + public void onEventMainThread(QueueEvent event) { + Log.d(TAG, "onEvent(" + event + ")"); + if(event.action == QueueEvent.Action.REMOVED) { + undoBarController.showUndoBar(false, getString(R.string.removed_from_queue), + new FeedItemUndoToken(event.item, event.position)); + } + startItemLoader(); + } + private void saveScrollPosition() { SharedPreferences prefs = getActivity().getSharedPreferences(PREFS, Context.MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); @@ -345,29 +355,40 @@ public class QueueFragment extends Fragment { @Override public void remove(int which) { - Log.d(TAG, "remove("+which+")"); + Log.d(TAG, "remove(" + which + ")"); stopItemLoader(); FeedItem item = (FeedItem) listView.getAdapter().getItem(which); - DBWriter.removeQueueItem(getActivity(), item.getId(), true); - undoBarController.showUndoBar(false, - getString(R.string.removed_from_queue), new FeedItemUndoToken(item, - which) - ); + DBWriter.markItemRead(getActivity(), item.getId(), true); + DBWriter.removeQueueItem(getActivity(), item, true); } }); - undoBarController = new UndoBarController(root.findViewById(R.id.undobar), new UndoBarController.UndoListener() { - @Override - public void onUndo(Parcelable token) { - // Perform the undo - FeedItemUndoToken undoToken = (FeedItemUndoToken) token; - if (token != null) { - long itemId = undoToken.getFeedItemId(); - int position = undoToken.getPosition(); - DBWriter.addQueueItemAt(getActivity(), itemId, position, false); - } - } - }); + undoBarController = new UndoBarController(root.findViewById(R.id.undobar), + new UndoBarController.UndoListener() { + + @Override + public void onUndo(FeedItemUndoToken token) { + if (token != null) { + long itemId = token.getFeedItemId(); + int position = token.getPosition(); + DBWriter.markItemRead(getActivity(), itemId, false); + DBWriter.addQueueItemAt(getActivity(), itemId, position, false); + } + } + + @Override + public void onHide(FeedItemUndoToken token) { + if (token != null) { + long itemId = token.getFeedItemId(); + FeedItem item = DBReader.getFeedItem(getActivity(), itemId); + FeedMedia media = item.getMedia(); + if(media != null && media.hasAlmostEnded() && UserPreferences.isAutoDelete()) { + DBWriter.deleteFeedMediaOfItem(getActivity(), media.getId()); + } + } + } + + }); registerForContextMenu(listView); diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index b23f0ef28..ebb0a9e58 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -17,7 +17,6 @@ import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.LongList; -import de.danoeh.antennapod.core.util.QueueAccess; import de.danoeh.antennapod.core.util.ShareUtils; /** @@ -57,7 +56,7 @@ public class FeedItemMenuHandler { * @return Returns true if selectedItem is not null. */ public static boolean onPrepareMenu(MenuInterface mi, - FeedItem selectedItem, boolean showExtendedMenu, QueueAccess queueAccess) { + FeedItem selectedItem, boolean showExtendedMenu, LongList queueAccess) { if (selectedItem == null) { return false; } -- cgit v1.2.3 From 0b4b328324489e68ada274faeb751ac79d7cca96 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Mon, 6 Apr 2015 00:26:08 +0200 Subject: EventBus license, fixed NPE with undobar onHide(), no smarking on closing of audio player activity --- .../antennapod/activity/MediaplayerActivity.java | 18 ------------------ .../antennapod/fragment/NewEpisodesFragment.java | 15 ++++++++++----- .../de/danoeh/antennapod/fragment/QueueFragment.java | 15 ++++++++++----- 3 files changed, 20 insertions(+), 28 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 f9030ac77..8edd4185c 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -23,7 +23,6 @@ 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.storage.DBTasks; -import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.ShareUtils; import de.danoeh.antennapod.core.util.StorageUtils; @@ -224,23 +223,6 @@ public abstract class MediaplayerActivity extends ActionBarActivity super.onStop(); Log.d(TAG, "onStop()"); - // delete if auto delete is enabled and less than 3% of episode is left - Playable playable = controller.getMedia(); - if(playable != null && playable instanceof FeedMedia) { - FeedMedia media = (FeedMedia) playable; - if(media.hasAlmostEnded()) { - Log.d(TAG, "smart mark as read"); - FeedItem item = media.getItem(); - DBWriter.markItemRead(this, item, true, false); - DBWriter.removeQueueItem(this, item, false); - DBWriter.addItemToPlaybackHistory(this, media); - if (UserPreferences.isAutoDelete()) { - Log.d(TAG, "Delete " + media.toString()); - DBWriter.deleteFeedMediaOfItem(this, media.getId()); - } - } - } - if (controller != null) { controller.release(); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java index b24bf195a..d30cf76df 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java @@ -124,6 +124,9 @@ public class NewEpisodesFragment extends Fragment { EventDistributor.getInstance().unregister(contentUpdate); EventBus.getDefault().unregister(this); stopItemLoader(); + if(undoBarController.isShowing()) { + undoBarController.close(); + } } @Override @@ -267,22 +270,24 @@ public class NewEpisodesFragment extends Fragment { }); undoBarController = new UndoBarController(root.findViewById(R.id.undobar), new UndoBarController.UndoListener() { + + private final Context context = getActivity(); + @Override public void onUndo(FeedItemUndoToken token) { if (token != null) { long itemId = token.getFeedItemId(); - int position = token.getPosition(); - DBWriter.markItemRead(getActivity(), itemId, false); + DBWriter.markItemRead(context, itemId, false); } } @Override public void onHide(FeedItemUndoToken token) { - if (token != null) { + if (token != null && context != null) { long itemId = token.getFeedItemId(); - FeedItem item = DBReader.getFeedItem(getActivity(), itemId); + FeedItem item = DBReader.getFeedItem(context, itemId); FeedMedia media = item.getMedia(); if(media != null && media.hasAlmostEnded() && UserPreferences.isAutoDelete()) { - DBWriter.deleteFeedMediaOfItem(getActivity(), media.getId()); + DBWriter.deleteFeedMediaOfItem(context, media.getId()); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 93b99c728..a3721d7b3 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -128,6 +128,9 @@ public class QueueFragment extends Fragment { EventDistributor.getInstance().unregister(contentUpdate); EventBus.getDefault().unregister(this); stopItemLoader(); + if(undoBarController.isShowing()) { + undoBarController.close(); + } } @Override @@ -366,24 +369,26 @@ public class QueueFragment extends Fragment { undoBarController = new UndoBarController(root.findViewById(R.id.undobar), new UndoBarController.UndoListener() { + private final Context context = getActivity(); + @Override public void onUndo(FeedItemUndoToken token) { if (token != null) { long itemId = token.getFeedItemId(); int position = token.getPosition(); - DBWriter.markItemRead(getActivity(), itemId, false); - DBWriter.addQueueItemAt(getActivity(), itemId, position, false); + DBWriter.markItemRead(context, itemId, false); + DBWriter.addQueueItemAt(context, itemId, position, false); } } @Override public void onHide(FeedItemUndoToken token) { - if (token != null) { + if (token != null && context != null) { long itemId = token.getFeedItemId(); - FeedItem item = DBReader.getFeedItem(getActivity(), itemId); + FeedItem item = DBReader.getFeedItem(context, itemId); FeedMedia media = item.getMedia(); if(media != null && media.hasAlmostEnded() && UserPreferences.isAutoDelete()) { - DBWriter.deleteFeedMediaOfItem(getActivity(), media.getId()); + DBWriter.deleteFeedMediaOfItem(context, media.getId()); } } } -- cgit v1.2.3 From 76b6ae654b8b23334c977e4f56fd9157ea982585 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Mon, 6 Apr 2015 18:13:44 +0200 Subject: Refactorings --- .../antennapod/activity/AudioplayerActivity.java | 58 +++++++--------------- 1 file changed, 17 insertions(+), 41 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index f056b107b..335958a40 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -29,7 +29,6 @@ import com.squareup.picasso.Picasso; import org.apache.commons.lang3.StringUtils; -import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.adapter.ChapterListAdapter; import de.danoeh.antennapod.adapter.NavListAdapter; @@ -96,30 +95,25 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc FragmentTransaction fT = getSupportFragmentManager().beginTransaction(); if (coverFragment != null) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Removing cover fragment"); + Log.d(TAG, "Removing cover fragment"); fT.remove(coverFragment); } if (descriptionFragment != null) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Removing description fragment"); + Log.d(TAG, "Removing description fragment"); fT.remove(descriptionFragment); } if (chapterFragment != null) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Removing chapter fragment"); + Log.d(TAG, "Removing chapter fragment"); fT.remove(chapterFragment); } if (currentlyShownFragment != null) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Removing currently shown fragment"); + Log.d(TAG, "Removing currently shown fragment"); fT.remove(currentlyShownFragment); } for (int i = 0; i < detachedFragments.length; i++) { Fragment f = detachedFragments[i]; if (f != null) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Removing detached fragment"); + Log.d(TAG, "Removing detached fragment"); fT.remove(f); } } @@ -152,8 +146,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc } private void savePreferences() { - if (BuildConfig.DEBUG) - Log.d(TAG, "Saving preferences"); + Log.d(TAG, "Saving preferences"); SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); if (currentlyShownPosition >= 0 && controller != null @@ -180,9 +173,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc @Override protected void onSaveInstanceState(Bundle outState) { // super.onSaveInstanceState(outState); would cause crash - if (BuildConfig.DEBUG) - Log.d(TAG, "onSaveInstanceState"); - + Log.d(TAG, "onSaveInstanceState"); } @Override @@ -205,8 +196,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc * @return true if restoreFromPrefernces changed the activity's state */ private boolean restoreFromPreferences() { - if (BuildConfig.DEBUG) - Log.d(TAG, "Restoring instance state"); + Log.d(TAG, "Restoring instance state"); SharedPreferences prefs = getSharedPreferences(PREFS, MODE_PRIVATE); int savedPosition = prefs.getInt(PREF_KEY_SELECTED_FRAGMENT_POSITION, -1); @@ -220,15 +210,10 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc switchToFragment(savedPosition); return true; } else if (controller == null || controller.getMedia() == null) { - if (BuildConfig.DEBUG) - Log.d(TAG, - "Couldn't restore from preferences: controller or media was null"); + Log.d(TAG, "Couldn't restore from preferences: controller or media was null"); } else { - if (BuildConfig.DEBUG) - Log.d(TAG, - "Couldn't restore from preferences: savedPosition was -1 or saved identifier and playable identifier didn't match.\nsavedPosition: " - + savedPosition + ", id: " + playableId - ); + Log.d(TAG, "Couldn't restore from preferences: savedPosition was -1 or saved identifier and playable identifier didn't match.\nsavedPosition: " + + savedPosition + ", id: " + playableId); } return false; @@ -239,9 +224,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc super.onResume(); if (StringUtils.equals(getIntent().getAction(), Intent.ACTION_VIEW)) { Intent intent = getIntent(); - if (BuildConfig.DEBUG) - Log.d(TAG, "Received VIEW intent: " - + intent.getData().getPath()); + 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); @@ -269,8 +252,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc @Override protected void onAwaitingVideoSurface() { - if (BuildConfig.DEBUG) - Log.d(TAG, "onAwaitingVideoSurface was called in audio player -> switching to video player"); + Log.d(TAG, "onAwaitingVideoSurface was called in audio player -> switching to video player"); startActivity(new Intent(this, VideoplayerActivity.class)); } @@ -295,8 +277,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc * @param pos Must be POS_COVER, POS_DESCR, or POS_CHAPTERS */ private void switchToFragment(int pos) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Switching contentView to position " + pos); + Log.d(TAG, "Switching contentView to position " + pos); if (currentlyShownPosition != pos && controller != null) { Playable media = controller.getMedia(); if (media != null) { @@ -354,9 +335,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc lastShownPosition = currentlyShownPosition; currentlyShownPosition = pos; if (detachedFragments[pos] != null) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Reattaching fragment at position " - + pos); + Log.d(TAG, "Reattaching fragment at position " + pos); ft.attach(detachedFragments[pos]); } else { ft.add(R.id.contentView, currentlyShownFragment); @@ -630,9 +609,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc @Override protected void onReloadNotification(int notificationCode) { if (notificationCode == PlaybackService.EXTRA_CODE_VIDEO) { - if (BuildConfig.DEBUG) - Log.d(TAG, - "ReloadNotification received, switching to Videoplayer now"); + Log.d(TAG, "ReloadNotification received, switching to Videoplayer now"); finish(); startActivity(new Intent(this, VideoplayerActivity.class)); @@ -729,8 +706,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc @Override public void update(EventDistributor eventDistributor, Integer arg) { if ((EventDistributor.FEED_LIST_UPDATE & arg) != 0) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Received contentUpdate Intent."); + Log.d(TAG, "Received contentUpdate Intent."); loadData(); } } -- cgit v1.2.3 From fd30ec8189a1d9b47adfa31a9fe7dbc2085061f6 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Mon, 6 Apr 2015 18:32:06 +0200 Subject: Set fast forward and rewind time --- .../antennapod/activity/MediaplayerActivity.java | 108 ++++++++++++++++++++- 1 file changed, 103 insertions(+), 5 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 8edd4185c..1dd535f2a 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -12,6 +12,8 @@ import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; + +import android.view.View; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; @@ -46,7 +48,9 @@ public abstract class MediaplayerActivity extends ActionBarActivity protected SeekBar sbPosition; protected ImageButton butPlay; protected ImageButton butRev; + protected TextView txtvRev; protected ImageButton butFF; + protected TextView txtvFF; private PlaybackController newPlaybackController() { return new PlaybackController(this, false) { @@ -222,7 +226,6 @@ public abstract class MediaplayerActivity extends ActionBarActivity protected void onStop() { super.onStop(); Log.d(TAG, "onStop()"); - if (controller != null) { controller.release(); } @@ -373,6 +376,8 @@ public abstract class MediaplayerActivity extends ActionBarActivity if (controller != null) { int currentPosition = controller.getPosition(); int duration = controller.getDuration(); + Log.d(TAG, "currentPosition " + Converter + .getDurationStringLong(currentPosition)); if (currentPosition != PlaybackService.INVALID_TIME && duration != PlaybackService.INVALID_TIME && controller.getMedia() != null) { @@ -381,8 +386,7 @@ public abstract class MediaplayerActivity extends ActionBarActivity txtvLength.setText(Converter.getDurationStringLong(duration)); updateProgressbarPosition(currentPosition, duration); } else { - Log.w(TAG, - "Could not react to position observer update because of invalid time"); + Log.w(TAG, "Could not react to position observer update because of invalid time"); } } } @@ -426,7 +430,11 @@ public abstract class MediaplayerActivity extends ActionBarActivity txtvLength = (TextView) findViewById(R.id.txtvLength); butPlay = (ImageButton) findViewById(R.id.butPlay); butRev = (ImageButton) findViewById(R.id.butRev); + txtvRev = (TextView) findViewById(R.id.txtvRev); + txtvRev.setText(String.valueOf(UserPreferences.getRewindSecs())); butFF = (ImageButton) findViewById(R.id.butFF); + txtvFF = (TextView) findViewById(R.id.txtvFF); + txtvFF.setText(String.valueOf(UserPreferences.getFastFowardSecs())); // SEEKBAR SETUP @@ -437,10 +445,100 @@ public abstract class MediaplayerActivity extends ActionBarActivity butPlay.setOnClickListener(controller.newOnPlayButtonClickListener()); if (butFF != null) { - butFF.setOnClickListener(controller.newOnFFButtonClickListener()); + butFF.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int curr = controller.getPosition(); + controller.seekTo(curr + UserPreferences.getFastFowardSecs() * 1000); + } + }); + butFF.setOnLongClickListener(new View.OnLongClickListener() { + + int choice; + + @Override + public boolean onLongClick(View v) { + int checked = 0; + int rewindSecs = UserPreferences.getFastFowardSecs(); + final int[] values = getResources().getIntArray(R.array.seek_delta_values); + final String[] choices = new String[values.length]; + for(int i=0; i < values.length; i++) { + if (rewindSecs == values[i]) { + checked = i; + } + choices[i] = String.valueOf(values[i]) + " " + + getString(R.string.time_unit_seconds); + } + choice = values[checked]; + AlertDialog.Builder builder = new AlertDialog.Builder(MediaplayerActivity.this); + builder.setTitle(R.string.pref_fast_forward); + builder.setSingleChoiceItems(choices, checked, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + choice = values[which]; + } + }); + builder.setNegativeButton(R.string.cancel_label, null); + builder.setPositiveButton(R.string.confirm_label, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + UserPreferences.setPrefFastForwardSecs(choice); + txtvFF.setText(String.valueOf(choice)); + } + }); + builder.create().show(); + return true; + } + }); } if (butRev != null) { - butRev.setOnClickListener(controller.newOnRevButtonClickListener()); + butRev.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int curr = controller.getPosition(); + controller.seekTo(curr - UserPreferences.getRewindSecs() * 1000); + } + }); + butRev.setOnLongClickListener(new View.OnLongClickListener() { + + int choice; + + @Override + public boolean onLongClick(View v) { + int checked = 0; + int rewindSecs = UserPreferences.getRewindSecs(); + final int[] values = getResources().getIntArray(R.array.seek_delta_values); + final String[] choices = new String[values.length]; + for(int i=0; i < values.length; i++) { + if (rewindSecs == values[i]) { + checked = i; + } + choices[i] = String.valueOf(values[i]) + " " + + getString(R.string.time_unit_seconds); + } + choice = values[checked]; + AlertDialog.Builder builder = new AlertDialog.Builder(MediaplayerActivity.this); + builder.setTitle(R.string.pref_rewind); + builder.setSingleChoiceItems(choices, checked, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + choice = values[which]; + } + }); + builder.setNegativeButton(R.string.cancel_label, null); + builder.setPositiveButton(R.string.confirm_label, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + UserPreferences.setPrefRewindSecs(choice); + txtvRev.setText(String.valueOf(choice)); + } + }); + builder.create().show(); + return true; + } + }); } } -- cgit v1.2.3 From 07ce9579fb61174ce173e84daebe60e493bd725c Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 11 Apr 2015 11:12:33 +0200 Subject: Refactoring --- .../activity/OnlineFeedViewActivity.java | 32 ++++++++-------------- 1 file changed, 11 insertions(+), 21 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 3b03ed2db..b37514145 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java @@ -26,7 +26,6 @@ import java.util.Map; import javax.xml.parsers.ParserConfigurationException; -import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedPreferences; @@ -91,12 +90,10 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity { getSupportActionBar().setTitle(R.string.add_new_feed_label); } else { - throw new IllegalArgumentException( - "Activity must be started with feedurl argument!"); + throw new IllegalArgumentException("Activity must be started with feedurl argument!"); } - if (BuildConfig.DEBUG) - Log.d(TAG, "Activity was started with url " + feedUrl); + Log.d(TAG, "Activity was started with url " + feedUrl); setLoadingLayout(); if (savedInstanceState == null) { startFeedDownload(feedUrl, null, null); @@ -147,7 +144,7 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity { @Override public void run() { - if (BuildConfig.DEBUG) Log.d(TAG, "Download was completed"); + Log.d(TAG, "Download was completed"); DownloadStatus status = downloader.getResult(); if (status != null) { if (!status.isCancelled()) { @@ -164,15 +161,13 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity { OnlineFeedViewActivity.this); if (errorMsg != null && status.getReasonDetailed() != null) { - errorMsg += " (" - + status.getReasonDetailed() + ")"; + errorMsg += " (" + status.getReasonDetailed() + ")"; } showErrorDialog(errorMsg); } } } else { - Log.wtf(TAG, - "DownloadStatus returned by Downloader was null"); + Log.wtf(TAG, "DownloadStatus returned by Downloader was null"); finish(); } } @@ -181,21 +176,18 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity { } private void startFeedDownload(String url, String username, String password) { - if (BuildConfig.DEBUG) - Log.d(TAG, "Starting feed download"); + Log.d(TAG, "Starting feed download"); url = URLChecker.prepareURL(url); feed = new Feed(url, new Date(0)); if (username != null && password != null) { feed.setPreferences(new FeedPreferences(0, false, username, password)); } String fileUrl = new File(getExternalCacheDir(), - FileNameGenerator.generateFileName(feed.getDownload_url())) - .toString(); + FileNameGenerator.generateFileName(feed.getDownload_url())).toString(); feed.setFile_url(fileUrl); final DownloadRequest request = new DownloadRequest(feed.getFile_url(), feed.getDownload_url(), "OnlineFeed", 0, Feed.FEEDFILETYPE_FEED, username, password, true, null); - downloader = new HttpDownloader( - request); + downloader = new HttpDownloader(request); new Thread() { @Override public void run() { @@ -233,8 +225,7 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity { "feed must be non-null and downloaded when parseFeed is called"); } - if (BuildConfig.DEBUG) - Log.d(TAG, "Parsing feed"); + Log.d(TAG, "Parsing feed"); Thread thread = new Thread() { @@ -258,7 +249,7 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity { e.printStackTrace(); reasonDetailed = e.getMessage(); } catch (UnsupportedFeedtypeException e) { - if (BuildConfig.DEBUG) Log.d(TAG, "Unsupported feed type detected"); + Log.d(TAG, "Unsupported feed type detected"); if (StringUtils.equalsIgnoreCase("html", e.getRootElement())) { if (showFeedDiscoveryDialog(new File(feed.getFile_url()), feed.getDownload_url())) { return; @@ -269,8 +260,7 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity { } } finally { boolean rc = new File(feed.getFile_url()).delete(); - if (BuildConfig.DEBUG) - Log.d(TAG, "Deleted feed source file. Result: " + rc); + Log.d(TAG, "Deleted feed source file. Result: " + rc); } if (successful) { -- cgit v1.2.3 From a34acb71d117a153606f0af26c1a297e7e524455 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 11 Apr 2015 11:13:26 +0200 Subject: Add feed: remember credentials after selecting feed, try UTF-8 for HTTP basic authentication --- .../java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'app/src/main/java/de/danoeh') 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 b37514145..2b1b13ae6 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OnlineFeedViewActivity.java @@ -376,7 +376,12 @@ public abstract class OnlineFeedViewActivity extends ActionBarActivity { String selectedUrl = urls.get(which); dialog.dismiss(); resetIntent(selectedUrl, titles.get(which)); - startFeedDownload(selectedUrl, null, null); + FeedPreferences prefs = feed.getPreferences(); + if(prefs != null) { + startFeedDownload(selectedUrl, prefs.getUsername(), prefs.getPassword()); + } else { + startFeedDownload(selectedUrl, null, null); + } } }; -- cgit v1.2.3 From 512ce6ad51d71c576b4c81246db39de98c9fb73a Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 18 Apr 2015 16:16:45 +0200 Subject: Small fix --- .../main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java | 5 +++-- .../main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java | 4 +--- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 118196c8b..ce9fac7a3 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -41,6 +41,7 @@ import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.QueueAccess; import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; @@ -70,7 +71,7 @@ public class AllEpisodesFragment extends Fragment { private List unreadItems; private List recentItems; - private QueueAccess queueAccess; + private LongList queueAccess; private List downloaderList; private boolean itemsLoaded = false; @@ -448,7 +449,7 @@ public class AllEpisodesFragment extends Fragment { if (lists != null) { unreadItems = (List) lists[0]; recentItems = (List) lists[1]; - queueAccess = (QueueAccess) lists[2]; + queueAccess = (LongList) lists[2]; itemsLoaded = true; if (viewsCreated && activity.get() != null) { onFragmentLoaded(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java index dda9dd8c7..fd22289f2 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java @@ -40,9 +40,7 @@ public class NewEpisodesFragment extends AllEpisodesFragment { public void onEvent(QueueEvent event) { Log.d(TAG, "onEvent(" + event + ")"); - if(event.action == QueueEvent.Action.ADDED) { - startItemLoader(); - } + startItemLoader(); } @Override -- cgit v1.2.3 From 158821c0e1953b72dc89bc5896684de3ba1ce1fb Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 17 Apr 2015 11:12:54 +0200 Subject: Preference: Change nav drawer Preference --- .../preferences/PreferenceController.java | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java index 32683c65c..f387b7524 100644 --- a/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java +++ b/app/src/main/java/de/danoeh/antennapod/preferences/PreferenceController.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.preferences; import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -190,6 +191,15 @@ public class PreferenceController { } } ); + ui.findPreference(UserPreferences.PREF_HIDDEN_DRAWER_ITEMS) + .setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + showDrawerPreferencesDialog(); + return true; + } + }); + ui.findPreference(UserPreferences.PREF_ENABLE_AUTODL) .setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override @@ -561,6 +571,43 @@ public class PreferenceController { } } + private void showDrawerPreferencesDialog() { + final Context context = ui.getActivity(); + final List hiddenDrawerItems = UserPreferences.getHiddenDrawerItems(); + final String[] navTitles = context.getResources().getStringArray(R.array.nav_drawer_titles); + final String[] NAV_DRAWER_TAGS = MainActivity.NAV_DRAWER_TAGS; + boolean[] checked = new boolean[MainActivity.NAV_DRAWER_TAGS.length]; + for(int i=0; i < NAV_DRAWER_TAGS.length; i++) { + String tag = NAV_DRAWER_TAGS[i]; + if(!hiddenDrawerItems.contains(tag)) { + checked[i] = true; + } + } + + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(R.string.drawer_preferences); + builder.setMultiChoiceItems(navTitles, checked, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int which, boolean isChecked) { + if (isChecked) { + hiddenDrawerItems.remove(NAV_DRAWER_TAGS[which]); + } else { + hiddenDrawerItems.add(NAV_DRAWER_TAGS[which]); + } + } + }); + builder.setPositiveButton(R.string.confirm_label, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + UserPreferences.setHiddenDrawerItems(context, hiddenDrawerItems); + } + }); + builder.setNegativeButton(R.string.cancel_label, null); + builder.create().show(); + } + + + public static interface PreferenceUI { -- cgit v1.2.3 From ea628037ca3f9de84744ce0d28d8af7fc06a11dd Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 17 Apr 2015 11:13:27 +0200 Subject: Minor changes --- app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java | 3 ++- .../main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java | 2 +- .../main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java | 2 ++ .../main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java | 2 +- .../java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java | 4 +++- app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java | 4 +++- 6 files changed, 12 insertions(+), 5 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java index e4ae1683b..bbe6fab46 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AddFeedFragment.java @@ -20,7 +20,8 @@ import de.danoeh.antennapod.fragment.gpodnet.GpodnetMainFragment; * Provides actions for adding new podcast subscriptions */ public class AddFeedFragment extends Fragment { - private static final String TAG = "AddFeedFragment"; + + public static final String TAG = "AddFeedFragment"; /** * Preset value for url text field. diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index f57795c37..3db2a82a7 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -51,7 +51,7 @@ import de.danoeh.antennapod.menuhandler.NavDrawerActivity; */ public class AllEpisodesFragment extends Fragment { - private static final String TAG = "AllEpisodesFragment"; + public static final String TAG = "AllEpisodesFragment"; private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED | diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java index 712db1421..1ce379cf8 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadsFragment.java @@ -17,6 +17,8 @@ import de.danoeh.antennapod.R; */ public class DownloadsFragment extends Fragment { + public static final String TAG = "DownloadsFragment"; + public static final String ARG_SELECTED_TAB = "selected_tab"; public static final int POS_RUNNING = 0; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java index fd22289f2..4bce3c7ba 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/NewEpisodesFragment.java @@ -28,7 +28,7 @@ import de.greenrobot.event.EventBus; public class NewEpisodesFragment extends AllEpisodesFragment { - private static final String TAG = "NewEpisodesFragment"; + public static final String TAG = "NewEpisodesFragment"; private static final String PREF_NAME = "PrefNewEpisodesFragment"; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index 8b78f96d0..413c1fea4 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -37,7 +37,9 @@ import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import de.greenrobot.event.EventBus; public class PlaybackHistoryFragment extends ListFragment { - private static final String TAG = "PlaybackHistoryFragment"; + + public static final String TAG = "PlaybackHistoryFragment"; + private static final int EVENTS = EventDistributor.PLAYBACK_HISTORY_UPDATE | EventDistributor.PLAYER_STATUS_UPDATE; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index a3721d7b3..8ebb21469 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -55,7 +55,9 @@ import de.greenrobot.event.EventBus; * Shows all items in the queue */ public class QueueFragment extends Fragment { - private static final String TAG = "QueueFragment"; + + public static final String TAG = "QueueFragment"; + private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED | EventDistributor.PLAYER_STATUS_UPDATE; -- cgit v1.2.3 From ded0006913768fa43390816f4fd0abc214a67718 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 17 Apr 2015 11:20:58 +0200 Subject: Add longclick Drawer Preference dialog --- .../danoeh/antennapod/activity/MainActivity.java | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'app/src/main/java/de/danoeh') 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 c5ad49f6d..6411f0318 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -160,6 +160,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity navAdapter = new NavListAdapter(itemAccess, this); navList.setAdapter(navAdapter); navList.setOnItemClickListener(navListClickListener); + navList.setOnItemLongClickListener(newListLongClickListener); findViewById(R.id.nav_settings).setOnClickListener(new View.OnClickListener() { @Override @@ -200,6 +201,41 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } } + public 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(MainActivity.this); + builder.setTitle(R.string.drawer_preferences); + builder.setMultiChoiceItems(navLabels, checked, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int which, boolean isChecked) { + if (isChecked) { + hiddenDrawerItems.remove(NAV_DRAWER_TAGS[which]); + } else { + hiddenDrawerItems.add(NAV_DRAWER_TAGS[which]); + } + } + }); + builder.setPositiveButton(R.string.confirm_label, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + UserPreferences.setHiddenDrawerItems(MainActivity.this, hiddenDrawerItems); + } + }); + builder.setNegativeButton(R.string.cancel_label, null); + builder.create().show(); + } + + public ActionBar getMainActivtyActionBar() { return getSupportActionBar(); } @@ -314,6 +350,19 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } }; + private AdapterView.OnItemLongClickListener newListLongClickListener = new AdapterView.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + if(position < navAdapter.getTags().size()) { + showDrawerPreferencesDialog(); + return true; + } else { + return false; + } + } + }; + + @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); -- cgit v1.2.3 From c6b88fe3564bc45930f0e23e8349cfe3b0c4f7d1 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 17 Apr 2015 11:21:36 +0200 Subject: Use Fragment tags to reference to fragments, hide nav elements --- .../antennapod/activity/AudioplayerActivity.java | 3 +- .../danoeh/antennapod/activity/MainActivity.java | 189 +++++++++++---------- .../danoeh/antennapod/adapter/NavListAdapter.java | 125 +++++++++++--- .../config/DownloadServiceCallbacksImpl.java | 4 +- .../antennapod/fragment/ItemlistFragment.java | 2 +- .../danoeh/antennapod/fragment/SearchFragment.java | 2 +- 6 files changed, 204 insertions(+), 121 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 335958a40..0d96ad4e9 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -442,10 +442,9 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc public void onItemClick(AdapterView parent, View view, int position, long id) { int viewType = parent.getAdapter().getItemViewType(position); if (viewType != NavListAdapter.VIEW_TYPE_SECTION_DIVIDER) { - int relPos = (viewType == NavListAdapter.VIEW_TYPE_NAV) ? position : position - NavListAdapter.SUBSCRIPTION_OFFSET; Intent intent = new Intent(AudioplayerActivity.this, MainActivity.class); intent.putExtra(MainActivity.EXTRA_NAV_TYPE, viewType); - intent.putExtra(MainActivity.EXTRA_NAV_INDEX, relPos); + intent.putExtra(MainActivity.EXTRA_NAV_INDEX, position); startActivity(intent); } drawerLayout.closeDrawer(navDrawer); 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 6411f0318..052955130 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -1,5 +1,7 @@ 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; @@ -49,7 +51,9 @@ import de.greenrobot.event.EventBus; * The activity that is shown when the user launches the app. */ public class MainActivity extends ActionBarActivity implements NavDrawerActivity { + private static final String TAG = "MainActivity"; + private static final int EVENTS = EventDistributor.DOWNLOAD_HANDLED | EventDistributor.DOWNLOAD_QUEUED | EventDistributor.FEED_LIST_UPDATE @@ -59,21 +63,23 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity public static final String PREF_IS_FIRST_LAUNCH = "prefMainActivityIsFirstLaunch"; public static final String PREF_LAST_FRAGMENT = "prefMainActivityLastFragment"; - public static final String EXTRA_NAV_INDEX = "nav_index"; public static final String EXTRA_NAV_TYPE = "nav_type"; + public static final String EXTRA_NAV_INDEX = "nav_index"; + public static final String EXTRA_FRAGMENT_TAG = "fragment_tag"; public static final String EXTRA_FRAGMENT_ARGS = "fragment_args"; public static final String SAVE_BACKSTACK_COUNT = "backstackCount"; public static final String SAVE_SELECTED_NAV_INDEX = "selectedNavIndex"; public static final String SAVE_TITLE = "title"; - - public static final int POS_QUEUE = 0, - POS_NEW = 1, - POS_ALL_EPISODES = 2, - POS_DOWNLOADS = 3, - POS_HISTORY = 4, - POS_ADD = 5; + public static final String[] NAV_DRAWER_TAGS = { + QueueFragment.TAG, + NewEpisodesFragment.TAG, + AllEpisodesFragment.TAG, + DownloadsFragment.TAG, + PlaybackHistoryFragment.TAG, + AddFeedFragment.TAG + }; private Toolbar toolbar; private ExternalPlayerFragment externalPlayerFragment; @@ -88,7 +94,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity private CharSequence drawerTitle; private CharSequence currentTitle; - @Override public void onCreate(Bundle savedInstanceState) { setTheme(UserPreferences.getNoTitleTheme()); @@ -141,19 +146,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } }); - FragmentTransaction transaction = fm.beginTransaction(); - - Fragment mainFragment = fm.findFragmentByTag("main"); - if (mainFragment != null) { - transaction.replace(R.id.main_view, mainFragment); - } else { - loadFragment(NavListAdapter.VIEW_TYPE_NAV, getLastNavFragment(), null); - } - - externalPlayerFragment = new ExternalPlayerFragment(); - transaction.replace(R.id.playerFragment, externalPlayerFragment); - transaction.commit(); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); @@ -170,19 +162,32 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } }); + FragmentTransaction transaction = fm.beginTransaction(); + + Fragment mainFragment = fm.findFragmentByTag("main"); + if (mainFragment != null) { + transaction.replace(R.id.main_view, mainFragment); + } else { + loadFragment(getLastNavFragment(), null); + } + externalPlayerFragment = new ExternalPlayerFragment(); + transaction.replace(R.id.playerFragment, externalPlayerFragment); + transaction.commit(); + + checkFirstLaunch(); } - private void saveLastNavFragment(int relPos) { + private void saveLastNavFragment(String tag) { SharedPreferences prefs = getSharedPreferences(PREF_NAME, MODE_PRIVATE); SharedPreferences.Editor edit = prefs.edit(); - edit.putInt(PREF_LAST_FRAGMENT, relPos); + edit.putString(PREF_LAST_FRAGMENT, tag); edit.commit(); } - private int getLastNavFragment() { + private String getLastNavFragment() { SharedPreferences prefs = getSharedPreferences(PREF_NAME, MODE_PRIVATE); - return prefs.getInt(PREF_LAST_FRAGMENT, POS_QUEUE); + return prefs.getString(PREF_LAST_FRAGMENT, QueueFragment.TAG); } private void checkFirstLaunch() { @@ -248,77 +253,84 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity return (navDrawerData != null) ? navDrawerData.feeds : null; } - private void loadFragment(int viewType, int relPos, Bundle args) { - FragmentManager fragmentManager = getSupportFragmentManager(); - // clear back stack - for (int i = 0; i < fragmentManager.getBackStackEntryCount(); i++) { - fragmentManager.popBackStack(); + public void loadFragment(int index, Bundle args) { + int numTags = navAdapter.getTags().size(); + if (index <= numTags) { + String tag = navAdapter.getTags().get(index); + loadFragment(tag, args); + } else { + int pos = index - numTags; + loadFeedFragmentByPosition(pos, args); } + } - FragmentTransaction fT = fragmentManager.beginTransaction(); + public void loadFragment(final String tag, Bundle args) { Fragment fragment = null; - if (viewType == NavListAdapter.VIEW_TYPE_NAV) { - switch (relPos) { - case POS_NEW: - fragment = new NewEpisodesFragment(); - break; - case POS_ALL_EPISODES: - fragment = new AllEpisodesFragment(); - break; - case POS_QUEUE: - fragment = new QueueFragment(); - break; - case POS_DOWNLOADS: - fragment = new DownloadsFragment(); - break; - case POS_HISTORY: - fragment = new PlaybackHistoryFragment(); - break; - case POS_ADD: - fragment = new AddFeedFragment(); - break; - - } - currentTitle = getString(NavListAdapter.NAV_TITLES[relPos]); - selectedNavListIndex = relPos; - saveLastNavFragment(relPos); - - } else if (viewType == NavListAdapter.VIEW_TYPE_SUBSCRIPTION) { - Feed feed = itemAccess.getItem(relPos); - currentTitle = ""; - fragment = ItemlistFragment.newInstance(feed.getId()); - selectedNavListIndex = NavListAdapter.SUBSCRIPTION_OFFSET + relPos; - + switch (tag) { + case NewEpisodesFragment.TAG: + fragment = new NewEpisodesFragment(); + break; + case QueueFragment.TAG: + fragment = new QueueFragment(); + break; + case DownloadsFragment.TAG: + fragment = new DownloadsFragment(); + break; + case PlaybackHistoryFragment.TAG: + fragment = new PlaybackHistoryFragment(); + break; + case AddFeedFragment.TAG: + fragment = new AddFeedFragment(); + break; } - if (fragment != null) { - if (args != null) { - fragment.setArguments(args); - } - fT.replace(R.id.main_view, fragment, "main"); - fragmentManager.popBackStack(); - } - fT.commit(); - getSupportActionBar().setTitle(currentTitle); - if (navAdapter != null) { - navAdapter.notifyDataSetChanged(); + String title = navAdapter.getLabel(tag); + getSupportActionBar().setTitle(title); + selectedNavListIndex = navAdapter.getTags().indexOf(tag); + if (args != null) { + fragment.setArguments(args); } + loadFragment(fragment); } - public void loadNavFragment(int position, Bundle args) { - loadFragment(NavListAdapter.VIEW_TYPE_NAV, position, args); + private void loadFeedFragmentByPosition(int relPos, Bundle args) { + if(relPos < 0) { + return; + } + Feed feed = itemAccess.getItem(relPos); + Fragment fragment = ItemlistFragment.newInstance(feed.getId()); + selectedNavListIndex = navAdapter.getSubscriptionOffset() + relPos; + getSupportActionBar().setTitle(""); + loadFragment(fragment); } - public void loadFeedFragment(long feedID) { + public void loadFeedFragmentById(long feedId) { if (navDrawerData != null) { - for (int i = 0; i < navDrawerData.feeds.size(); i++) { - if (navDrawerData.feeds.get(i).getId() == feedID) { - loadFragment(NavListAdapter.VIEW_TYPE_SUBSCRIPTION, i, null); - break; + int relPos = -1; + for (int i = 0; relPos < 0 && i < navDrawerData.feeds.size(); i++) { + if (navDrawerData.feeds.get(i).getId() == feedId) { + relPos = i; } } + loadFeedFragmentByPosition(relPos, null); + } + } + + private void loadFragment(Fragment fragment) { + FragmentManager fragmentManager = getSupportFragmentManager(); + // clear back stack + for (int i = 0; i < fragmentManager.getBackStackEntryCount(); i++) { + fragmentManager.popBackStack(); + } + FragmentTransaction t = fragmentManager.beginTransaction(); + t.replace(R.id.main_view, fragment, "main"); + fragmentManager.popBackStack(); + t.commit(); + if (navAdapter != null) { + navAdapter.notifyDataSetChanged(); } } + public void loadChildFragment(Fragment fragment) { Validate.notNull(fragment); FragmentManager fm = getSupportFragmentManager(); @@ -341,8 +353,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity public void onItemClick(AdapterView parent, View view, int position, long id) { int viewType = parent.getAdapter().getItemViewType(position); if (viewType != NavListAdapter.VIEW_TYPE_SECTION_DIVIDER && position != selectedNavListIndex) { - int relPos = (viewType == NavListAdapter.VIEW_TYPE_NAV) ? position : position - NavListAdapter.SUBSCRIPTION_OFFSET; - loadFragment(viewType, relPos, null); + loadFragment(position, null); selectedNavListIndex = position; navAdapter.notifyDataSetChanged(); } @@ -529,10 +540,14 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity private void handleNavIntent() { Intent intent = getIntent(); if (intent.hasExtra(EXTRA_NAV_INDEX) && intent.hasExtra(EXTRA_NAV_TYPE)) { - int index = intent.getIntExtra(EXTRA_NAV_INDEX, 0); - int type = intent.getIntExtra(EXTRA_NAV_TYPE, NavListAdapter.VIEW_TYPE_NAV); + int index = intent.getIntExtra(EXTRA_NAV_INDEX, -1); + String tag = intent.getStringExtra(EXTRA_FRAGMENT_TAG); Bundle args = intent.getBundleExtra(EXTRA_FRAGMENT_ARGS); - loadFragment(type, index, args); + if (index >= 0) { + loadFragment(index, args); + } else if (tag != null) { + loadFragment(tag, args); + } } setIntent(new Intent(MainActivity.this, MainActivity.class)); // to avoid handling the intent twice when the configuration changes } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java index 17cd71f86..c763c7b61 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java @@ -1,9 +1,11 @@ package de.danoeh.antennapod.adapter; import android.content.Context; +import android.content.SharedPreferences; import android.content.res.TypedArray; import android.graphics.Typeface; import android.graphics.drawable.Drawable; +import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -13,8 +15,23 @@ import android.widget.TextView; import com.squareup.picasso.Picasso; +import org.apache.commons.lang3.ArrayUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + import de.danoeh.antennapod.R; +import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.fragment.AddFeedFragment; +import de.danoeh.antennapod.fragment.AllEpisodesFragment; +import de.danoeh.antennapod.fragment.DownloadsFragment; +import de.danoeh.antennapod.fragment.NewEpisodesFragment; +import de.danoeh.antennapod.fragment.PlaybackHistoryFragment; +import de.danoeh.antennapod.fragment.QueueFragment; /** * BaseAdapter for the navigation drawer @@ -25,47 +42,94 @@ public class NavListAdapter extends BaseAdapter { public static final int VIEW_TYPE_SECTION_DIVIDER = 1; public static final int VIEW_TYPE_SUBSCRIPTION = 2; - public static final int[] NAV_TITLES = { - R.string.queue_label, - R.string.new_episodes_label, - R.string.all_episodes_label, - R.string.downloads_label, - R.string.playback_history_label, - R.string.add_feed_label}; - - private final Drawable[] drawables; - - public static final int SUBSCRIPTION_OFFSET = 1 + NAV_TITLES.length; + private static List tags; + private static String[] titles; private ItemAccess itemAccess; private Context context; + private SharedPreferences.OnSharedPreferenceChangeListener listener = + new SharedPreferences.OnSharedPreferenceChangeListener() { + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if(key.equals(UserPreferences.PREF_HIDDEN_DRAWER_ITEMS)) { + loadItems(); + } + } + }; + + public NavListAdapter(ItemAccess itemAccess, Context context) { this.itemAccess = itemAccess; this.context = context; - TypedArray ta = context.obtainStyledAttributes(new int[]{ - R.attr.stat_playlist, - R.attr.ic_new, - R.attr.feed, - R.attr.av_download, - R.attr.ic_history, - R.attr.content_new}); - drawables = new Drawable[]{ta.getDrawable(0), ta.getDrawable(1), ta.getDrawable(2), - ta.getDrawable(3), ta.getDrawable(4), ta.getDrawable(5)}; + titles = context.getResources().getStringArray(R.array.nav_drawer_titles); + loadItems(); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + prefs.registerOnSharedPreferenceChangeListener(listener); + } + + private void loadItems() { + List newTags = new ArrayList(Arrays.asList(MainActivity.NAV_DRAWER_TAGS)); + List hiddenFragments = UserPreferences.getHiddenDrawerItems(); + for(String hidden : hiddenFragments) { + newTags.remove(hidden); + } + tags = newTags; + notifyDataSetChanged(); + } + + public String getLabel(String tag) { + int index = ArrayUtils.indexOf(MainActivity.NAV_DRAWER_TAGS, tag); + return titles[index]; + } + + private Drawable getDrawable(String tag) { + int icon; + switch (tag) { + case QueueFragment.TAG: + icon = R.attr.stat_playlist; + break; + case NewEpisodesFragment.TAG: + icon = R.attr.ic_new; + break; + case AllEpisodesFragment.TAG: + icon = R.attr.feed; + break; + case DownloadsFragment.TAG: + icon = R.attr.av_download; + break; + case PlaybackHistoryFragment.TAG: + icon = R.attr.ic_history; + break; + case AddFeedFragment.TAG: + icon = R.attr.content_new; + break; + default: + return null; + } + TypedArray ta = context.obtainStyledAttributes(new int[] { icon } ); + Drawable result = ta.getDrawable(0); ta.recycle(); + return result; + } + + public List getTags() { + return Collections.unmodifiableList(tags); } + @Override public int getCount() { - return NAV_TITLES.length + 1 + itemAccess.getCount(); + return tags.size() + itemAccess.getCount() + (tags.size() > 0 ? 1 : 0); } @Override public Object getItem(int position) { int viewType = getItemViewType(position); if (viewType == VIEW_TYPE_NAV) { - return context.getString(NAV_TITLES[position]); + return getLabel(tags.get(position)); } else if (viewType == VIEW_TYPE_SECTION_DIVIDER) { return ""; } else { @@ -80,9 +144,9 @@ public class NavListAdapter extends BaseAdapter { @Override public int getItemViewType(int position) { - if (0 <= position && position < NAV_TITLES.length) { + if (0 <= position && position < tags.size()) { return VIEW_TYPE_NAV; - } else if (position < NAV_TITLES.length + 1) { + } else if (position < tags.size() + 1) { return VIEW_TYPE_SECTION_DIVIDER; } else { return VIEW_TYPE_SUBSCRIPTION; @@ -94,6 +158,11 @@ public class NavListAdapter extends BaseAdapter { return VIEW_TYPE_COUNT; } + public int getSubscriptionOffset() { + return tags.size() + 1; + } + + @Override public View getView(int position, View convertView, ViewGroup parent) { int viewType = getItemViewType(position); @@ -103,7 +172,7 @@ public class NavListAdapter extends BaseAdapter { } else if (viewType == VIEW_TYPE_SECTION_DIVIDER) { v = getSectionDividerView(convertView, parent); } else { - v = getFeedView(position - SUBSCRIPTION_OFFSET, convertView, parent); + v = getFeedView(position - getSubscriptionOffset(), convertView, parent); } if (v != null && viewType != VIEW_TYPE_SECTION_DIVIDER) { TextView txtvTitle = (TextView) v.findViewById(R.id.txtvTitle); @@ -135,7 +204,7 @@ public class NavListAdapter extends BaseAdapter { holder.title.setText(title); - if (NAV_TITLES[position] == R.string.queue_label) { + if (tags.get(position).equals(QueueFragment.TAG)) { int queueSize = itemAccess.getQueueSize(); if (queueSize > 0) { holder.count.setVisibility(View.VISIBLE); @@ -143,7 +212,7 @@ public class NavListAdapter extends BaseAdapter { } else { holder.count.setVisibility(View.GONE); } - } else if (NAV_TITLES[position] == R.string.new_episodes_label) { + } else if (tags.get(position).equals(NewEpisodesFragment.TAG)) { int unreadItems = itemAccess.getNumberOfUnreadItems(); if (unreadItems > 0) { holder.count.setVisibility(View.VISIBLE); @@ -155,7 +224,7 @@ public class NavListAdapter extends BaseAdapter { holder.count.setVisibility(View.GONE); } - holder.image.setImageDrawable(drawables[position]); + holder.image.setImageDrawable(getDrawable(tags.get(position))); return convertView; } diff --git a/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java index 3a9e62435..998bfa6c9 100644 --- a/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java +++ b/app/src/main/java/de/danoeh/antennapod/config/DownloadServiceCallbacksImpl.java @@ -20,7 +20,7 @@ public class DownloadServiceCallbacksImpl implements DownloadServiceCallbacks { public PendingIntent getNotificationContentIntent(Context context) { Intent intent = new Intent(context, MainActivity.class); intent.putExtra(MainActivity.EXTRA_NAV_TYPE, NavListAdapter.VIEW_TYPE_NAV); - intent.putExtra(MainActivity.EXTRA_NAV_INDEX, MainActivity.POS_DOWNLOADS); + intent.putExtra(MainActivity.EXTRA_FRAGMENT_TAG, DownloadsFragment.TAG); Bundle args = new Bundle(); args.putInt(DownloadsFragment.ARG_SELECTED_TAB, DownloadsFragment.POS_RUNNING); intent.putExtra(MainActivity.EXTRA_FRAGMENT_ARGS, args); @@ -41,7 +41,7 @@ public class DownloadServiceCallbacksImpl implements DownloadServiceCallbacks { public PendingIntent getReportNotificationContentIntent(Context context) { Intent intent = new Intent(context, MainActivity.class); intent.putExtra(MainActivity.EXTRA_NAV_TYPE, NavListAdapter.VIEW_TYPE_NAV); - intent.putExtra(MainActivity.EXTRA_NAV_INDEX, MainActivity.POS_DOWNLOADS); + intent.putExtra(MainActivity.EXTRA_FRAGMENT_TAG, DownloadsFragment.TAG); Bundle args = new Bundle(); args.putInt(DownloadsFragment.ARG_SELECTED_TAB, DownloadsFragment.POS_LOG); intent.putExtra(MainActivity.EXTRA_FRAGMENT_ARGS, args); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index a2cb8da18..9b8d1e632 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -224,7 +224,7 @@ public class ItemlistFragment extends ListFragment { @Override protected void onPostExecute(Void result) { super.onPostExecute(result); - ((MainActivity) getActivity()).loadNavFragment(MainActivity.POS_NEW, null); + ((MainActivity) getActivity()).loadFragment(NewEpisodesFragment.TAG, null); } }; ConfirmationDialog conDialog = new ConfirmationDialog(getActivity(), diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java index 3d6722370..a30e648a1 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java @@ -122,7 +122,7 @@ public class SearchFragment extends ListFragment { SearchResult result = (SearchResult) l.getAdapter().getItem(position); FeedComponent comp = result.getComponent(); if (comp.getClass() == Feed.class) { - ((MainActivity) getActivity()).loadFeedFragment(comp.getId()); + ((MainActivity) getActivity()).loadFeedFragmentById(comp.getId()); } else { if (comp.getClass() == FeedItem.class) { FeedItem item = (FeedItem) comp; -- cgit v1.2.3 From 4aa68e74e099f7a18ee339a70d8a7ec0fdb6dffa Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 17 Apr 2015 13:16:14 +0200 Subject: Bux fixes, tests --- .../danoeh/antennapod/activity/MainActivity.java | 28 +++++++++++++--------- .../danoeh/antennapod/adapter/NavListAdapter.java | 28 ++++++++++------------ 2 files changed, 29 insertions(+), 27 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 052955130..2b0bf72f1 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -111,7 +111,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); navList = (ListView) findViewById(R.id.nav_list); navDrawer = findViewById(R.id.nav_layout); - Log.i(TAG, ""); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) { @Override public void onDrawerOpened(View drawerView) { @@ -254,24 +253,27 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } public void loadFragment(int index, Bundle args) { - int numTags = navAdapter.getTags().size(); - if (index <= numTags) { + if (index < navAdapter.getSubscriptionOffset()) { String tag = navAdapter.getTags().get(index); loadFragment(tag, args); } else { - int pos = index - numTags; + int pos = index - navAdapter.getSubscriptionOffset(); loadFeedFragmentByPosition(pos, args); } } public void loadFragment(final String tag, Bundle args) { + Log.d(TAG, "loadFragment(\"" + tag + "\", " + args + ")"); Fragment fragment = null; switch (tag) { + case QueueFragment.TAG: + fragment = new QueueFragment(); + break; case NewEpisodesFragment.TAG: fragment = new NewEpisodesFragment(); break; - case QueueFragment.TAG: - fragment = new QueueFragment(); + case AllEpisodesFragment.TAG: + fragment = new AllEpisodesFragment(); break; case DownloadsFragment.TAG: fragment = new DownloadsFragment(); @@ -283,8 +285,8 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity fragment = new AddFeedFragment(); break; } - String title = navAdapter.getLabel(tag); - getSupportActionBar().setTitle(title); + currentTitle = navAdapter.getLabel(tag); + getSupportActionBar().setTitle(currentTitle); selectedNavListIndex = navAdapter.getTags().indexOf(tag); if (args != null) { fragment.setArguments(args); @@ -299,7 +301,8 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity Feed feed = itemAccess.getItem(relPos); Fragment fragment = ItemlistFragment.newInstance(feed.getId()); selectedNavListIndex = navAdapter.getSubscriptionOffset() + relPos; - getSupportActionBar().setTitle(""); + currentTitle = ""; + getSupportActionBar().setTitle(currentTitle); loadFragment(fragment); } @@ -420,7 +423,8 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity StorageUtils.checkStorageAvailability(this); Intent intent = getIntent(); - if (navDrawerData != null && intent.hasExtra(EXTRA_NAV_INDEX) && intent.hasExtra(EXTRA_NAV_TYPE)) { + if (navDrawerData != null && intent.hasExtra(EXTRA_NAV_TYPE) && + (intent.hasExtra(EXTRA_NAV_INDEX) || intent.hasExtra(EXTRA_FRAGMENT_TAG))) { handleNavIntent(); } @@ -538,8 +542,10 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity }; private void handleNavIntent() { + Log.d(TAG, "handleNavIntent()"); Intent intent = getIntent(); - if (intent.hasExtra(EXTRA_NAV_INDEX) && intent.hasExtra(EXTRA_NAV_TYPE)) { + if (intent.hasExtra(EXTRA_NAV_TYPE) && + intent.hasExtra(EXTRA_NAV_INDEX) || intent.hasExtra(EXTRA_FRAGMENT_TAG)) { int index = intent.getIntExtra(EXTRA_NAV_INDEX, -1); String tag = intent.getStringExtra(EXTRA_FRAGMENT_TAG); Bundle args = intent.getBundleExtra(EXTRA_FRAGMENT_ARGS); diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java index c763c7b61..907093ad6 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java @@ -36,7 +36,8 @@ import de.danoeh.antennapod.fragment.QueueFragment; /** * BaseAdapter for the navigation drawer */ -public class NavListAdapter extends BaseAdapter { +public class NavListAdapter extends BaseAdapter + implements SharedPreferences.OnSharedPreferenceChangeListener { public static final int VIEW_TYPE_COUNT = 3; public static final int VIEW_TYPE_NAV = 0; public static final int VIEW_TYPE_SECTION_DIVIDER = 1; @@ -48,17 +49,6 @@ public class NavListAdapter extends BaseAdapter { private ItemAccess itemAccess; private Context context; - private SharedPreferences.OnSharedPreferenceChangeListener listener = - new SharedPreferences.OnSharedPreferenceChangeListener() { - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if(key.equals(UserPreferences.PREF_HIDDEN_DRAWER_ITEMS)) { - loadItems(); - } - } - }; - - public NavListAdapter(ItemAccess itemAccess, Context context) { this.itemAccess = itemAccess; this.context = context; @@ -67,7 +57,13 @@ public class NavListAdapter extends BaseAdapter { loadItems(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - prefs.registerOnSharedPreferenceChangeListener(listener); + prefs.registerOnSharedPreferenceChangeListener(this); + } + + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if (key.equals(UserPreferences.PREF_HIDDEN_DRAWER_ITEMS)) { + loadItems(); + } } private void loadItems() { @@ -122,7 +118,7 @@ public class NavListAdapter extends BaseAdapter { @Override public int getCount() { - return tags.size() + itemAccess.getCount() + (tags.size() > 0 ? 1 : 0); + return getSubscriptionOffset() + itemAccess.getCount(); } @Override @@ -146,7 +142,7 @@ public class NavListAdapter extends BaseAdapter { public int getItemViewType(int position) { if (0 <= position && position < tags.size()) { return VIEW_TYPE_NAV; - } else if (position < tags.size() + 1) { + } else if (position < getSubscriptionOffset()) { return VIEW_TYPE_SECTION_DIVIDER; } else { return VIEW_TYPE_SUBSCRIPTION; @@ -159,7 +155,7 @@ public class NavListAdapter extends BaseAdapter { } public int getSubscriptionOffset() { - return tags.size() + 1; + return tags.size() > 0 ? tags.size() + 1 : 0; } -- cgit v1.2.3 From 3f16b4e8a2520b7b0567e40fa21874adc450c019 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 17 Apr 2015 19:13:33 +0200 Subject: Keep index of selected navigation drawer item up to date --- .../danoeh/antennapod/activity/MainActivity.java | 72 ++++++++++++++++------ 1 file changed, 54 insertions(+), 18 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 2b0bf72f1..af6deb8f3 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -5,6 +5,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; +import android.database.DataSetObserver; import android.media.AudioManager; import android.os.AsyncTask; import android.os.Bundle; @@ -23,6 +24,7 @@ import android.view.View; import android.widget.AdapterView; import android.widget.ListView; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.Validate; import java.util.List; @@ -69,7 +71,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity public static final String EXTRA_FRAGMENT_ARGS = "fragment_args"; public static final String SAVE_BACKSTACK_COUNT = "backstackCount"; - public static final String SAVE_SELECTED_NAV_INDEX = "selectedNavIndex"; public static final String SAVE_TITLE = "title"; public static final String[] NAV_DRAWER_TAGS = { @@ -153,6 +154,14 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity navList.setOnItemClickListener(navListClickListener); navList.setOnItemLongClickListener(newListLongClickListener); + navAdapter.registerDataSetObserver(new DataSetObserver() { + @Override + public void onChanged() { + Log.d(TAG, "NavListAdapter dataSet onChanged()"); + selectedNavListIndex = getSelectedNavListIndex(); + } + }); + findViewById(R.id.nav_settings).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -167,13 +176,19 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity if (mainFragment != null) { transaction.replace(R.id.main_view, mainFragment); } else { - loadFragment(getLastNavFragment(), null); + String lastFragment = getLastNavFragment(); + if(ArrayUtils.contains(NAV_DRAWER_TAGS, lastFragment)) { + loadFragment(lastFragment, null); + } else { // last fragment was not a list, but a feed + long feedId = Long.valueOf(lastFragment); + loadFeedFragmentById(feedId); + } + } externalPlayerFragment = new ExternalPlayerFragment(); transaction.replace(R.id.playerFragment, externalPlayerFragment); transaction.commit(); - checkFirstLaunch(); } @@ -239,7 +254,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity builder.create().show(); } - public ActionBar getMainActivtyActionBar() { return getSupportActionBar(); } @@ -287,7 +301,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } currentTitle = navAdapter.getLabel(tag); getSupportActionBar().setTitle(currentTitle); - selectedNavListIndex = navAdapter.getTags().indexOf(tag); + saveLastNavFragment(tag); if (args != null) { fragment.setArguments(args); } @@ -299,8 +313,12 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity return; } Feed feed = itemAccess.getItem(relPos); - Fragment fragment = ItemlistFragment.newInstance(feed.getId()); - selectedNavListIndex = navAdapter.getSubscriptionOffset() + relPos; + long feedId = feed.getId(); + Fragment fragment = ItemlistFragment.newInstance(feedId); + if(args != null) { + fragment.setArguments(args); + } + saveLastNavFragment(String.valueOf(feed.getId())); currentTitle = ""; getSupportActionBar().setTitle(currentTitle); loadFragment(fragment); @@ -309,12 +327,15 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity public void loadFeedFragmentById(long feedId) { if (navDrawerData != null) { int relPos = -1; - for (int i = 0; relPos < 0 && i < navDrawerData.feeds.size(); i++) { - if (navDrawerData.feeds.get(i).getId() == feedId) { + List feeds = navDrawerData.feeds; + for (int i = 0; relPos < 0 && i < feeds.size(); i++) { + if (feeds.get(i).getId() == feedId) { relPos = i; } } - loadFeedFragmentByPosition(relPos, null); + if(relPos >= 0) { + loadFeedFragmentByPosition(relPos, null); + } } } @@ -333,7 +354,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } } - public void loadChildFragment(Fragment fragment) { Validate.notNull(fragment); FragmentManager fm = getSupportFragmentManager(); @@ -351,14 +371,34 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity return toolbar; } + private int getSelectedNavListIndex() { + String lastFragment = getLastNavFragment(); + int tagIndex = navAdapter.getTags().indexOf(lastFragment); + if(tagIndex >= 0) { + return tagIndex; + } else if(ArrayUtils.contains(NAV_DRAWER_TAGS, lastFragment)) { + // the fragment was just hidden + return -1; + } else { // last fragment was not a list, but a feed + long feedId = Long.parseLong(lastFragment); + List feeds = navDrawerData.feeds; + for (int i = 0; i < feeds.size(); i++) { + if (feeds.get(i).getId() == feedId) { + return i + navAdapter.getSubscriptionOffset(); + } + } + return -1; + } + } + private AdapterView.OnItemClickListener navListClickListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { int viewType = parent.getAdapter().getItemViewType(position); if (viewType != NavListAdapter.VIEW_TYPE_SECTION_DIVIDER && position != selectedNavListIndex) { loadFragment(position, null); - selectedNavListIndex = position; - navAdapter.notifyDataSetChanged(); + // selectedNavListIndex = position; + // navAdapter.notifyDataSetChanged(); } drawerLayout.closeDrawer(navDrawer); } @@ -386,7 +426,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity if (!drawerLayout.isDrawerOpen(navDrawer)) { getSupportActionBar().setTitle(currentTitle); } - selectedNavListIndex = savedInstanceState.getInt(SAVE_SELECTED_NAV_INDEX); + selectedNavListIndex = getSelectedNavListIndex(); } } @@ -400,9 +440,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(SAVE_TITLE, getSupportActionBar().getTitle().toString()); - outState.putInt(SAVE_SELECTED_NAV_INDEX, selectedNavListIndex); outState.putInt(SAVE_BACKSTACK_COUNT, getSupportFragmentManager().getBackStackEntryCount()); - } @Override @@ -453,7 +491,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } } - private DBReader.NavDrawerData navDrawerData; private AsyncTask loadTask; private int selectedNavListIndex = 0; @@ -492,7 +529,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity return (navDrawerData != null) ? navDrawerData.numUnreadItems : 0; } - }; private void loadData() { -- cgit v1.2.3 From 3bf2b109bb1c386c64b80d277069ead88c79851e Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 18 Apr 2015 21:36:00 +0200 Subject: Fixes --- .../danoeh/antennapod/activity/AudioplayerActivity.java | 3 ++- .../java/de/danoeh/antennapod/activity/MainActivity.java | 15 ++++++++------- .../danoeh/antennapod/activity/MediaplayerActivity.java | 8 ++++++-- 3 files changed, 16 insertions(+), 10 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 0d96ad4e9..3c6caa787 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -413,6 +413,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc butShowCover = (ImageButton) findViewById(R.id.butCover); txtvTitle = (TextView) findViewById(R.id.txtvTitle); + /* drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) { CharSequence currentTitle = getSupportActionBar().getTitle(); @@ -430,7 +431,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc getSupportActionBar().setTitle(currentTitle); supportInvalidateOptionsMenu(); } - }; + }; */ drawerToggle.setDrawerIndicatorEnabled(false); drawerLayout.setDrawerListener(drawerToggle); 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 af6deb8f3..a13b1f836 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -112,21 +112,21 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); navList = (ListView) findViewById(R.id.nav_list); navDrawer = findViewById(R.id.nav_layout); + drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) { @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); - currentTitle = getSupportActionBar().getTitle(); - getSupportActionBar().setTitle(drawerTitle); - supportInvalidateOptionsMenu(); + //currentTitle = getSupportActionBar().getTitle(); + //getSupportActionBar().setTitle(drawerTitle); + //supportInvalidateOptionsMenu(); } @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); - getSupportActionBar().setTitle(currentTitle); - supportInvalidateOptionsMenu(); - + //getSupportActionBar().setTitle(currentTitle); + //supportInvalidateOptionsMenu(); } }; @@ -481,7 +481,8 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity public boolean onOptionsItemSelected(MenuItem item) { if (drawerToggle.onOptionsItemSelected(item)) { return true; - } else if (item.getItemId() == android.R.id.home) { + } else + if (item.getItemId() == android.R.id.home) { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { dismissChildFragment(); } 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 1dd535f2a..0cd388b9d 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MediaplayerActivity.java @@ -431,10 +431,14 @@ public abstract class MediaplayerActivity extends ActionBarActivity butPlay = (ImageButton) findViewById(R.id.butPlay); butRev = (ImageButton) findViewById(R.id.butRev); txtvRev = (TextView) findViewById(R.id.txtvRev); - txtvRev.setText(String.valueOf(UserPreferences.getRewindSecs())); + if(txtvRev != null) { + txtvRev.setText(String.valueOf(UserPreferences.getRewindSecs())); + } butFF = (ImageButton) findViewById(R.id.butFF); txtvFF = (TextView) findViewById(R.id.txtvFF); - txtvFF.setText(String.valueOf(UserPreferences.getFastFowardSecs())); + if(txtvFF != null) { + txtvFF.setText(String.valueOf(UserPreferences.getFastFowardSecs())); + } // SEEKBAR SETUP -- cgit v1.2.3 From 9c2f46e5e4059fe32362d9ad8dafb06372cb8f3e Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 18 Apr 2015 22:12:26 +0200 Subject: Remove checks for opened drawer, now unneccessary --- .../antennapod/activity/AudioplayerActivity.java | 34 ++------------- .../danoeh/antennapod/activity/MainActivity.java | 19 +-------- .../antennapod/fragment/AllEpisodesFragment.java | 4 +- .../antennapod/fragment/DownloadLogFragment.java | 11 ++--- .../antennapod/fragment/ItemlistFragment.java | 4 +- .../fragment/PlaybackHistoryFragment.java | 6 +-- .../danoeh/antennapod/fragment/QueueFragment.java | 2 +- .../danoeh/antennapod/fragment/SearchFragment.java | 4 +- .../fragment/gpodnet/PodcastListFragment.java | 49 ++++++++++++---------- .../fragment/gpodnet/SearchListFragment.java | 33 +++++++-------- .../fragment/gpodnet/TagListFragment.java | 37 ++++++++-------- 11 files changed, 77 insertions(+), 126 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 3c6caa787..972d318fb 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -46,7 +46,6 @@ import de.danoeh.antennapod.core.util.playback.PlaybackController; import de.danoeh.antennapod.dialog.VariableSpeedDialog; import de.danoeh.antennapod.fragment.CoverFragment; import de.danoeh.antennapod.fragment.ItemDescriptionFragment; -import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import de.danoeh.antennapod.preferences.PreferenceController; @@ -413,26 +412,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc butShowCover = (ImageButton) findViewById(R.id.butCover); txtvTitle = (TextView) findViewById(R.id.txtvTitle); - /* - drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) { - CharSequence currentTitle = getSupportActionBar().getTitle(); - - @Override - public void onDrawerOpened(View drawerView) { - super.onDrawerOpened(drawerView); - currentTitle = getSupportActionBar().getTitle(); - getSupportActionBar().setTitle(R.string.app_name); - supportInvalidateOptionsMenu(); - } - - @Override - public void onDrawerClosed(View drawerView) { - super.onDrawerClosed(drawerView); - getSupportActionBar().setTitle(currentTitle); - supportInvalidateOptionsMenu(); - } - }; */ - + drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close); drawerToggle.setDrawerIndicatorEnabled(false); drawerLayout.setDrawerListener(drawerToggle); @@ -638,20 +618,12 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc @Override public boolean onCreateOptionsMenu(Menu menu) { - if (!MenuItemUtils.isActivityDrawerOpen(this)) { - return super.onCreateOptionsMenu(menu); - } else { - return false; - } + return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { - if (!MenuItemUtils.isActivityDrawerOpen(this)) { - return super.onPrepareOptionsMenu(menu); - } else { - return false; - } + return super.onPrepareOptionsMenu(menu); } public interface AudioplayerContentFragment { 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 a13b1f836..759ada37c 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -113,28 +113,11 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity navList = (ListView) findViewById(R.id.nav_list); navDrawer = findViewById(R.id.nav_layout); - drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) { - @Override - public void onDrawerOpened(View drawerView) { - super.onDrawerOpened(drawerView); - //currentTitle = getSupportActionBar().getTitle(); - //getSupportActionBar().setTitle(drawerTitle); - //supportInvalidateOptionsMenu(); - } - - @Override - public void onDrawerClosed(View drawerView) { - super.onDrawerClosed(drawerView); - //getSupportActionBar().setTitle(currentTitle); - //supportInvalidateOptionsMenu(); - } - }; - + drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close); if (savedInstanceState != null) { int backstackCount = savedInstanceState.getInt(SAVE_BACKSTACK_COUNT, 0); drawerToggle.setDrawerIndicatorEnabled(backstackCount == 0); } - drawerLayout.setDrawerListener(drawerToggle); final FragmentManager fm = getSupportFragmentManager(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 3db2a82a7..6cd78da50 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -194,7 +194,7 @@ public class AllEpisodesFragment extends Fragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + if (itemsLoaded) { inflater.inflate(R.menu.new_episodes, menu); final SearchView sv = new SearchView(getActivity()); @@ -220,7 +220,7 @@ public class AllEpisodesFragment extends Fragment { @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + if (itemsLoaded) { MenuItem menuItem = menu.findItem(R.id.mark_all_read_item); if (menuItem != null) { menuItem.setVisible(unreadItems != null && !unreadItems.isEmpty()); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java index 0f6f7d53c..074a87ea0 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/DownloadLogFragment.java @@ -20,8 +20,6 @@ import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.service.download.DownloadStatus; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; -import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; /** * Shows the download log @@ -119,7 +117,7 @@ public class DownloadLogFragment extends ListFragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + if (itemsLoaded) { MenuItem clearHistory = menu.add(Menu.NONE, R.id.clear_history_item, Menu.CATEGORY_CONTAINER, R.string.clear_history_label); MenuItemCompat.setShowAsAction(clearHistory, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); TypedArray drawables = getActivity().obtainStyledAttributes(new int[]{R.attr.content_discard}); @@ -131,8 +129,11 @@ public class DownloadLogFragment extends ListFragment { @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { - menu.findItem(R.id.clear_history_item).setVisible(downloadLog != null && !downloadLog.isEmpty()); + if (itemsLoaded) { + MenuItem menuItem = menu.findItem(R.id.clear_history_item); + if(menuItem != null) { + menuItem.setVisible(downloadLog != null && !downloadLog.isEmpty()); + } } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index 9b8d1e632..f872284a4 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -180,7 +180,7 @@ public class ItemlistFragment extends ListFragment { public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + if (itemsLoaded) { FeedMenuHandler.onCreateOptionsMenu(inflater, menu); final SearchView sv = new SearchView(getActivity()); @@ -207,7 +207,7 @@ public class ItemlistFragment extends ListFragment { @Override public void onPrepareOptionsMenu(Menu menu) { - if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + if (itemsLoaded) { FeedMenuHandler.onPrepareOptionsMenu(menu, feed); } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index 413c1fea4..440e38636 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -32,8 +32,6 @@ import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.util.LongList; -import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import de.greenrobot.event.EventBus; public class PlaybackHistoryFragment extends ListFragment { @@ -141,7 +139,7 @@ public class PlaybackHistoryFragment extends ListFragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + if (itemsLoaded) { MenuItem clearHistory = menu.add(Menu.NONE, R.id.clear_history_item, Menu.CATEGORY_CONTAINER, R.string.clear_history_label); MenuItemCompat.setShowAsAction(clearHistory, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); TypedArray drawables = getActivity().obtainStyledAttributes(new int[]{R.attr.content_discard}); @@ -153,7 +151,7 @@ public class PlaybackHistoryFragment extends ListFragment { @Override public void onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + if (itemsLoaded) { MenuItem menuItem = menu.findItem(R.id.clear_history_item); if (menuItem != null) { menuItem.setVisible(playbackHistory != null && !playbackHistory.isEmpty()); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 8ebb21469..f1ed6c656 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -202,7 +202,7 @@ public class QueueFragment extends Fragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + if (itemsLoaded) { inflater.inflate(R.menu.queue, menu); final SearchView sv = new SearchView(getActivity()); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java index a30e648a1..fc6225409 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/SearchFragment.java @@ -25,8 +25,6 @@ import de.danoeh.antennapod.core.feed.FeedComponent; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.SearchResult; import de.danoeh.antennapod.core.storage.FeedSearcher; -import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; /** * Performs a search operation on all feeds or one specific feed and displays the search result. @@ -134,7 +132,7 @@ public class SearchFragment extends ListFragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - if (itemsLoaded && !MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { + if (itemsLoaded) { MenuItem item = menu.add(Menu.NONE, R.id.search_item, Menu.NONE, R.string.search_label); MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); final SearchView sv = new SearchView(getActivity()); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java index 15a0b55b1..c87ed777c 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java @@ -6,8 +6,18 @@ import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; -import android.view.*; -import android.widget.*; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.GridView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import java.util.List; import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; @@ -19,9 +29,6 @@ import de.danoeh.antennapod.core.gpoddernet.GpodnetService; import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast; import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; - -import java.util.List; /** * Displays a list of GPodnetPodcast-Objects in a GridView @@ -43,24 +50,22 @@ public abstract class PodcastListFragment extends Fragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - if (!MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { - final android.support.v7.widget.SearchView sv = new android.support.v7.widget.SearchView(getActivity()); - MenuItemUtils.addSearchItem(menu, sv); - sv.setQueryHint(getString(R.string.gpodnet_search_hint)); - sv.setOnQueryTextListener(new android.support.v7.widget.SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String s) { - sv.clearFocus(); - ((MainActivity) getActivity()).loadChildFragment(SearchListFragment.newInstance(s)); - return true; - } + final android.support.v7.widget.SearchView sv = new android.support.v7.widget.SearchView(getActivity()); + MenuItemUtils.addSearchItem(menu, sv); + sv.setQueryHint(getString(R.string.gpodnet_search_hint)); + sv.setOnQueryTextListener(new android.support.v7.widget.SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String s) { + sv.clearFocus(); + ((MainActivity) getActivity()).loadChildFragment(SearchListFragment.newInstance(s)); + return true; + } - @Override - public boolean onQueryTextChange(String s) { - return false; - } - }); - } + @Override + public boolean onQueryTextChange(String s) { + return false; + } + }); } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java index 635842196..2295ddf41 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java @@ -14,7 +14,6 @@ import de.danoeh.antennapod.core.gpoddernet.GpodnetService; import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetPodcast; import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; /** * Performs a search on the gpodder.net directory and displays the results. @@ -46,24 +45,22 @@ public class SearchListFragment extends PodcastListFragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { final SearchView sv = new SearchView(getActivity()); - if (!MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { - MenuItemUtils.addSearchItem(menu, sv); - sv.setQueryHint(getString(R.string.gpodnet_search_hint)); - sv.setQuery(query, false); - sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String s) { - sv.clearFocus(); - changeQuery(s); - return true; - } + MenuItemUtils.addSearchItem(menu, sv); + sv.setQueryHint(getString(R.string.gpodnet_search_hint)); + sv.setQuery(query, false); + sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String s) { + sv.clearFocus(); + changeQuery(s); + return true; + } - @Override - public boolean onQueryTextChange(String s) { - return false; - } - }); - } + @Override + public boolean onQueryTextChange(String s) { + return false; + } + }); } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java index cc87407b4..6dff496b2 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java @@ -21,7 +21,6 @@ import de.danoeh.antennapod.core.gpoddernet.GpodnetService; import de.danoeh.antennapod.core.gpoddernet.GpodnetServiceException; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetTag; import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; public class TagListFragment extends ListFragment { private static final String TAG = "TagListFragment"; @@ -36,27 +35,25 @@ public class TagListFragment extends ListFragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - if (!MenuItemUtils.isActivityDrawerOpen((NavDrawerActivity) getActivity())) { - final SearchView sv = new SearchView(getActivity()); - MenuItemUtils.addSearchItem(menu, sv); - sv.setQueryHint(getString(R.string.gpodnet_search_hint)); - sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - @Override - public boolean onQueryTextSubmit(String s) { - Activity activity = getActivity(); - if (activity != null) { - sv.clearFocus(); - ((MainActivity) activity).loadChildFragment(SearchListFragment.newInstance(s)); - } - return true; + final SearchView sv = new SearchView(getActivity()); + MenuItemUtils.addSearchItem(menu, sv); + sv.setQueryHint(getString(R.string.gpodnet_search_hint)); + sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { + @Override + public boolean onQueryTextSubmit(String s) { + Activity activity = getActivity(); + if (activity != null) { + sv.clearFocus(); + ((MainActivity) activity).loadChildFragment(SearchListFragment.newInstance(s)); } + return true; + } - @Override - public boolean onQueryTextChange(String s) { - return false; - } - }); - } + @Override + public boolean onQueryTextChange(String s) { + return false; + } + }); } @Override -- cgit v1.2.3 From 5ffb0460b3cb3c251b28da0a156a7c2e4be159bd Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 19 Apr 2015 17:36:32 +0200 Subject: Change new pref key to not crash previous versions (type changed) --- app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 759ada37c..093d9aef9 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -63,7 +63,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity public static final String PREF_NAME = "MainActivityPrefs"; public static final String PREF_IS_FIRST_LAUNCH = "prefMainActivityIsFirstLaunch"; - public static final String PREF_LAST_FRAGMENT = "prefMainActivityLastFragment"; + public static final String PREF_LAST_FRAGMENT_TAG = "prefMainActivityLastFragmentTag"; public static final String EXTRA_NAV_TYPE = "nav_type"; public static final String EXTRA_NAV_INDEX = "nav_index"; @@ -178,13 +178,13 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity private void saveLastNavFragment(String tag) { SharedPreferences prefs = getSharedPreferences(PREF_NAME, MODE_PRIVATE); SharedPreferences.Editor edit = prefs.edit(); - edit.putString(PREF_LAST_FRAGMENT, tag); + edit.putString(PREF_LAST_FRAGMENT_TAG, tag); edit.commit(); } private String getLastNavFragment() { SharedPreferences prefs = getSharedPreferences(PREF_NAME, MODE_PRIVATE); - return prefs.getString(PREF_LAST_FRAGMENT, QueueFragment.TAG); + return prefs.getString(PREF_LAST_FRAGMENT_TAG, QueueFragment.TAG); } private void checkFirstLaunch() { -- cgit v1.2.3 From efa35fed9c05281def2d4f61ec0614deb8ebede3 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 19 Apr 2015 18:14:56 +0200 Subject: Start: Restore last feed --- .../de/danoeh/antennapod/activity/MainActivity.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 093d9aef9..246af8d12 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -140,7 +140,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity navAdapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() { - Log.d(TAG, "NavListAdapter dataSet onChanged()"); selectedNavListIndex = getSelectedNavListIndex(); } }); @@ -162,11 +161,9 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity String lastFragment = getLastNavFragment(); if(ArrayUtils.contains(NAV_DRAWER_TAGS, lastFragment)) { loadFragment(lastFragment, null); - } else { // last fragment was not a list, but a feed - long feedId = Long.valueOf(lastFragment); - loadFeedFragmentById(feedId); } - + // else: lastFragment contains feed id - drawer data is not loaded yet, + // so loading is postponed until then } externalPlayerFragment = new ExternalPlayerFragment(); transaction.replace(R.id.playerFragment, externalPlayerFragment); @@ -178,7 +175,11 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity private void saveLastNavFragment(String tag) { SharedPreferences prefs = getSharedPreferences(PREF_NAME, MODE_PRIVATE); SharedPreferences.Editor edit = prefs.edit(); - edit.putString(PREF_LAST_FRAGMENT_TAG, tag); + if(tag != null) { + edit.putString(PREF_LAST_FRAGMENT_TAG, tag); + } else { + edit.remove(PREF_LAST_FRAGMENT_TAG); + } edit.commit(); } @@ -531,6 +532,13 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity navDrawerData = result; navAdapter.notifyDataSetChanged(); + String lastFragment = getLastNavFragment(); + if(!ArrayUtils.contains(NAV_DRAWER_TAGS, lastFragment)) { + long feedId = Long.valueOf(lastFragment); + loadFeedFragmentById(feedId); + saveLastNavFragment(null); + } + if (handleIntent) { handleNavIntent(); } -- cgit v1.2.3 From 7829ddc94e8ddeb3f7e307205c07439e0f322dcd Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Tue, 21 Apr 2015 17:34:02 +0200 Subject: Show URL in feed info, layout optimizations --- .../de/danoeh/antennapod/activity/FeedInfoActivity.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java index 93c71a868..2ec558046 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java @@ -17,7 +17,6 @@ import android.widget.TextView; import com.squareup.picasso.Picasso; -import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.feed.Feed; @@ -44,6 +43,7 @@ public class FeedInfoActivity extends ActionBarActivity { private TextView txtvDescription; private TextView txtvLanguage; private TextView txtvAuthor; + private TextView txtvUrl; private EditText etxtUsername; private EditText etxtPassword; private CheckBox cbxAutoDownload; @@ -61,6 +61,7 @@ public class FeedInfoActivity extends ActionBarActivity { txtvDescription = (TextView) findViewById(R.id.txtvDescription); txtvLanguage = (TextView) findViewById(R.id.txtvLanguage); txtvAuthor = (TextView) findViewById(R.id.txtvAuthor); + txtvUrl = (TextView) findViewById(R.id.txtvUrl); cbxAutoDownload = (CheckBox) findViewById(R.id.cbxAutoDownload); etxtUsername = (EditText) findViewById(R.id.etxtUsername); etxtPassword = (EditText) findViewById(R.id.etxtPassword); @@ -76,10 +77,9 @@ public class FeedInfoActivity extends ActionBarActivity { protected void onPostExecute(Feed result) { if (result != null) { feed = result; - if (BuildConfig.DEBUG) - Log.d(TAG, "Language is " + feed.getLanguage()); - if (BuildConfig.DEBUG) - Log.d(TAG, "Author is " + feed.getAuthor()); + Log.d(TAG, "Language is " + feed.getLanguage()); + Log.d(TAG, "Author is " + feed.getAuthor()); + Log.d(TAG, "URL is " + feed.getDownload_url()); imgvCover.post(new Runnable() { @Override @@ -92,7 +92,7 @@ public class FeedInfoActivity extends ActionBarActivity { }); txtvTitle.setText(feed.getTitle()); - txtvDescription.setText(feed.getDescription()); + txtvDescription.setText(feed.getDescription().trim()); if (feed.getAuthor() != null) { txtvAuthor.setText(feed.getAuthor()); } @@ -100,6 +100,7 @@ public class FeedInfoActivity extends ActionBarActivity { txtvLanguage.setText(LangUtils .getLanguageString(feed.getLanguage())); } + txtvUrl.setText(feed.getDownload_url()); cbxAutoDownload.setEnabled(UserPreferences.isEnableAutodownload()); cbxAutoDownload.setChecked(feed.getPreferences().getAutoDownload()); -- cgit v1.2.3 From ff8db54385e6bb91fa9e09c3823906ce40a45484 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Tue, 21 Apr 2015 21:00:51 +0200 Subject: Add copy to clipboard --- .../antennapod/activity/FeedInfoActivity.java | 31 +++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java index 2ec558046..24b684752 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java @@ -1,5 +1,7 @@ package de.danoeh.antennapod.activity; +import android.content.ClipData; +import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; @@ -9,12 +11,15 @@ import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; +import com.joanzapata.android.iconify.Iconify; import com.squareup.picasso.Picasso; import de.danoeh.antennapod.R; @@ -48,6 +53,27 @@ public class FeedInfoActivity extends ActionBarActivity { private EditText etxtPassword; private CheckBox cbxAutoDownload; + private final View.OnClickListener copyUrlToClipboard = new View.OnClickListener() { + @Override + public void onClick(View v) { + if(feed != null && feed.getDownload_url() != null) { + String url = feed.getDownload_url(); + if (android.os.Build.VERSION.SDK_INT >= 11) { + ClipData clipData = ClipData.newPlainText(url, url); + android.content.ClipboardManager cm = (android.content.ClipboardManager) FeedInfoActivity.this + .getSystemService(Context.CLIPBOARD_SERVICE); + cm.setPrimaryClip(clipData); + } else { + android.text.ClipboardManager cm = (android.text.ClipboardManager) FeedInfoActivity.this + .getSystemService(Context.CLIPBOARD_SERVICE); + cm.setText(url); + } + Toast t = Toast.makeText(FeedInfoActivity.this, R.string.copied_url_msg, Toast.LENGTH_SHORT); + t.show(); + } + } + }; + @Override protected void onCreate(Bundle savedInstanceState) { setTheme(UserPreferences.getTheme()); @@ -66,6 +92,8 @@ public class FeedInfoActivity extends ActionBarActivity { etxtUsername = (EditText) findViewById(R.id.etxtUsername); etxtPassword = (EditText) findViewById(R.id.etxtPassword); + txtvUrl.setOnClickListener(copyUrlToClipboard); + AsyncTask loadTask = new AsyncTask() { @Override @@ -100,7 +128,8 @@ public class FeedInfoActivity extends ActionBarActivity { txtvLanguage.setText(LangUtils .getLanguageString(feed.getLanguage())); } - txtvUrl.setText(feed.getDownload_url()); + txtvUrl.setText(feed.getDownload_url() + " {fa-paperclip}"); + Iconify.addIcons(txtvUrl); cbxAutoDownload.setEnabled(UserPreferences.isEnableAutodownload()); cbxAutoDownload.setChecked(feed.getPreferences().getAutoDownload()); -- cgit v1.2.3 From 8ed0353c48de056086e5b82977d6660826c130bc Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Wed, 22 Apr 2015 09:52:26 +0200 Subject: Small fixes --- .../de/danoeh/antennapod/activity/AudioplayerActivity.java | 11 ----------- .../main/java/de/danoeh/antennapod/activity/MainActivity.java | 5 +---- .../java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java | 9 --------- 3 files changed, 1 insertion(+), 24 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 972d318fb..213afb57a 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -13,7 +13,6 @@ import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.Toolbar; import android.util.Log; -import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; @@ -616,16 +615,6 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc return drawerLayout != null && navDrawer != null && drawerLayout.isDrawerOpen(navDrawer); } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - return super.onPrepareOptionsMenu(menu); - } - public interface AudioplayerContentFragment { public void onDataSetChanged(Playable media); } 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 246af8d12..dfecfc837 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -381,8 +381,6 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity int viewType = parent.getAdapter().getItemViewType(position); if (viewType != NavListAdapter.VIEW_TYPE_SECTION_DIVIDER && position != selectedNavListIndex) { loadFragment(position, null); - // selectedNavListIndex = position; - // navAdapter.notifyDataSetChanged(); } drawerLayout.closeDrawer(navDrawer); } @@ -465,8 +463,7 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity public boolean onOptionsItemSelected(MenuItem item) { if (drawerToggle.onOptionsItemSelected(item)) { return true; - } else - if (item.getItemId() == android.R.id.home) { + } else if (item.getItemId() == android.R.id.home) { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { dismissChildFragment(); } diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java index fc942ce20..b78bfd01a 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java @@ -19,13 +19,4 @@ public class MenuItemUtils extends de.danoeh.antennapod.core.menuhandler.MenuIte return item; } - /** - * Checks if the navigation drawer of the DrawerActivity is opened. This can be useful for Fragments - * that hide their menu if the navigation drawer is open. - * - * @return True if the drawer is open, false otherwise (also if the parameter is null) - */ - public static boolean isActivityDrawerOpen(NavDrawerActivity activity) { - return activity != null && activity.isDrawerOpen(); - } } -- cgit v1.2.3 From 8050372ba0c0d0ee9f03535866a7ddf0e7c4e744 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Tue, 28 Apr 2015 16:49:41 +0200 Subject: Add ability to retry failed downloads in the download log --- .../antennapod/adapter/DownloadLogAdapter.java | 102 ++++++++++++++++++--- 1 file changed, 91 insertions(+), 11 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java index f982e86ce..f29cfdf2f 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DownloadLogAdapter.java @@ -2,20 +2,34 @@ package de.danoeh.antennapod.adapter; import android.content.Context; import android.text.format.DateUtils; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.Button; import android.widget.TextView; +import android.widget.Toast; + +import com.joanzapata.android.iconify.Iconify; + +import java.util.Date; + import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedImage; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.service.download.DownloadStatus; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBTasks; +import de.danoeh.antennapod.core.storage.DownloadRequestException; /** Displays a list of DownloadStatus entries. */ public class DownloadLogAdapter extends BaseAdapter { + private final String TAG = "DownloadLogAdapter"; + private Context context; private ItemAccess itemAccess; @@ -35,11 +49,11 @@ public class DownloadLogAdapter extends BaseAdapter { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.downloadlog_item, parent, false); + holder.icon = (TextView) convertView.findViewById(R.id.txtvIcon); + holder.retry = (Button) convertView.findViewById(R.id.btnRetry); + holder.date = (TextView) convertView.findViewById(R.id.txtvDate); holder.title = (TextView) convertView.findViewById(R.id.txtvTitle); holder.type = (TextView) convertView.findViewById(R.id.txtvType); - holder.date = (TextView) convertView.findViewById(R.id.txtvDate); - holder.successful = (TextView) convertView - .findViewById(R.id.txtvStatus); holder.reason = (TextView) convertView .findViewById(R.id.txtvReason); convertView.setTag(holder); @@ -62,33 +76,99 @@ public class DownloadLogAdapter extends BaseAdapter { status.getCompletionDate().getTime(), System.currentTimeMillis(), 0, 0)); if (status.isSuccessful()) { - holder.successful.setTextColor(convertView.getResources().getColor( + holder.icon.setTextColor(convertView.getResources().getColor( R.color.download_success_green)); - holder.successful.setText(R.string.download_successful); + holder.icon.setText("{fa-check-circle}"); + Iconify.addIcons(holder.icon); + holder.retry.setVisibility(View.GONE); holder.reason.setVisibility(View.GONE); } else { - holder.successful.setTextColor(convertView.getResources().getColor( + holder.icon.setTextColor(convertView.getResources().getColor( R.color.download_failed_red)); - holder.successful.setText(R.string.download_failed); + holder.icon.setText("{fa-times-circle}"); + Iconify.addIcons(holder.icon); String reasonText = status.getReason().getErrorString(context); if (status.getReasonDetailed() != null) { reasonText += ": " + status.getReasonDetailed(); } holder.reason.setText(reasonText); holder.reason.setVisibility(View.VISIBLE); + if(status.getFeedfileType() != FeedImage.FEEDFILETYPE_FEEDIMAGE && + !newerWasSuccessful(position, status.getFeedfileType(), status.getFeedfileId())) { + holder.retry.setVisibility(View.VISIBLE); + holder.retry.setText("{fa-repeat}"); + Iconify.addIcons(holder.retry); + holder.retry.setOnClickListener(clickListener); + ButtonHolder btnHolder; + if(holder.retry.getTag() != null) { + btnHolder = (ButtonHolder) holder.retry.getTag(); + } else { + btnHolder = new ButtonHolder(); + } + btnHolder.typeId = status.getFeedfileType(); + btnHolder.id = status.getFeedfileId(); + holder.retry.setTag(btnHolder); + } else { + holder.retry.setVisibility(View.GONE); + holder.retry.setOnClickListener(null); + holder.retry.setTag(null); + } } return convertView; } + private final View.OnClickListener clickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + ButtonHolder holder = (ButtonHolder) v.getTag(); + if(holder.typeId == Feed.FEEDFILETYPE_FEED) { + Feed feed = DBReader.getFeed(context, holder.id); + feed.setLastUpdate(new Date(0)); // force refresh + try { + DBTasks.refreshFeed(context, feed); + } catch (DownloadRequestException e) { + e.printStackTrace(); + } + } else if(holder.typeId == FeedMedia.FEEDFILETYPE_FEEDMEDIA) { + FeedMedia media = DBReader.getFeedMedia(context, holder.id); + try { + DBTasks.downloadFeedItems(context, media.getItem()); + Toast.makeText(context, R.string.status_downloading_label, Toast.LENGTH_SHORT).show(); + } catch (DownloadRequestException e) { + e.printStackTrace(); + DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage()); + } + } else { + Log.wtf(TAG, "Unexpected type id: " + holder.typeId); + } + v.setVisibility(View.GONE); + } + }; + + private boolean newerWasSuccessful(int position, int feedTypeId, long id) { + for (int i = 0; i < position; i++) { + DownloadStatus status = getItem(i); + if (status.getFeedfileType() == feedTypeId && status.getFeedfileId() == id && + status.isSuccessful()) return true; + } + return false; + } + static class Holder { + TextView icon; + Button retry; TextView title; TextView type; TextView date; - TextView successful; TextView reason; } + static class ButtonHolder { + int typeId; + long id; + } + @Override public int getCount() { return itemAccess.getCount(); @@ -104,9 +184,9 @@ public class DownloadLogAdapter extends BaseAdapter { return position; } - public static interface ItemAccess { - public int getCount(); - public DownloadStatus getItem(int position); + public interface ItemAccess { + int getCount(); + DownloadStatus getItem(int position); } } -- cgit v1.2.3 From 686ee7ed86be3943bef1f117d194e742354ef08c Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Sat, 2 May 2015 09:27:13 -0400 Subject: fixes a null pointer exception that can sometimes occur when the PlaybackWidgetService is shutdown --- .../antennapod/service/PlayerWidgetService.java | 27 +++++++++++----------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java b/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java index 1d9e8e412..0d00823d3 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java +++ b/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java @@ -52,19 +52,20 @@ public class PlayerWidgetService extends Service { public void onDestroy() { super.onDestroy(); Log.d(TAG, "Service is about to be destroyed"); - - Playable playable = playbackService.getPlayable(); - if(playable != null && playable instanceof FeedMedia) { - FeedMedia media = (FeedMedia) playable; - if(media.hasAlmostEnded()) { - Log.d(TAG, "smart mark as read"); - FeedItem item = media.getItem(); - DBWriter.markItemRead(this, item, true, false); - DBWriter.removeQueueItem(this, item, false); - DBWriter.addItemToPlaybackHistory(this, media); - if (UserPreferences.isAutoDelete()) { - Log.d(TAG, "Delete " + media.toString()); - DBWriter.deleteFeedMediaOfItem(this, media.getId()); + if (playbackService != null) { + Playable playable = playbackService.getPlayable(); + if (playable != null && playable instanceof FeedMedia) { + FeedMedia media = (FeedMedia) playable; + if (media.hasAlmostEnded()) { + Log.d(TAG, "smart mark as read"); + FeedItem item = media.getItem(); + DBWriter.markItemRead(this, item, true, false); + DBWriter.removeQueueItem(this, item, false); + DBWriter.addItemToPlaybackHistory(this, media); + if (UserPreferences.isAutoDelete()) { + Log.d(TAG, "Delete " + media.toString()); + DBWriter.deleteFeedMediaOfItem(this, media.getId()); + } } } } -- cgit v1.2.3 From 103fb635d16f270796adde0e6f3d212a671b7214 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 2 May 2015 21:04:30 +0200 Subject: Add ActionBar icon to enable/disable list drag (reorder, swipe) --- .../antennapod/adapter/QueueListAdapter.java | 18 +++++++++++++++- .../danoeh/antennapod/fragment/QueueFragment.java | 24 +++++++++++++++++++++- .../antennapod/menuhandler/MenuItemUtils.java | 16 +++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java index a256dc129..bba5a00a9 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/QueueListAdapter.java @@ -14,9 +14,9 @@ import android.widget.TextView; import com.squareup.picasso.Picasso; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Converter; @@ -31,6 +31,8 @@ public class QueueListAdapter extends BaseAdapter { private final ActionButtonCallback actionButtonCallback; private final ActionButtonUtils actionButtonUtils; + private boolean locked; + public QueueListAdapter(Context context, ItemAccess itemAccess, ActionButtonCallback actionButtonCallback) { super(); @@ -38,6 +40,12 @@ public class QueueListAdapter extends BaseAdapter { this.itemAccess = itemAccess; this.actionButtonUtils = new ActionButtonUtils(context); this.actionButtonCallback = actionButtonCallback; + locked = UserPreferences.isQueueLocked(); + } + + public void setLocked(boolean locked) { + this.locked = locked; + notifyDataSetChanged(); } @Override @@ -67,6 +75,7 @@ public class QueueListAdapter extends BaseAdapter { .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.queue_listitem, parent, false); + holder.dragHandle = (ImageView) convertView.findViewById(R.id.drag_handle); holder.imageView = (ImageView) convertView.findViewById(R.id.imgvImage); holder.title = (TextView) convertView.findViewById(R.id.txtvTitle); holder.pubDate = (TextView) convertView.findViewById(R.id.txtvPubDate); @@ -83,6 +92,12 @@ public class QueueListAdapter extends BaseAdapter { holder = (Holder) convertView.getTag(); } + if(locked) { + holder.dragHandle.setVisibility(View.GONE); + } else { + holder.dragHandle.setVisibility(View.VISIBLE); + } + holder.title.setText(item.getTitle()); FeedMedia media = item.getMedia(); @@ -143,6 +158,7 @@ public class QueueListAdapter extends BaseAdapter { static class Holder { + ImageView dragHandle; ImageView imageView; TextView title; TextView pubDate; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index f1ed6c656..6f81177db 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -4,6 +4,7 @@ import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; +import android.content.res.TypedArray; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; @@ -48,7 +49,6 @@ import de.danoeh.antennapod.core.util.QueueSorter; import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken; import de.danoeh.antennapod.core.util.gui.UndoBarController; import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import de.greenrobot.event.EventBus; /** @@ -67,6 +67,8 @@ public class QueueFragment extends Fragment { private TextView txtvEmpty; private ProgressBar progLoading; + private MenuItem queueLock; + private UndoBarController undoBarController; private List queue; @@ -221,6 +223,9 @@ public class QueueFragment extends Fragment { return false; } }); + + MenuItemUtils.refreshLockItem(getActivity(), menu, queueLock); + isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); } } @@ -229,6 +234,17 @@ public class QueueFragment extends Fragment { public boolean onOptionsItemSelected(MenuItem item) { if (!super.onOptionsItemSelected(item)) { switch (item.getItemId()) { + case R.id.queue_lock: + boolean locked = !UserPreferences.isQueueLocked(); + if(locked) { + listView.setDragEnabled(false); + } else { + listView.setDragEnabled(true); + } + UserPreferences.setQueueLocked(locked); + getActivity().supportInvalidateOptionsMenu(); + listAdapter.setLocked(locked); + return true; case R.id.refresh_item: List feeds = ((MainActivity) getActivity()).getFeeds(); if (feeds != null) { @@ -330,6 +346,12 @@ public class QueueFragment extends Fragment { progLoading = (ProgressBar) root.findViewById(R.id.progLoading); listView.setEmptyView(txtvEmpty); + if(UserPreferences.isQueueLocked()) { + listView.setDragEnabled(false); + } else { + listView.setDragEnabled(true); + } + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java index b78bfd01a..b2e3f8968 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java @@ -1,11 +1,14 @@ package de.danoeh.antennapod.menuhandler; +import android.content.Context; +import android.content.res.TypedArray; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; import de.danoeh.antennapod.core.R; +import de.danoeh.antennapod.core.preferences.UserPreferences; /** * Utilities for menu items @@ -19,4 +22,17 @@ public class MenuItemUtils extends de.danoeh.antennapod.core.menuhandler.MenuIte return item; } + public static void refreshLockItem(Context context, Menu menu, MenuItem queueLock) { + queueLock = menu.findItem(de.danoeh.antennapod.R.id.queue_lock); + int[] lockIcons = new int[] { de.danoeh.antennapod.R.attr.ic_lock_open, de.danoeh.antennapod.R.attr.ic_lock_closed }; + TypedArray ta = context.obtainStyledAttributes(lockIcons); + if (UserPreferences.isQueueLocked()) { + queueLock.setTitle(de.danoeh.antennapod.R.string.unlock_queue); + queueLock.setIcon(ta.getDrawable(1)); + } else { + queueLock.setTitle(de.danoeh.antennapod.R.string.lock_queue); + queueLock.setIcon(ta.getDrawable(0)); + } + } + } -- cgit v1.2.3 From a92220f8dbb3339ea101abeac0cf77bd87d9b544 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 3 May 2015 15:07:25 +0200 Subject: Show lock icon always, use correct search view text color on older devices --- .../java/de/danoeh/antennapod/fragment/QueueFragment.java | 1 - .../de/danoeh/antennapod/menuhandler/MenuItemUtils.java | 14 +++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 6f81177db..4263fbfad 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -4,7 +4,6 @@ import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; -import android.content.res.TypedArray; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java index b2e3f8968..edefb7d46 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java @@ -1,7 +1,9 @@ package de.danoeh.antennapod.menuhandler; import android.content.Context; +import android.content.res.Resources; import android.content.res.TypedArray; +import android.os.Build; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.view.Menu; @@ -17,8 +19,18 @@ public class MenuItemUtils extends de.danoeh.antennapod.core.menuhandler.MenuIte public static MenuItem addSearchItem(Menu menu, SearchView searchView) { MenuItem item = menu.add(Menu.NONE, R.id.search_item, Menu.NONE, R.string.search_label); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); + MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); MenuItemCompat.setActionView(item, searchView); + + if(Build.VERSION.SDK_INT < 14) { + SearchView.SearchAutoComplete textField = (SearchView.SearchAutoComplete) searchView.findViewById(de.danoeh.antennapod.R.id.search_src_text); + if(UserPreferences.getTheme() == de.danoeh.antennapod.R.style.Theme_AntennaPod_Dark) { + textField.setTextColor(Resources.getSystem().getColor(android.R.color.white)); + } else { + textField.setTextColor(Resources.getSystem().getColor(android.R.color.black)); + } + } + return item; } -- cgit v1.2.3 From fd7cdd3c715565b621cb7ba2f485dd1bad696044 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 3 May 2015 18:58:48 +0200 Subject: Show confirmation dialog when downloading over mobile data connection is disabled --- .../adapter/DefaultActionButtonCallback.java | 69 +++++++++++++++++++--- 1 file changed, 61 insertions(+), 8 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java index d3843934a..20f07f71c 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java @@ -1,6 +1,8 @@ package de.danoeh.antennapod.adapter; +import android.app.AlertDialog; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.widget.Toast; @@ -10,22 +12,31 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.NetworkUtils; /** * Default implementation of an ActionButtonCallback */ public class DefaultActionButtonCallback implements ActionButtonCallback { + private static final String TAG = "DefaultActionButtonCallback"; private final Context context; + private final int TEN_MINUTES_IN_MILLIS = 60 * 1000 * 10; + + // remember timestamp when user allowed downloading via mobile connection + private static long allowMobileDownloadsTimestamp; + private static long onlyAddToQueueTimeStamp; + public DefaultActionButtonCallback(Context context) { Validate.notNull(context); this.context = context; @@ -34,17 +45,26 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { @Override public void onActionButtonPressed(final FeedItem item) { - if (item.hasMedia()) { final FeedMedia media = item.getMedia(); boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media); if (!isDownloading && !media.isDownloaded()) { - try { - DBTasks.downloadFeedItems(context, item); - Toast.makeText(context, R.string.status_downloading_label, Toast.LENGTH_SHORT).show(); - } catch (DownloadRequestException e) { - e.printStackTrace(); - DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage()); + if (UserPreferences.isAllowMobileUpdate() || NetworkUtils.connectedToWifi(context) || + (System.currentTimeMillis()-allowMobileDownloadsTimestamp) < TEN_MINUTES_IN_MILLIS) { + try { + DBTasks.downloadFeedItems(context, item); + Toast.makeText(context, R.string.status_downloading_label, Toast.LENGTH_SHORT).show(); + } catch (DownloadRequestException e) { + e.printStackTrace(); + DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage()); + } + } else { + if(System.currentTimeMillis() - onlyAddToQueueTimeStamp < TEN_MINUTES_IN_MILLIS) { + DBWriter.addQueueItem(context, item.getId()); + Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show(); + } else { + confirmMobileDownload(context, item); + } } } else if (isDownloading) { DownloadRequester.getInstance().cancelDownload(context, media); @@ -79,4 +99,37 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { } } } + + private void confirmMobileDownload(final Context context, final FeedItem item) { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder + .setTitle(R.string.confirm_mobile_download_dialog_title) + .setMessage(context.getText(R.string.confirm_mobile_download_dialog_message)) + .setPositiveButton(R.string.confirm_mobile_download_dialog_enable_temporarily, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + allowMobileDownloadsTimestamp = System.currentTimeMillis(); + try { + DBTasks.downloadFeedItems(context, item); + Toast.makeText(context, R.string.status_downloading_label, Toast.LENGTH_SHORT).show(); + } catch (DownloadRequestException e) { + e.printStackTrace(); + DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage()); + } + } + }) + .setNeutralButton(R.string.confirm_mobile_download_dialog_only_add_to_queue, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + onlyAddToQueueTimeStamp = System.currentTimeMillis(); + DBWriter.addQueueItem(context, item.getId()); + Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show(); + } + }) + .setNegativeButton(R.string.cancel_label, null) + .create() + .show(); + } } -- cgit v1.2.3 From a766977e6dcb60a537922118185f723ef3e873c6 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 3 May 2015 21:19:20 +0200 Subject: Check if items are already in the queue --- .../antennapod/adapter/ActionButtonUtils.java | 40 ++++++++++++---- .../adapter/DefaultActionButtonCallback.java | 55 +++++++++++++--------- 2 files changed, 65 insertions(+), 30 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonUtils.java b/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonUtils.java index 8d3e73429..8e347a819 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/ActionButtonUtils.java @@ -10,7 +10,9 @@ import org.apache.commons.lang3.Validate; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.LongList; /** * Utility methods for the action button that is displayed on the right hand side @@ -26,9 +28,21 @@ public class ActionButtonUtils { Validate.notNull(context); this.context = context; - drawables = context.obtainStyledAttributes(new int[]{ - R.attr.av_play, R.attr.navigation_cancel, R.attr.av_download, R.attr.av_pause, R.attr.navigation_accept}); - labels = new int[]{R.string.play_label, R.string.cancel_download_label, R.string.download_label, R.string.mark_read_label}; + drawables = context.obtainStyledAttributes(new int[] { + R.attr.av_play, + R.attr.navigation_cancel, + R.attr.av_download, + R.attr.av_pause, + R.attr.navigation_accept, + R.attr.content_new + }); + labels = new int[] { + R.string.play_label, + R.string.cancel_download_label, + R.string.download_label, + R.string.mark_read_label, + R.string.add_to_queue_label + }; } /** @@ -50,18 +64,26 @@ public class ActionButtonUtils { butSecondary.setContentDescription(context.getString(labels[1])); } else { // item is not downloaded and not being downloaded - butSecondary.setVisibility(View.VISIBLE); - butSecondary.setImageDrawable(drawables.getDrawable(2)); - butSecondary.setContentDescription(context.getString(labels[2])); + LongList queueIds = DBReader.getQueueIDList(context); + if(DefaultActionButtonCallback.userAllowedMobileDownloads() || + !DefaultActionButtonCallback.userChoseAddToQueue() || queueIds.contains(item.getId())) { + butSecondary.setVisibility(View.VISIBLE); + butSecondary.setImageDrawable(drawables.getDrawable(2)); + butSecondary.setContentDescription(context.getString(labels[2])); + } else { + // mobile download not allowed yet, item is not in queue and user chose add to queue + butSecondary.setVisibility(View.VISIBLE); + butSecondary.setImageDrawable(drawables.getDrawable(5)); + butSecondary.setContentDescription(context.getString(labels[4])); + } } } else { - // item is not being downloaded + // item is downloaded butSecondary.setVisibility(View.VISIBLE); if (media.isCurrentlyPlaying()) { butSecondary.setImageDrawable(drawables.getDrawable(3)); } else { - butSecondary - .setImageDrawable(drawables.getDrawable(0)); + butSecondary.setImageDrawable(drawables.getDrawable(0)); } butSecondary.setContentDescription(context.getString(labels[0])); } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java index 20f07f71c..6df18e759 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java @@ -14,12 +14,13 @@ import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; -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.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.NetworkUtils; /** @@ -31,7 +32,7 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { private final Context context; - private final int TEN_MINUTES_IN_MILLIS = 60 * 1000 * 10; + private static final int TEN_MINUTES_IN_MILLIS = 60 * 1000 * 10; // remember timestamp when user allowed downloading via mobile connection private static long allowMobileDownloadsTimestamp; @@ -42,6 +43,14 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { this.context = context; } + public static boolean userAllowedMobileDownloads() { + return System.currentTimeMillis() - allowMobileDownloadsTimestamp < TEN_MINUTES_IN_MILLIS; + } + + public static boolean userChoseAddToQueue() { + return System.currentTimeMillis() - onlyAddToQueueTimeStamp < TEN_MINUTES_IN_MILLIS; + } + @Override public void onActionButtonPressed(final FeedItem item) { @@ -49,8 +58,8 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { final FeedMedia media = item.getMedia(); boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media); if (!isDownloading && !media.isDownloaded()) { - if (UserPreferences.isAllowMobileUpdate() || NetworkUtils.connectedToWifi(context) || - (System.currentTimeMillis()-allowMobileDownloadsTimestamp) < TEN_MINUTES_IN_MILLIS) { + LongList queueIds = DBReader.getQueueIDList(context); + if (NetworkUtils.isDownloadAllowed(context) || userAllowedMobileDownloads()) { try { DBTasks.downloadFeedItems(context, item); Toast.makeText(context, R.string.status_downloading_label, Toast.LENGTH_SHORT).show(); @@ -58,13 +67,11 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { e.printStackTrace(); DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage()); } + } else if(userChoseAddToQueue() && !queueIds.contains(item.getId())) { + DBWriter.addQueueItem(context, item.getId()); + Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show(); } else { - if(System.currentTimeMillis() - onlyAddToQueueTimeStamp < TEN_MINUTES_IN_MILLIS) { - DBWriter.addQueueItem(context, item.getId()); - Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show(); - } else { - confirmMobileDownload(context, item); - } + confirmMobileDownload(context, item); } } else if (isDownloading) { DownloadRequester.getInstance().cancelDownload(context, media); @@ -118,17 +125,23 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { DownloadRequestErrorDialogCreator.newRequestErrorDialog(context, e.getMessage()); } } - }) - .setNeutralButton(R.string.confirm_mobile_download_dialog_only_add_to_queue, - new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - onlyAddToQueueTimeStamp = System.currentTimeMillis(); - DBWriter.addQueueItem(context, item.getId()); - Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show(); - } - }) - .setNegativeButton(R.string.cancel_label, null) + }); + LongList queueIds = DBReader.getQueueIDList(context); + if(!queueIds.contains(item.getId())) { + builder.setNeutralButton(R.string.confirm_mobile_download_dialog_only_add_to_queue, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + onlyAddToQueueTimeStamp = System.currentTimeMillis(); + DBWriter.addQueueItem(context, item.getId()); + Toast.makeText(context, R.string.added_to_queue_label, Toast.LENGTH_SHORT).show(); + } + }) + .setMessage(context.getText(R.string.confirm_mobile_download_dialog_message_not_in_queue)); + } else { + builder.setMessage(context.getText(R.string.confirm_mobile_download_dialog_message)); + } + builder.setNegativeButton(R.string.cancel_label, null) .create() .show(); } -- cgit v1.2.3 From c8259daaeee9870bc806c5d8b4bed669e68d061c Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Mon, 4 May 2015 23:47:34 +0200 Subject: Cancel auto download --- .../adapter/DefaultActionButtonCallback.java | 11 +++++++++-- .../antennapod/config/StorageCallbacksImpl.java | 12 +++++++++++- .../fragment/RunningDownloadsFragment.java | 22 +++++++++++++++++++--- 3 files changed, 39 insertions(+), 6 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java index 6df18e759..e39b9e684 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java @@ -12,9 +12,11 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.feed.FeedItem; 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.gpoddernet.model.GpodnetEpisodeAction; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; -import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; @@ -75,7 +77,12 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { } } else if (isDownloading) { DownloadRequester.getInstance().cancelDownload(context, media); - Toast.makeText(context, R.string.download_cancelled_msg, Toast.LENGTH_SHORT).show(); + if(UserPreferences.isEnableAutodownload()) { + DBWriter.setFeedItemAutoDownload(context, media.getItem(), false); + Toast.makeText(context, R.string.download_cancelled_autodownload_enabled_msg, Toast.LENGTH_LONG).show(); + } else { + Toast.makeText(context, R.string.download_cancelled_msg, Toast.LENGTH_LONG).show(); + } } else { // media is downloaded if (item.hasMedia() && item.getMedia().isCurrentlyPlaying()) { context.sendBroadcast(new Intent(PlaybackService.ACTION_PAUSE_PLAY_CURRENT_EPISODE)); diff --git a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java index 10a3c1b32..de9be4d58 100644 --- a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java +++ b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java @@ -13,7 +13,7 @@ public class StorageCallbacksImpl implements StorageCallbacks { @Override public int getDatabaseVersion() { - return 14; + return 15; } @Override @@ -124,5 +124,15 @@ public class StorageCallbacksImpl implements StorageCallbacks { PodDBAdapter.KEY_LINK, PodDBAdapter.KEY_CHAPTER_TYPE)); } + if(oldVersion <= 14) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS + + " ADD COLUMN " + PodDBAdapter.KEY_AUTO_DOWNLOAD + " INTEGER"); + db.execSQL("UPDATE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS + + " SET " + PodDBAdapter.KEY_AUTO_DOWNLOAD + " = " + + "(SELECT " + PodDBAdapter.KEY_AUTO_DOWNLOAD + + " FROM " + PodDBAdapter.TABLE_NAME_FEEDS + + " WHERE " + PodDBAdapter.TABLE_NAME_FEEDS + "." + PodDBAdapter.KEY_ID + + " = " + PodDBAdapter.TABLE_NAME_FEED_ITEMS + "." + PodDBAdapter.KEY_FEED + ")"); + } } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java index f578d4338..06a8bc92b 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java @@ -5,15 +5,21 @@ import android.os.Handler; import android.support.v4.app.ListFragment; import android.view.View; import android.widget.ListView; +import android.widget.Toast; + +import java.util.List; import de.danoeh.antennapod.R; import de.danoeh.antennapod.adapter.DownloadlistAdapter; import de.danoeh.antennapod.core.asynctask.DownloadObserver; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.service.download.DownloadRequest; import de.danoeh.antennapod.core.service.download.Downloader; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; -import java.util.List; - /** * Displays all running downloads and provides actions to cancel them */ @@ -73,7 +79,17 @@ public class RunningDownloadsFragment extends ListFragment { @Override public void onSecondaryActionClick(Downloader downloader) { - DownloadRequester.getInstance().cancelDownload(getActivity(), downloader.getDownloadRequest().getSource()); + DownloadRequest downloadRequest = downloader.getDownloadRequest(); + DownloadRequester.getInstance().cancelDownload(getActivity(), downloadRequest.getSource()); + + if(downloadRequest.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA && + UserPreferences.isEnableAutodownload()) { + FeedMedia media = DBReader.getFeedMedia(getActivity(), downloadRequest.getFeedfileId()); + DBWriter.setFeedItemAutoDownload(getActivity(), media.getItem(), false); + Toast.makeText(getActivity(), R.string.download_cancelled_autodownload_enabled_msg, Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(getActivity(), R.string.download_cancelled_msg, Toast.LENGTH_SHORT).show(); + } } }; } -- cgit v1.2.3 From 94569cf995f2fb6c7082578321873e42ffad04df Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 9 May 2015 00:46:02 +0200 Subject: CANCELLED --- .../de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java | 4 ++-- .../java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java index e39b9e684..3d233817b 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java @@ -79,9 +79,9 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { DownloadRequester.getInstance().cancelDownload(context, media); if(UserPreferences.isEnableAutodownload()) { DBWriter.setFeedItemAutoDownload(context, media.getItem(), false); - Toast.makeText(context, R.string.download_cancelled_autodownload_enabled_msg, Toast.LENGTH_LONG).show(); + Toast.makeText(context, R.string.download_canceled_autodownload_enabled_msg, Toast.LENGTH_LONG).show(); } else { - Toast.makeText(context, R.string.download_cancelled_msg, Toast.LENGTH_LONG).show(); + Toast.makeText(context, R.string.download_canceled_msg, Toast.LENGTH_LONG).show(); } } else { // media is downloaded if (item.hasMedia() && item.getMedia().isCurrentlyPlaying()) { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java index 06a8bc92b..b1b61f74b 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/RunningDownloadsFragment.java @@ -86,9 +86,9 @@ public class RunningDownloadsFragment extends ListFragment { UserPreferences.isEnableAutodownload()) { FeedMedia media = DBReader.getFeedMedia(getActivity(), downloadRequest.getFeedfileId()); DBWriter.setFeedItemAutoDownload(getActivity(), media.getItem(), false); - Toast.makeText(getActivity(), R.string.download_cancelled_autodownload_enabled_msg, Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), R.string.download_canceled_autodownload_enabled_msg, Toast.LENGTH_SHORT).show(); } else { - Toast.makeText(getActivity(), R.string.download_cancelled_msg, Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), R.string.download_canceled_msg, Toast.LENGTH_SHORT).show(); } } }; -- cgit v1.2.3 From 9ec0d735c86c62c2d2a65229c1f1bf8e0e44dec5 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 26 Apr 2015 13:37:27 +0200 Subject: Add feed item filter --- .../antennapod/adapter/FeedItemlistAdapter.java | 13 ++++-- .../antennapod/config/StorageCallbacksImpl.java | 2 + .../antennapod/fragment/ItemlistFragment.java | 35 +++++++++++++++- .../menuhandler/FeedItemMenuHandler.java | 2 +- .../antennapod/menuhandler/FeedMenuHandler.java | 47 ++++++++++++++++++++++ 5 files changed, 93 insertions(+), 6 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index d56bfc587..74fd4d9c0 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -7,9 +7,14 @@ import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; -import android.widget.*; +import android.widget.Adapter; +import android.widget.BaseAdapter; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.MediaType; @@ -211,8 +216,8 @@ public class FeedItemlistAdapter extends BaseAdapter { notifyDataSetChanged(); } - public static interface ItemAccess { - public boolean isInQueue(FeedItem item); + public interface ItemAccess { + boolean isInQueue(FeedItem item); int getItemDownloadProgressPercent(FeedItem item); diff --git a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java index de9be4d58..2c5bc9cff 100644 --- a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java +++ b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java @@ -133,6 +133,8 @@ public class StorageCallbacksImpl implements StorageCallbacks { + " FROM " + PodDBAdapter.TABLE_NAME_FEEDS + " WHERE " + PodDBAdapter.TABLE_NAME_FEEDS + "." + PodDBAdapter.KEY_ID + " = " + PodDBAdapter.TABLE_NAME_FEED_ITEMS + "." + PodDBAdapter.KEY_FEED + ")"); + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + + " ADD COLUMN " + PodDBAdapter.KEY_HIDE + " TEXT"); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index f872284a4..b16de1959 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -24,6 +24,7 @@ import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; +import com.joanzapata.android.iconify.Iconify; import com.squareup.picasso.Picasso; import org.apache.commons.lang3.Validate; @@ -42,7 +43,9 @@ import de.danoeh.antennapod.core.dialog.ConfirmationDialog; import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedEvent; import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedItemFilter; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.QueueEvent; import de.danoeh.antennapod.core.service.download.DownloadService; @@ -55,7 +58,6 @@ import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.gui.MoreContentListFooterUtil; import de.danoeh.antennapod.menuhandler.FeedMenuHandler; import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; import de.greenrobot.event.EventBus; /** @@ -89,6 +91,8 @@ public class ItemlistFragment extends ListFragment { private boolean isUpdatingFeed; + private TextView txtvInformation; + /** * Creates new ItemlistFragment which shows the Feeditems of a specific * feed. Sets 'showFeedtitle' to false @@ -291,6 +295,13 @@ public class ItemlistFragment extends ListFragment { startItemLoader(); } + public void onEvent(FeedEvent event) { + Log.d(TAG, "onEvent(" + event + ")"); + if(event.feedId == feedID) { + startItemLoader(); + } + } + private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() { @Override @@ -330,6 +341,7 @@ public class ItemlistFragment extends ListFragment { downloadObserver = new DownloadObserver(getActivity(), new Handler(), downloadObserverCallback); downloadObserver.onResume(); } + refreshHeaderView(); setListShown(true); adapter.notifyDataSetChanged(); @@ -343,6 +355,22 @@ public class ItemlistFragment extends ListFragment { } + private void refreshHeaderView() { + if(feed.getItemFilter() != null) { + FeedItemFilter filter = feed.getItemFilter(); + if(filter.getValues().length > 0) { + txtvInformation.setText("{fa-info-circle} " + this.getString(R.string.filtered_label)); + Iconify.addIcons(txtvInformation); + txtvInformation.setVisibility(View.VISIBLE); + } else { + txtvInformation.setVisibility(View.GONE); + } + } else { + txtvInformation.setVisibility(View.GONE); + } + } + + private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() { @Override public void onContentChanged() { @@ -376,6 +404,7 @@ public class ItemlistFragment extends ListFragment { ImageView imgvBackground = (ImageView) header.findViewById(R.id.imgvBackground); ImageView imgvCover = (ImageView) header.findViewById(R.id.imgvCover); ImageButton butShowInfo = (ImageButton) header.findViewById(R.id.butShowInfo); + txtvInformation = (TextView) header.findViewById(R.id.txtvInformation); txtvTitle.setText(feed.getTitle()); txtvAuthor.setText(feed.getAuthor()); @@ -488,6 +517,10 @@ public class ItemlistFragment extends ListFragment { Context context = getActivity(); if (context != null) { Feed feed = DBReader.getFeed(context, feedID); + if(feed.getItemFilter() != null) { + FeedItemFilter filter = feed.getItemFilter(); + feed.setItems(filter.filter(context, feed.getItems())); + } LongList queue = DBReader.getQueueIDList(context); return Pair.create(feed, queue); } else { diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index ebb0a9e58..2b1770ee1 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -23,10 +23,10 @@ import de.danoeh.antennapod.core.util.ShareUtils; * Handles interactions with the FeedItemMenu. */ public class FeedItemMenuHandler { + private static final String TAG = "FeedItemMenuHandler"; private FeedItemMenuHandler() { - } /** diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java index efb4adb01..6947c73c9 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java @@ -1,5 +1,6 @@ package de.danoeh.antennapod.menuhandler; +import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -9,6 +10,10 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.dialog.ConfirmationDialog; @@ -62,6 +67,9 @@ public class FeedMenuHandler { case R.id.refresh_complete_item: DBTasks.refreshCompleteFeed(context, selectedFeed); break; + case R.id.hide_items: + showHideDialog(context, selectedFeed); + break; case R.id.mark_all_read_item: ConfirmationDialog conDialog = new ConfirmationDialog(context, R.string.mark_all_read_label, @@ -94,4 +102,43 @@ public class FeedMenuHandler { } return true; } + + private static void showHideDialog(final Context context, final Feed feed) { + + final String[] items = context.getResources().getStringArray(R.array.episode_hide_options); + final String[] values = context.getResources().getStringArray(R.array.episode_hide_values); + final boolean[] checkedItems = new boolean[items.length]; + + final List hidden = new ArrayList(Arrays.asList(feed.getItemFilter().getValues())); + for(int i=0; i < values.length; i++) { + String value = values[i]; + if(hidden.contains(value)) { + checkedItems[i] = true; + } + } + + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(R.string.hide_episodes_title); + builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int which, boolean isChecked) { + if (isChecked) { + hidden.add(values[which]); + } else { + hidden.remove(values[which]); + } + } + }); + builder.setPositiveButton(R.string.confirm_label, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + feed.setFeedItemsFilter(hidden.toArray(new String[hidden.size()])); + DBWriter.setFeedItemsFilter(context, feed.getId(), hidden); + } + }); + builder.setNegativeButton(R.string.cancel_label, null); + builder.create().show(); + + } + } -- cgit v1.2.3 From 08eca534446e48f31a6eb727cf855dc68d8c31c5 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Sun, 10 May 2015 18:03:46 -0400 Subject: fixed text field color in iTunes search for 2.3 devices --- .../java/de/danoeh/antennapod/fragment/ItunesSearchFragment.java | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItunesSearchFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItunesSearchFragment.java index c14b0cc6e..16789d694 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItunesSearchFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItunesSearchFragment.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.fragment; import android.content.Intent; +import android.content.res.Resources; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; @@ -28,6 +29,7 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.DefaultOnlineFeedViewActivity; import de.danoeh.antennapod.activity.OnlineFeedViewActivity; import de.danoeh.antennapod.adapter.itunes.ItunesAdapter; +import de.danoeh.antennapod.core.preferences.UserPreferences; import static de.danoeh.antennapod.adapter.itunes.ItunesAdapter.*; @@ -124,6 +126,13 @@ public class ItunesSearchFragment extends Fragment { } }); + SearchView.SearchAutoComplete textField = (SearchView.SearchAutoComplete) searchView.findViewById(de.danoeh.antennapod.R.id.search_src_text); + if(UserPreferences.getTheme() == de.danoeh.antennapod.R.style.Theme_AntennaPod_Dark) { + textField.setTextColor(Resources.getSystem().getColor(android.R.color.white)); + } else { + textField.setTextColor(Resources.getSystem().getColor(android.R.color.black)); + } + return view; } -- cgit v1.2.3 From 1d25137edd8956b07c354efa36413b45bf18a091 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Tue, 12 May 2015 17:42:41 +0200 Subject: Refactor --- .../gpoddernet/GpodnetAuthenticationActivity.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 d7b069b19..511115b3c 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 @@ -11,7 +11,20 @@ import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; -import android.widget.*; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.ViewFlipper; + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; @@ -22,11 +35,6 @@ import de.danoeh.antennapod.core.preferences.GpodnetPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.GpodnetSyncService; -import java.security.SecureRandom; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.atomic.AtomicReference; - /** * Guides the user through the authentication process * Step 1: Request username and password from user -- cgit v1.2.3 From 0f293a4d786482aeb59e8dc21708488c1a52f376 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Tue, 12 May 2015 19:02:39 +0200 Subject: Fix ActionBar SearchView --- .../antennapod/fragment/AllEpisodesFragment.java | 6 ++++-- .../antennapod/fragment/ItemlistFragment.java | 6 ++++-- .../danoeh/antennapod/fragment/QueueFragment.java | 10 ++++----- .../fragment/gpodnet/GpodnetMainFragment.java | 4 ++-- .../fragment/gpodnet/PodcastListFragment.java | 13 ++++++++---- .../fragment/gpodnet/SearchListFragment.java | 9 ++++++-- .../fragment/gpodnet/TagListFragment.java | 9 ++++++-- .../antennapod/menuhandler/MenuItemUtils.java | 24 ++++++++-------------- 8 files changed, 47 insertions(+), 34 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 6cd78da50..6787f28b5 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -8,6 +8,7 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; +import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.view.LayoutInflater; import android.view.Menu; @@ -197,8 +198,9 @@ public class AllEpisodesFragment extends Fragment { if (itemsLoaded) { inflater.inflate(R.menu.new_episodes, menu); - final SearchView sv = new SearchView(getActivity()); - MenuItemUtils.addSearchItem(menu, sv); + MenuItem searchItem = menu.findItem(R.id.action_search); + final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem); + MenuItemUtils.adjustTextColor(getActivity(), sv); sv.setQueryHint(getString(R.string.search_hint)); sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index b16de1959..fb3c95e7d 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -10,6 +10,7 @@ import android.os.Bundle; import android.os.Handler; import android.support.v4.app.ListFragment; import android.support.v4.util.Pair; +import android.support.v4.view.MenuItemCompat; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.SearchView; import android.util.Log; @@ -187,8 +188,9 @@ public class ItemlistFragment extends ListFragment { if (itemsLoaded) { FeedMenuHandler.onCreateOptionsMenu(inflater, menu); - final SearchView sv = new SearchView(getActivity()); - MenuItemUtils.addSearchItem(menu, sv); + MenuItem searchItem = menu.findItem(R.id.action_search); + final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem); + MenuItemUtils.adjustTextColor(getActivity(), sv); sv.setQueryHint(getString(R.string.search_hint)); sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 4263fbfad..182d57771 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -8,6 +8,7 @@ import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; +import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.util.Log; import android.view.ContextMenu; @@ -66,8 +67,6 @@ public class QueueFragment extends Fragment { private TextView txtvEmpty; private ProgressBar progLoading; - private MenuItem queueLock; - private UndoBarController undoBarController; private List queue; @@ -206,8 +205,9 @@ public class QueueFragment extends Fragment { if (itemsLoaded) { inflater.inflate(R.menu.queue, menu); - final SearchView sv = new SearchView(getActivity()); - MenuItemUtils.addSearchItem(menu, sv); + MenuItem searchItem = menu.findItem(R.id.action_search); + final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem); + MenuItemUtils.adjustTextColor(getActivity(), sv); sv.setQueryHint(getString(R.string.search_hint)); sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override @@ -223,7 +223,7 @@ public class QueueFragment extends Fragment { } }); - MenuItemUtils.refreshLockItem(getActivity(), menu, queueLock); + MenuItemUtils.refreshLockItem(getActivity(), menu); isUpdatingFeeds = MenuItemUtils.updateRefreshMenuItem(menu, R.id.refresh_item, updateRefreshMenuItemChecker); } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java index 45b2403c8..55d4b940f 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/GpodnetMainFragment.java @@ -31,8 +31,8 @@ public class GpodnetMainFragment extends Fragment { private static final int NUM_PAGES = 2; - private static final int POS_TAGS = 0; - private static final int POS_TOPLIST = 1; + private static final int POS_TOPLIST = 0; + private static final int POS_TAGS = 1; private static final int POS_SUGGESTIONS = 2; Resources resources; diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java index c87ed777c..6139a4901 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/PodcastListFragment.java @@ -5,10 +5,13 @@ import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; +import android.support.v4.view.MenuItemCompat; +import android.support.v7.widget.SearchView; 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.AdapterView; @@ -19,7 +22,6 @@ import android.widget.TextView; import java.util.List; -import de.danoeh.antennapod.BuildConfig; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.DefaultOnlineFeedViewActivity; import de.danoeh.antennapod.activity.MainActivity; @@ -34,6 +36,7 @@ import de.danoeh.antennapod.menuhandler.MenuItemUtils; * Displays a list of GPodnetPodcast-Objects in a GridView */ public abstract class PodcastListFragment extends Fragment { + private static final String TAG = "PodcastListFragment"; private GridView gridView; @@ -50,8 +53,10 @@ public abstract class PodcastListFragment extends Fragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - final android.support.v7.widget.SearchView sv = new android.support.v7.widget.SearchView(getActivity()); - MenuItemUtils.addSearchItem(menu, sv); + inflater.inflate(R.menu.gpodder_podcasts, menu); + MenuItem searchItem = menu.findItem(R.id.action_search); + final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem); + MenuItemUtils.adjustTextColor(getActivity(), sv); sv.setQueryHint(getString(R.string.gpodnet_search_hint)); sv.setOnQueryTextListener(new android.support.v7.widget.SearchView.OnQueryTextListener() { @Override @@ -95,7 +100,7 @@ public abstract class PodcastListFragment extends Fragment { } protected void onPodcastSelected(GpodnetPodcast selection) { - if (BuildConfig.DEBUG) Log.d(TAG, "Selected podcast: " + selection.toString()); + Log.d(TAG, "Selected podcast: " + selection.toString()); Intent intent = new Intent(getActivity(), DefaultOnlineFeedViewActivity.class); intent.putExtra(OnlineFeedViewActivity.ARG_FEEDURL, selection.getUrl()); intent.putExtra(DefaultOnlineFeedViewActivity.ARG_TITLE, getString(R.string.gpodnet_main_label)); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java index 2295ddf41..613e06805 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/SearchListFragment.java @@ -1,9 +1,11 @@ package de.danoeh.antennapod.fragment.gpodnet; import android.os.Bundle; +import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuInflater; +import android.view.MenuItem; import org.apache.commons.lang3.Validate; @@ -44,8 +46,11 @@ public class SearchListFragment extends PodcastListFragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - final SearchView sv = new SearchView(getActivity()); - MenuItemUtils.addSearchItem(menu, sv); + super.onCreateOptionsMenu(menu, inflater); + // parent already inflated menu + MenuItem searchItem = menu.findItem(R.id.action_search); + final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem); + MenuItemUtils.adjustTextColor(getActivity(), sv); sv.setQueryHint(getString(R.string.gpodnet_search_hint)); sv.setQuery(query, false); sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java index 6dff496b2..5bd567a2f 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/gpodnet/TagListFragment.java @@ -5,9 +5,11 @@ import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.ListFragment; +import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.TextView; @@ -23,6 +25,7 @@ import de.danoeh.antennapod.core.gpoddernet.model.GpodnetTag; import de.danoeh.antennapod.menuhandler.MenuItemUtils; public class TagListFragment extends ListFragment { + private static final String TAG = "TagListFragment"; private static final int COUNT = 50; @@ -35,8 +38,10 @@ public class TagListFragment extends ListFragment { @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); - final SearchView sv = new SearchView(getActivity()); - MenuItemUtils.addSearchItem(menu, sv); + inflater.inflate(R.menu.gpodder_podcasts, menu); + MenuItem searchItem = menu.findItem(R.id.action_search); + final SearchView sv = (SearchView) MenuItemCompat.getActionView(searchItem); + MenuItemUtils.adjustTextColor(getActivity(), sv); sv.setQueryHint(getString(R.string.gpodnet_search_hint)); sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java index edefb7d46..cfc540fd6 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/MenuItemUtils.java @@ -1,15 +1,15 @@ package de.danoeh.antennapod.menuhandler; import android.content.Context; -import android.content.res.Resources; import android.content.res.TypedArray; +import android.graphics.Color; import android.os.Build; -import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; +import android.widget.EditText; -import de.danoeh.antennapod.core.R; +import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.preferences.UserPreferences; /** @@ -17,25 +17,19 @@ import de.danoeh.antennapod.core.preferences.UserPreferences; */ public class MenuItemUtils extends de.danoeh.antennapod.core.menuhandler.MenuItemUtils { - public static MenuItem addSearchItem(Menu menu, SearchView searchView) { - MenuItem item = menu.add(Menu.NONE, R.id.search_item, Menu.NONE, R.string.search_label); - MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); - MenuItemCompat.setActionView(item, searchView); - + public static void adjustTextColor(Context context, SearchView sv) { if(Build.VERSION.SDK_INT < 14) { - SearchView.SearchAutoComplete textField = (SearchView.SearchAutoComplete) searchView.findViewById(de.danoeh.antennapod.R.id.search_src_text); + EditText searchEditText = (EditText) sv.findViewById(R.id.search_src_text); if(UserPreferences.getTheme() == de.danoeh.antennapod.R.style.Theme_AntennaPod_Dark) { - textField.setTextColor(Resources.getSystem().getColor(android.R.color.white)); + searchEditText.setTextColor(Color.WHITE); } else { - textField.setTextColor(Resources.getSystem().getColor(android.R.color.black)); + searchEditText.setTextColor(Color.BLACK); } } - - return item; } - public static void refreshLockItem(Context context, Menu menu, MenuItem queueLock) { - queueLock = menu.findItem(de.danoeh.antennapod.R.id.queue_lock); + public static void refreshLockItem(Context context, Menu menu) { + final MenuItem queueLock = menu.findItem(de.danoeh.antennapod.R.id.queue_lock); int[] lockIcons = new int[] { de.danoeh.antennapod.R.attr.ic_lock_open, de.danoeh.antennapod.R.attr.ic_lock_closed }; TypedArray ta = context.obtainStyledAttributes(lockIcons); if (UserPreferences.isQueueLocked()) { -- cgit v1.2.3 From 69303a5915546b9fd46aeeb145b450b060b00a57 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Wed, 13 May 2015 10:29:52 +0200 Subject: Fix NPE and hide progress bar without media --- .../java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java index 1f98ec158..7ad40340d 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java @@ -122,7 +122,11 @@ public class NewEpisodesListAdapter extends BaseAdapter { holder.downloadProgress.setProgress(itemAccess.getItemDownloadProgressPercent(item)); } } + } else { + holder.downloadProgress.setVisibility(View.GONE); + holder.txtvDuration.setVisibility(View.GONE); } + if (itemAccess.isInQueue(item)) { holder.queueStatus.setVisibility(View.VISIBLE); } else { -- cgit v1.2.3 From 77272708550f89066766c4f9f12cb743b918e8fe Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Thu, 14 May 2015 17:44:54 +0200 Subject: Widget: Show correct played and total when current episode ends --- .../danoeh/antennapod/service/PlayerWidgetService.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java b/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java index 0d00823d3..1fe9e2cf9 100644 --- a/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java +++ b/app/src/main/java/de/danoeh/antennapod/service/PlayerWidgetService.java @@ -117,11 +117,12 @@ public class PlayerWidgetService extends Service { views.setTextViewText(R.id.txtvTitle, media.getEpisodeTitle()); + String progressString = getProgressString(media); + if (progressString != null) { + views.setTextViewText(R.id.txtvProgress, progressString); + } + if (status == PlayerStatus.PLAYING) { - String progressString = getProgressString(playbackService); - if (progressString != null) { - views.setTextViewText(R.id.txtvProgress, progressString); - } views.setImageViewResource(R.id.butPlay, R.drawable.ic_pause_white_24dp); if (Build.VERSION.SDK_INT >= 15) { views.setContentDescription(R.id.butPlay, getString(R.string.pause_label)); @@ -157,11 +158,10 @@ public class PlayerWidgetService extends Service { return PendingIntent.getBroadcast(this, 0, startingIntent, 0); } - private String getProgressString(PlaybackService ps) { - int position = ps.getCurrentPosition(); - int duration = ps.getDuration(); - if (position != PlaybackService.INVALID_TIME - && duration != PlaybackService.INVALID_TIME) { + private String getProgressString(Playable media) { + int position = media.getPosition(); + int duration = media.getDuration(); + if (position > 0 && duration > 0) { return Converter.getDurationStringLong(position) + " / " + Converter.getDurationStringLong(duration); } else { -- cgit v1.2.3 From e68ca0529bf996ef961fe85009092e9b27e1f699 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Wed, 22 Apr 2015 19:11:42 +0200 Subject: Mark as unplayed option Users can mark feed items as unplayed from feed item fragment and the queue --- .../danoeh/antennapod/fragment/QueueFragment.java | 34 ++++++++++++++++++++++ .../menuhandler/FeedItemMenuHandler.java | 4 +-- 2 files changed, 35 insertions(+), 3 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 182d57771..259d4a574 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -38,6 +38,8 @@ import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.QueueEvent; +import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction; +import de.danoeh.antennapod.core.preferences.GpodnetPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; @@ -307,6 +309,11 @@ public class QueueFragment extends Fragment { menu.findItem(R.id.move_to_top_item).setEnabled(!queue.isEmpty() && queue.get(0) != item); menu.findItem(R.id.move_to_bottom_item).setEnabled(!queue.isEmpty() && queue.get(queue.size() - 1) != item); + if(item.isRead()) { + menu.findItem(R.id.mark_read_item).setVisible(false); + } else { + menu.findItem(R.id.mark_unread_item).setVisible(false); + } } @Override @@ -323,6 +330,33 @@ public class QueueFragment extends Fragment { case R.id.move_to_top_item: DBWriter.moveQueueItemToTop(getActivity(), selectedItem.getId(), true); return true; + case R.id.mark_read_item: + DBWriter.markItemRead(getActivity(), selectedItem, true, false); + selectedItem.setRead(true); + if(GpodnetPreferences.loggedIn()) { + FeedMedia media = selectedItem.getMedia(); + GpodnetEpisodeAction actionPlay = new GpodnetEpisodeAction.Builder(selectedItem, GpodnetEpisodeAction.Action.PLAY) + .currentDeviceId() + .currentTimestamp() + .started(media.getDuration() / 1000) + .position(media.getDuration() / 1000) + .total(media.getDuration() / 1000) + .build(); + GpodnetPreferences.enqueueEpisodeAction(actionPlay); + } + return true; + case R.id.mark_unread_item: + DBWriter.markItemRead(getActivity(), selectedItem, false, false); + selectedItem.setRead(false); + if(GpodnetPreferences.loggedIn()) { + GpodnetEpisodeAction actionNew = new GpodnetEpisodeAction.Builder(selectedItem, GpodnetEpisodeAction.Action.NEW) + .currentDeviceId() + .currentTimestamp() + .build(); + GpodnetPreferences.enqueueEpisodeAction(actionNew); + } + startItemLoader(); + return true; case R.id.move_to_bottom_item: DBWriter.moveQueueItemToBottom(getActivity(), selectedItem.getId(), true); return true; diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index 2b1770ee1..453f984e8 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -5,7 +5,6 @@ import android.content.Intent; import android.net.Uri; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction; @@ -100,8 +99,7 @@ public class FeedItemMenuHandler { mi.setItemVisibility(R.id.share_link_item, false); } - if (!BuildConfig.DEBUG - || !(state == FeedItem.State.IN_PROGRESS || state == FeedItem.State.READ)) { + if (!(state == FeedItem.State.IN_PROGRESS || state == FeedItem.State.READ)) { mi.setItemVisibility(R.id.mark_unread_item, false); } if (!(state == FeedItem.State.NEW || state == FeedItem.State.IN_PROGRESS)) { -- cgit v1.2.3 From 406dab0a24543f4332b338f64689948cdc96c3bc Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sun, 26 Apr 2015 12:59:01 +0200 Subject: Show feed new items and refresh failure --- .../antennapod/adapter/FeedItemlistAdapter.java | 24 ++++------- .../danoeh/antennapod/adapter/NavListAdapter.java | 46 ++++++++++++++-------- .../antennapod/config/StorageCallbacksImpl.java | 7 ++++ .../antennapod/fragment/ItemlistFragment.java | 13 +++++- .../danoeh/antennapod/fragment/QueueFragment.java | 2 - .../antennapod/menuhandler/FeedMenuHandler.java | 4 +- 6 files changed, 57 insertions(+), 39 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index 74fd4d9c0..30e0b0b57 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -110,22 +110,8 @@ public class FeedItemlistAdapter extends BaseAdapter { } holder.title.setText(buffer.toString()); - FeedItem.State state = item.getState(); - switch (state) { - case PLAYING: - holder.statusUnread.setVisibility(View.INVISIBLE); - holder.episodeProgress.setVisibility(View.VISIBLE); - break; - case IN_PROGRESS: - holder.statusUnread.setVisibility(View.INVISIBLE); - holder.episodeProgress.setVisibility(View.VISIBLE); - break; - case NEW: - holder.statusUnread.setVisibility(View.VISIBLE); - break; - default: - holder.statusUnread.setVisibility(View.INVISIBLE); - break; + if(item.isRead()) { + holder.statusUnread.setVisibility(View.INVISIBLE); } holder.published.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_ABBREV_ALL)); @@ -153,7 +139,9 @@ public class FeedItemlistAdapter extends BaseAdapter { holder.episodeProgress.setProgress(((ItemAccess) itemAccess).getItemDownloadProgressPercent(item)); holder.published.setVisibility(View.GONE); } else { - holder.episodeProgress.setVisibility(View.GONE); + if(media.getPosition() == 0) { + holder.episodeProgress.setVisibility(View.GONE); + } holder.published.setVisibility(View.VISIBLE); } @@ -217,6 +205,7 @@ public class FeedItemlistAdapter extends BaseAdapter { } public interface ItemAccess { + boolean isInQueue(FeedItem item); int getItemDownloadProgressPercent(FeedItem item); @@ -224,6 +213,7 @@ public class FeedItemlistAdapter extends BaseAdapter { int getCount(); FeedItem getItem(int position); + } } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java index 907093ad6..6cde97148 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java @@ -10,6 +10,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.IconTextView; import android.widget.ImageView; import android.widget.TextView; @@ -26,6 +27,7 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.fragment.AddFeedFragment; import de.danoeh.antennapod.fragment.AllEpisodesFragment; import de.danoeh.antennapod.fragment.DownloadsFragment; @@ -190,9 +192,9 @@ public class NavListAdapter extends BaseAdapter convertView = inflater.inflate(R.layout.nav_listitem, parent, false); + holder.image = (ImageView) convertView.findViewById(R.id.imgvCover); holder.title = (TextView) convertView.findViewById(R.id.txtvTitle); holder.count = (TextView) convertView.findViewById(R.id.txtvCount); - holder.image = (ImageView) convertView.findViewById(R.id.imgvCover); convertView.setTag(holder); } else { holder = (NavHolder) convertView.getTag(); @@ -248,45 +250,57 @@ public class NavListAdapter extends BaseAdapter convertView = inflater.inflate(R.layout.nav_feedlistitem, parent, false); - holder.title = (TextView) convertView.findViewById(R.id.txtvTitle); holder.image = (ImageView) convertView.findViewById(R.id.imgvCover); + holder.title = (TextView) convertView.findViewById(R.id.txtvTitle); + holder.failure = (IconTextView) convertView.findViewById(R.id.itxtvFailure); + holder.count = (TextView) convertView.findViewById(R.id.txtvCount); convertView.setTag(holder); } else { holder = (FeedHolder) convertView.getTag(); } - holder.title.setText(feed.getTitle()); - Picasso.with(context) .load(feed.getImageUri()) .fit() .into(holder.image); + holder.title.setText(feed.getTitle()); + + int feedUnreadItems = DBReader.getNumberOfUnreadItems(context, feed.getId()); + if(feed.hasLastUpdateFailed()) { + holder.failure.setVisibility(View.VISIBLE); + } else { + holder.failure.setVisibility(View.GONE); + } + if(feedUnreadItems > 0) { + holder.count.setVisibility(View.VISIBLE); + holder.count.setText(String.valueOf(feedUnreadItems)); + holder.count.setTypeface(holder.title.getTypeface()); + } else { + holder.count.setVisibility(View.GONE); + } return convertView; } static class NavHolder { + ImageView image; TextView title; TextView count; - ImageView image; } static class FeedHolder { - TextView title; ImageView image; + TextView title; + IconTextView failure; + TextView count; } - public interface ItemAccess { - public int getCount(); - - public Feed getItem(int position); - - public int getSelectedItemIndex(); - - public int getQueueSize(); - - public int getNumberOfUnreadItems(); + int getCount(); + Feed getItem(int position); + int getSelectedItemIndex(); + int getQueueSize(); + int getNumberOfUnreadItems(); } } diff --git a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java index 2c5bc9cff..3445b109f 100644 --- a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java +++ b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java @@ -125,6 +125,7 @@ public class StorageCallbacksImpl implements StorageCallbacks { PodDBAdapter.KEY_CHAPTER_TYPE)); } if(oldVersion <= 14) { + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS + " ADD COLUMN " + PodDBAdapter.KEY_AUTO_DOWNLOAD + " INTEGER"); db.execSQL("UPDATE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS @@ -133,8 +134,14 @@ public class StorageCallbacksImpl implements StorageCallbacks { + " FROM " + PodDBAdapter.TABLE_NAME_FEEDS + " WHERE " + PodDBAdapter.TABLE_NAME_FEEDS + "." + PodDBAdapter.KEY_ID + " = " + PodDBAdapter.TABLE_NAME_FEED_ITEMS + "." + PodDBAdapter.KEY_FEED + ")"); + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + " ADD COLUMN " + PodDBAdapter.KEY_HIDE + " TEXT"); + + + db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + + " ADD COLUMN " + PodDBAdapter.KEY_LAST_UPDATE_FAILED + " INTEGER DEFAULT 0"); + } } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index fb3c95e7d..0f4ee9013 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -19,6 +19,7 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.widget.IconTextView; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListAdapter; @@ -91,6 +92,8 @@ public class ItemlistFragment extends ListFragment { private MoreContentListFooterUtil listFooter; private boolean isUpdatingFeed; + + private IconTextView txtvFailure; private TextView txtvInformation; @@ -309,7 +312,7 @@ public class ItemlistFragment extends ListFragment { @Override public void update(EventDistributor eventDistributor, Integer arg) { if ((EVENTS & arg) != 0) { - Log.d(TAG, "Received contentUpdate Intent."); + Log.d(TAG, "Received contentUpdate Intent. arg " + arg); if ((EventDistributor.DOWNLOAD_QUEUED & arg) != 0) { updateProgressBarVisibility(); } else { @@ -358,6 +361,11 @@ public class ItemlistFragment extends ListFragment { } private void refreshHeaderView() { + if(feed.hasLastUpdateFailed()) { + txtvFailure.setVisibility(View.VISIBLE); + } else { + txtvFailure.setVisibility(View.GONE); + } if(feed.getItemFilter() != null) { FeedItemFilter filter = feed.getItemFilter(); if(filter.getValues().length > 0) { @@ -368,6 +376,7 @@ public class ItemlistFragment extends ListFragment { txtvInformation.setVisibility(View.GONE); } } else { + txtvInformation.setVisibility(View.GONE); } } @@ -407,6 +416,7 @@ public class ItemlistFragment extends ListFragment { ImageView imgvCover = (ImageView) header.findViewById(R.id.imgvCover); ImageButton butShowInfo = (ImageButton) header.findViewById(R.id.butShowInfo); txtvInformation = (TextView) header.findViewById(R.id.txtvInformation); + txtvFailure = (IconTextView) header.findViewById(R.id.txtvFailure); txtvTitle.setText(feed.getTitle()); txtvAuthor.setText(feed.getAuthor()); @@ -437,6 +447,7 @@ public class ItemlistFragment extends ListFragment { }); } + private void setupFooterView() { if (getListView() == null || feed == null) { Log.e(TAG, "Unable to setup listview: listView = null or feed = null"); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 259d4a574..a17194dee 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -418,7 +418,6 @@ public class QueueFragment extends Fragment { Log.d(TAG, "remove(" + which + ")"); stopItemLoader(); FeedItem item = (FeedItem) listView.getAdapter().getItem(which); - DBWriter.markItemRead(getActivity(), item.getId(), true); DBWriter.removeQueueItem(getActivity(), item, true); } }); @@ -433,7 +432,6 @@ public class QueueFragment extends Fragment { if (token != null) { long itemId = token.getFeedItemId(); int position = token.getPosition(); - DBWriter.markItemRead(context, itemId, false); DBWriter.addQueueItemAt(context, itemId, position, false); } } diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java index 6947c73c9..af3368c41 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java @@ -15,7 +15,6 @@ import java.util.Arrays; import java.util.List; import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.BuildConfig; import de.danoeh.antennapod.core.dialog.ConfirmationDialog; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.storage.DBTasks; @@ -39,8 +38,7 @@ public class FeedMenuHandler { return true; } - if (BuildConfig.DEBUG) - Log.d(TAG, "Preparing options menu"); + Log.d(TAG, "Preparing options menu"); menu.findItem(R.id.mark_all_read_item).setVisible( selectedFeed.hasNewItems(true)); if (selectedFeed.getPaymentLink() != null && selectedFeed.getFlattrStatus().flattrable()) -- cgit v1.2.3 From 6f5d23c55743bd98800148c943880ce00d04441a Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 8 May 2015 16:02:02 +0200 Subject: Order feeds by number of unread items (descending) --- .../antennapod/activity/AudioplayerActivity.java | 5 ++++ .../danoeh/antennapod/activity/MainActivity.java | 5 ++++ .../danoeh/antennapod/adapter/NavListAdapter.java | 5 ++-- .../antennapod/fragment/AllEpisodesFragment.java | 33 ++++++++++++---------- 4 files changed, 31 insertions(+), 17 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 213afb57a..8f18235c7 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -706,5 +706,10 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc public int getNumberOfUnreadItems() { return (navDrawerData != null) ? navDrawerData.numUnreadItems : 0; } + + @Override + public int getNumberOfUnreadFeedItems(long feedId) { + return (navDrawerData != null) ? navDrawerData.numUnreadFeedItems.get(feedId) : 0; + } }; } 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 dfecfc837..842dbcc9d 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -511,6 +511,11 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity return (navDrawerData != null) ? navDrawerData.numUnreadItems : 0; } + @Override + public int getNumberOfUnreadFeedItems(long feedId) { + return (navDrawerData != null) ? navDrawerData.numUnreadFeedItems.get(feedId) : 0; + } + }; private void loadData() { diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java index 6cde97148..818f662cd 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java @@ -27,7 +27,6 @@ import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.fragment.AddFeedFragment; import de.danoeh.antennapod.fragment.AllEpisodesFragment; import de.danoeh.antennapod.fragment.DownloadsFragment; @@ -266,12 +265,13 @@ public class NavListAdapter extends BaseAdapter holder.title.setText(feed.getTitle()); - int feedUnreadItems = DBReader.getNumberOfUnreadItems(context, feed.getId()); + if(feed.hasLastUpdateFailed()) { holder.failure.setVisibility(View.VISIBLE); } else { holder.failure.setVisibility(View.GONE); } + int feedUnreadItems = itemAccess.getNumberOfUnreadFeedItems(feed.getId()); if(feedUnreadItems > 0) { holder.count.setVisibility(View.VISIBLE); holder.count.setText(String.valueOf(feedUnreadItems)); @@ -301,6 +301,7 @@ public class NavListAdapter extends BaseAdapter int getSelectedItemIndex(); int getQueueSize(); int getNumberOfUnreadItems(); + int getNumberOfUnreadFeedItems(long feedId); } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 6787f28b5..91e3df106 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -43,9 +43,7 @@ import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.LongList; -import de.danoeh.antennapod.core.util.QueueAccess; import de.danoeh.antennapod.menuhandler.MenuItemUtils; -import de.danoeh.antennapod.menuhandler.NavDrawerActivity; /** * Shows unread or recently published episodes @@ -70,14 +68,13 @@ public class AllEpisodesFragment extends Fragment { private TextView txtvEmpty; private ProgressBar progLoading; - private List unreadItems; - private List recentItems; + private List episodes; private LongList queueAccess; private List downloaderList; private boolean itemsLoaded = false; private boolean viewsCreated = false; - private boolean showOnlyNewEpisodes = false; + private final boolean showOnlyNewEpisodes; private AtomicReference activity = new AtomicReference(); @@ -225,7 +222,7 @@ public class AllEpisodesFragment extends Fragment { if (itemsLoaded) { MenuItem menuItem = menu.findItem(R.id.mark_all_read_item); if (menuItem != null) { - menuItem.setVisible(unreadItems != null && !unreadItems.isEmpty()); + menuItem.setVisible(episodes != null && !episodes.isEmpty()); } } } @@ -345,7 +342,7 @@ public class AllEpisodesFragment extends Fragment { @Override public int getCount() { if (itemsLoaded) { - return (showOnlyNewEpisodes) ? unreadItems.size() : recentItems.size(); + return episodes.size(); } return 0; } @@ -353,7 +350,7 @@ public class AllEpisodesFragment extends Fragment { @Override public FeedItem getItem(int position) { if (itemsLoaded) { - return (showOnlyNewEpisodes) ? unreadItems.get(position) : recentItems.get(position); + return episodes.get(position); } return null; } @@ -436,10 +433,17 @@ public class AllEpisodesFragment extends Fragment { protected Object[] doInBackground(Void... params) { Context context = activity.get(); if (context != null) { - return new Object[]{ - DBReader.getUnreadItemsList(context), - DBReader.getRecentlyPublishedEpisodes(context, RECENT_EPISODES_LIMIT), - DBReader.getQueueIDList(context)}; + if(showOnlyNewEpisodes) { + return new Object[] { + DBReader.getNewItemsList(context), + DBReader.getQueueIDList(context) + }; + } else { + return new Object[]{ + DBReader.getRecentlyPublishedEpisodes(context, RECENT_EPISODES_LIMIT), + DBReader.getQueueIDList(context) + }; + } } else { return null; } @@ -452,9 +456,8 @@ public class AllEpisodesFragment extends Fragment { progLoading.setVisibility(View.GONE); if (lists != null) { - unreadItems = (List) lists[0]; - recentItems = (List) lists[1]; - queueAccess = (LongList) lists[2]; + episodes = (List) lists[0]; + queueAccess = (LongList) lists[1]; itemsLoaded = true; if (viewsCreated && activity.get() != null) { onFragmentLoaded(); -- cgit v1.2.3 From 518e8207da568d04c3e780b407f29bc51e2d1995 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Fri, 8 May 2015 17:07:32 +0200 Subject: Reset dialog in progress --- .../danoeh/antennapod/fragment/QueueFragment.java | 127 ++++++++++++++++++--- 1 file changed, 114 insertions(+), 13 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index a17194dee..46fe02ab9 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -1,6 +1,7 @@ package de.danoeh.antennapod.fragment; import android.app.Activity; +import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; @@ -24,6 +25,7 @@ import android.widget.TextView; import com.mobeta.android.dslv.DragSortListView; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicReference; @@ -311,9 +313,23 @@ public class QueueFragment extends Fragment { menu.findItem(R.id.move_to_bottom_item).setEnabled(!queue.isEmpty() && queue.get(queue.size() - 1) != item); if(item.isRead()) { menu.findItem(R.id.mark_read_item).setVisible(false); - } else { - menu.findItem(R.id.mark_unread_item).setVisible(false); + } else if(!isResettable(item)){ + menu.findItem(R.id.reset_attributes).setVisible(false); + } + } + + private static boolean isResettable(FeedItem item) { + // TODO add auto_download + if(item.isRead()) { + return true; } + if(item.getMedia() != null) { + FeedMedia media = item.getMedia(); + if(media.getPosition() > 0 || media.getPlayedDuration() > 0) { + return true; + } + } + return false; } @Override @@ -345,17 +361,8 @@ public class QueueFragment extends Fragment { GpodnetPreferences.enqueueEpisodeAction(actionPlay); } return true; - case R.id.mark_unread_item: - DBWriter.markItemRead(getActivity(), selectedItem, false, false); - selectedItem.setRead(false); - if(GpodnetPreferences.loggedIn()) { - GpodnetEpisodeAction actionNew = new GpodnetEpisodeAction.Builder(selectedItem, GpodnetEpisodeAction.Action.NEW) - .currentDeviceId() - .currentTimestamp() - .build(); - GpodnetPreferences.enqueueEpisodeAction(actionNew); - } - startItemLoader(); + case R.id.reset_attributes: + showResetAttributesDialog(selectedItem); return true; case R.id.move_to_bottom_item: DBWriter.moveQueueItemToBottom(getActivity(), selectedItem.getId(), true); @@ -368,6 +375,100 @@ public class QueueFragment extends Fragment { } } + private void showResetAttributesDialog(final FeedItem item) { + final String resetReadValue = "RESET_READ"; + final String resetPositionValue = "RESET_POSITION"; + final String activateAutoDownloadValue = "ACTIVATE_AUTO_DOWNLOAD"; + final String unflattrValue = "UNFLATTR"; + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(R.string.reset_attributes_title); + final List resettableItems = new ArrayList(); + final List resettableValues = new ArrayList(); + if(item.isRead()) { + resettableItems.add(getString(R.string.mark_unread_label)); + resettableValues.add(resetReadValue); + } + // TODO + /* + if(false == item.getAutoDownload) { + resettableItems.add(getString(R.string.mark_unread_label)); + resettableValues.add("ACTIVATE_AUTO_DOWNLOAD"); + } + + if(item.getFlattrStatus().getUnflattred() == false) { + resettableItems.add(getString(R.string.reset)); + resettableValues.add("ACTIVATE_AUTO_DOWNLOAD"); + } + */ + if(item.getMedia() != null) { + FeedMedia media = item.getMedia(); + if(media.getPosition() > 0) { + resettableItems.add(getString(R.string.reset_attribute_position)); + resettableValues.add(resetPositionValue); + } + } + + String[] items = resettableItems.toArray(new String[resettableItems.size()]); + final boolean[] checked = new boolean[items.length]; + builder.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() { + @Override + public void onClick(DialogInterface dialog, int which, boolean isChecked) { + checked[which] = isChecked; + if(resettableValues.get(which).equals(resetPositionValue) && isChecked) { + AlertDialog alertDialog = (AlertDialog) dialog; + int position = resettableValues.indexOf(resetReadValue); + alertDialog.getListView().setItemChecked(position, true); + } + } + }); + builder.setPositiveButton(R.string.confirm_label, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + boolean markAsUnplayed = false; + boolean resetPosition = false; + boolean unflattr = false; + boolean activateAutoDownload = false; + for(int i=0; i < checked.length; i++) { + if(checked[i]) { + switch(resettableValues.get(i)) { + case resetReadValue: + markAsUnplayed = true; + break; + case resetPositionValue: + resetPosition = true; + break; + case unflattrValue: + unflattr = true; + break; + case activateAutoDownloadValue: + activateAutoDownload = true; + } + } + } + if(markAsUnplayed) { + DBWriter.markItemRead(getActivity(), item, false, resetPosition); + if(GpodnetPreferences.loggedIn()) { + GpodnetEpisodeAction actionNew = new GpodnetEpisodeAction.Builder(item, + GpodnetEpisodeAction.Action.NEW) + .currentDeviceId() + .currentTimestamp() + .build(); + GpodnetPreferences.enqueueEpisodeAction(actionNew); + } + } + if(unflattr) { + // TODO + } + if(activateAutoDownload) { + // TODO + } + } + }); + builder.setNegativeButton(R.string.cancel_label, null); + builder.create().show(); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); -- cgit v1.2.3 From c829a4e9b2cf7ccee117269769d71c40432f92fa Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Sat, 9 May 2015 21:19:22 +0200 Subject: Context dialog for feed item list --- .../danoeh/antennapod/fragment/ItemFragment.java | 2 +- .../antennapod/fragment/ItemlistFragment.java | 57 +++++++ .../danoeh/antennapod/fragment/QueueFragment.java | 176 ++++----------------- .../menuhandler/FeedItemMenuHandler.java | 87 +++++----- 4 files changed, 135 insertions(+), 187 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java index 10409a421..51a1e2252 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemFragment.java @@ -270,7 +270,7 @@ public class ItemFragment extends Fragment implements LoaderManager.LoaderCallba return; } popupMenu.getMenu().clear(); - popupMenu.inflate(R.menu.feeditem_dialog); + popupMenu.inflate(R.menu.feeditem_options); if (item.hasMedia()) { FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, true, queue); } else { diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index 0f4ee9013..aaa8cd645 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -14,11 +14,13 @@ import android.support.v4.view.MenuItemCompat; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.SearchView; import android.util.Log; +import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.widget.AdapterView; import android.widget.IconTextView; import android.widget.ImageButton; import android.widget.ImageView; @@ -58,6 +60,7 @@ import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.gui.MoreContentListFooterUtil; +import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; import de.danoeh.antennapod.menuhandler.FeedMenuHandler; import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.greenrobot.event.EventBus; @@ -78,6 +81,7 @@ public class ItemlistFragment extends ListFragment { public static final String ARGUMENT_FEED_ID = "argument.de.danoeh.antennapod.feed_id"; protected FeedItemlistAdapter adapter; + private ContextMenu contextMenu; private long feedID; private Feed feed; @@ -264,9 +268,60 @@ public class ItemlistFragment extends ListFragment { } else { return true; } + } + + private final FeedItemMenuHandler.MenuInterface contextMenuInterface = new FeedItemMenuHandler.MenuInterface() { + @Override + public void setItemVisibility(int id, boolean visible) { + if(contextMenu == null) { + return; + } + MenuItem item = contextMenu.findItem(id); + if (item != null) { + item.setVisible(visible); + } + } + }; + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo; + + // because of addHeaderView(), positions are increased by 1! + FeedItem item = itemAccess.getItem(adapterInfo.position-1); + + MenuInflater inflater = getActivity().getMenuInflater(); + inflater.inflate(R.menu.feeditemlist_context, menu); + if (item != null) { + menu.setHeaderTitle(item.getTitle()); + } + + contextMenu = menu; + FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, false, queue); } + @Override + public boolean onContextItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); + // because of addHeaderView(), positions are increased by 1! + FeedItem selectedItem = itemAccess.getItem(menuInfo.position-1); + + if (selectedItem == null) { + Log.i(TAG, "Selected item at position " + menuInfo.position + " was null, ignoring selection"); + return super.onContextItemSelected(item); + } + + try { + return FeedItemMenuHandler.onMenuItemClicked(getActivity(), item.getItemId(), selectedItem); + } catch (DownloadRequestException e) { + // context menu doesn't contain download functionality + return true; + } + } + + @Override public void setListAdapter(ListAdapter adapter) { // This workaround prevents the ListFragment from setting a list adapter when its state is restored. @@ -281,6 +336,8 @@ public class ItemlistFragment extends ListFragment { super.onViewCreated(view, savedInstanceState); ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(""); + registerForContextMenu(getListView()); + viewsCreated = true; if (itemsLoaded) { onFragmentLoaded(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 46fe02ab9..0ccca3e55 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -1,7 +1,6 @@ package de.danoeh.antennapod.fragment; import android.app.Activity; -import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; @@ -22,10 +21,10 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ProgressBar; import android.widget.TextView; +import android.widget.Toast; import com.mobeta.android.dslv.DragSortListView; -import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicReference; @@ -40,18 +39,19 @@ import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.feed.QueueEvent; -import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction; -import de.danoeh.antennapod.core.preferences.GpodnetPreferences; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.download.DownloadService; import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.LongList; import de.danoeh.antennapod.core.util.QueueSorter; import de.danoeh.antennapod.core.util.gui.FeedItemUndoToken; import de.danoeh.antennapod.core.util.gui.UndoBarController; +import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; import de.danoeh.antennapod.menuhandler.MenuItemUtils; import de.greenrobot.event.EventBus; @@ -71,6 +71,8 @@ public class QueueFragment extends Fragment { private TextView txtvEmpty; private ProgressBar progLoading; + private ContextMenu contextMenu; + private UndoBarController undoBarController; private List queue; @@ -296,6 +298,19 @@ public class QueueFragment extends Fragment { } + private final FeedItemMenuHandler.MenuInterface contextMenuInterface = new FeedItemMenuHandler.MenuInterface() { + @Override + public void setItemVisibility(int id, boolean visible) { + if(contextMenu == null) { + return; + } + MenuItem item = contextMenu.findItem(id); + if (item != null) { + item.setVisible(visible); + } + } + }; + @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); @@ -309,27 +324,12 @@ public class QueueFragment extends Fragment { menu.setHeaderTitle(item.getTitle()); } - menu.findItem(R.id.move_to_top_item).setEnabled(!queue.isEmpty() && queue.get(0) != item); - menu.findItem(R.id.move_to_bottom_item).setEnabled(!queue.isEmpty() && queue.get(queue.size() - 1) != item); - if(item.isRead()) { - menu.findItem(R.id.mark_read_item).setVisible(false); - } else if(!isResettable(item)){ - menu.findItem(R.id.reset_attributes).setVisible(false); - } - } - - private static boolean isResettable(FeedItem item) { - // TODO add auto_download - if(item.isRead()) { - return true; + contextMenu = menu; + LongList queueIds = new LongList(queue.size()); + for(FeedItem queueItem : queue) { + queueIds.add(queueItem.getId()); } - if(item.getMedia() != null) { - FeedMedia media = item.getMedia(); - if(media.getPosition() > 0 || media.getPlayedDuration() > 0) { - return true; - } - } - return false; + FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, false, queueIds); } @Override @@ -342,132 +342,16 @@ public class QueueFragment extends Fragment { return super.onContextItemSelected(item); } - switch (item.getItemId()) { - case R.id.move_to_top_item: - DBWriter.moveQueueItemToTop(getActivity(), selectedItem.getId(), true); - return true; - case R.id.mark_read_item: - DBWriter.markItemRead(getActivity(), selectedItem, true, false); - selectedItem.setRead(true); - if(GpodnetPreferences.loggedIn()) { - FeedMedia media = selectedItem.getMedia(); - GpodnetEpisodeAction actionPlay = new GpodnetEpisodeAction.Builder(selectedItem, GpodnetEpisodeAction.Action.PLAY) - .currentDeviceId() - .currentTimestamp() - .started(media.getDuration() / 1000) - .position(media.getDuration() / 1000) - .total(media.getDuration() / 1000) - .build(); - GpodnetPreferences.enqueueEpisodeAction(actionPlay); - } - return true; - case R.id.reset_attributes: - showResetAttributesDialog(selectedItem); - return true; - case R.id.move_to_bottom_item: - DBWriter.moveQueueItemToBottom(getActivity(), selectedItem.getId(), true); - return true; - case R.id.remove_from_queue_item: - DBWriter.removeQueueItem(getActivity(), selectedItem, false); - return true; - default: - return super.onContextItemSelected(item); + try { + return FeedItemMenuHandler.onMenuItemClicked(getActivity(), item.getItemId(), selectedItem); + } catch (DownloadRequestException e) { + e.printStackTrace(); + Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show(); + return true; } } - private void showResetAttributesDialog(final FeedItem item) { - final String resetReadValue = "RESET_READ"; - final String resetPositionValue = "RESET_POSITION"; - final String activateAutoDownloadValue = "ACTIVATE_AUTO_DOWNLOAD"; - final String unflattrValue = "UNFLATTR"; - - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setTitle(R.string.reset_attributes_title); - final List resettableItems = new ArrayList(); - final List resettableValues = new ArrayList(); - if(item.isRead()) { - resettableItems.add(getString(R.string.mark_unread_label)); - resettableValues.add(resetReadValue); - } - // TODO - /* - if(false == item.getAutoDownload) { - resettableItems.add(getString(R.string.mark_unread_label)); - resettableValues.add("ACTIVATE_AUTO_DOWNLOAD"); - } - - if(item.getFlattrStatus().getUnflattred() == false) { - resettableItems.add(getString(R.string.reset)); - resettableValues.add("ACTIVATE_AUTO_DOWNLOAD"); - } - */ - if(item.getMedia() != null) { - FeedMedia media = item.getMedia(); - if(media.getPosition() > 0) { - resettableItems.add(getString(R.string.reset_attribute_position)); - resettableValues.add(resetPositionValue); - } - } - String[] items = resettableItems.toArray(new String[resettableItems.size()]); - final boolean[] checked = new boolean[items.length]; - builder.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() { - @Override - public void onClick(DialogInterface dialog, int which, boolean isChecked) { - checked[which] = isChecked; - if(resettableValues.get(which).equals(resetPositionValue) && isChecked) { - AlertDialog alertDialog = (AlertDialog) dialog; - int position = resettableValues.indexOf(resetReadValue); - alertDialog.getListView().setItemChecked(position, true); - } - } - }); - builder.setPositiveButton(R.string.confirm_label, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - boolean markAsUnplayed = false; - boolean resetPosition = false; - boolean unflattr = false; - boolean activateAutoDownload = false; - for(int i=0; i < checked.length; i++) { - if(checked[i]) { - switch(resettableValues.get(i)) { - case resetReadValue: - markAsUnplayed = true; - break; - case resetPositionValue: - resetPosition = true; - break; - case unflattrValue: - unflattr = true; - break; - case activateAutoDownloadValue: - activateAutoDownload = true; - } - } - } - if(markAsUnplayed) { - DBWriter.markItemRead(getActivity(), item, false, resetPosition); - if(GpodnetPreferences.loggedIn()) { - GpodnetEpisodeAction actionNew = new GpodnetEpisodeAction.Builder(item, - GpodnetEpisodeAction.Action.NEW) - .currentDeviceId() - .currentTimestamp() - .build(); - GpodnetPreferences.enqueueEpisodeAction(actionNew); - } - } - if(unflattr) { - // TODO - } - if(activateAutoDownload) { - // TODO - } - } - }); - builder.setNegativeButton(R.string.cancel_label, null); - builder.create().show(); - } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index 453f984e8..974a7d4bf 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -3,6 +3,7 @@ package de.danoeh.antennapod.menuhandler; import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.util.Log; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.FeedItem; @@ -10,6 +11,7 @@ import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction; import de.danoeh.antennapod.core.gpoddernet.model.GpodnetEpisodeAction.Action; import de.danoeh.antennapod.core.preferences.GpodnetPreferences; +import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.service.playback.PlaybackService; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; @@ -54,18 +56,12 @@ public class FeedItemMenuHandler { * @param queueAccess Used for testing if the queue contains the selected item * @return Returns true if selectedItem is not null. */ - public static boolean onPrepareMenu(MenuInterface mi, - FeedItem selectedItem, boolean showExtendedMenu, LongList queueAccess) { + public static boolean onPrepareMenu(MenuInterface mi, FeedItem selectedItem, + boolean showExtendedMenu, LongList queueAccess) { if (selectedItem == null) { return false; } - DownloadRequester requester = DownloadRequester.getInstance(); boolean hasMedia = selectedItem.getMedia() != null; - boolean downloaded = hasMedia && selectedItem.getMedia().isDownloaded(); - boolean downloading = hasMedia - && requester.isDownloadingFile(selectedItem.getMedia()); - boolean notLoadedAndNotLoading = hasMedia && (!downloaded) - && (!downloading); boolean isPlaying = hasMedia && selectedItem.getState() == FeedItem.State.PLAYING; @@ -74,21 +70,14 @@ public class FeedItemMenuHandler { if (!isPlaying) { mi.setItemVisibility(R.id.skip_episode_item, false); } - if (!downloaded || isPlaying) { - mi.setItemVisibility(R.id.play_item, false); - mi.setItemVisibility(R.id.remove_item, false); - } - if (!notLoadedAndNotLoading) { - mi.setItemVisibility(R.id.download_item, false); - } - if (!(notLoadedAndNotLoading | downloading) | isPlaying) { - mi.setItemVisibility(R.id.stream_item, false); - } - if (!downloading) { - mi.setItemVisibility(R.id.cancel_download_item, false); - } boolean isInQueue = queueAccess.contains(selectedItem.getId()); + if(queueAccess.size() == 0 || queueAccess.get(0) != selectedItem.getId()) { + mi.setItemVisibility(R.id.move_to_top_item, false); + } + if(queueAccess.size() == 0 || queueAccess.get(queueAccess.size()-1) != selectedItem.getId()) { + mi.setItemVisibility(R.id.move_to_bottom_item, false); + } if (!isInQueue || isPlaying) { mi.setItemVisibility(R.id.remove_from_queue_item, false); } @@ -99,11 +88,24 @@ public class FeedItemMenuHandler { mi.setItemVisibility(R.id.share_link_item, false); } + if (!(state == FeedItem.State.NEW || state == FeedItem.State.IN_PROGRESS)) { + mi.setItemVisibility(R.id.mark_read_item, false); + } if (!(state == FeedItem.State.IN_PROGRESS || state == FeedItem.State.READ)) { mi.setItemVisibility(R.id.mark_unread_item, false); } - if (!(state == FeedItem.State.NEW || state == FeedItem.State.IN_PROGRESS)) { - mi.setItemVisibility(R.id.mark_read_item, false); + + if(selectedItem.getMedia() == null || selectedItem.getMedia().getPosition() == 0) { + mi.setItemVisibility(R.id.reset_position, false); + } + + if(false == UserPreferences.isEnableAutodownload()) { + mi.setItemVisibility(R.id.activate_auto_download, false); + mi.setItemVisibility(R.id.deactivate_auto_download, false); + } else if(selectedItem.getAutoDownload()) { + mi.setItemVisibility(R.id.activate_auto_download, false); + } else { + mi.setItemVisibility(R.id.deactivate_auto_download, false); } if (!showExtendedMenu || selectedItem.getLink() == null) { @@ -140,24 +142,14 @@ public class FeedItemMenuHandler { DownloadRequester requester = DownloadRequester.getInstance(); switch (menuItemId) { case R.id.skip_episode_item: - context.sendBroadcast(new Intent( - PlaybackService.ACTION_SKIP_CURRENT_EPISODE)); - break; - case R.id.download_item: - DBTasks.downloadFeedItems(context, selectedItem); - break; - case R.id.play_item: - DBTasks.playMedia(context, selectedItem.getMedia(), true, true, - false); + context.sendBroadcast(new Intent(PlaybackService.ACTION_SKIP_CURRENT_EPISODE)); break; case R.id.remove_item: DBWriter.deleteFeedMediaOfItem(context, selectedItem.getMedia().getId()); break; - case R.id.cancel_download_item: - requester.cancelDownload(context, selectedItem.getMedia()); - break; case R.id.mark_read_item: - DBWriter.markItemRead(context, selectedItem, true, true); + selectedItem.setRead(true); + DBWriter.markItemRead(context, selectedItem, true, false); if(GpodnetPreferences.loggedIn()) { FeedMedia media = selectedItem.getMedia(); GpodnetEpisodeAction actionPlay = new GpodnetEpisodeAction.Builder(selectedItem, Action.PLAY) @@ -171,7 +163,8 @@ public class FeedItemMenuHandler { } break; case R.id.mark_unread_item: - DBWriter.markItemRead(context, selectedItem, false, true); + selectedItem.setRead(false); + DBWriter.markItemRead(context, selectedItem, false, false); if(GpodnetPreferences.loggedIn()) { GpodnetEpisodeAction actionNew = new GpodnetEpisodeAction.Builder(selectedItem, Action.NEW) .currentDeviceId() @@ -180,15 +173,28 @@ public class FeedItemMenuHandler { GpodnetPreferences.enqueueEpisodeAction(actionNew); } break; + case R.id.move_to_top_item: + DBWriter.moveQueueItemToTop(context, selectedItem.getId(), true); + return true; + case R.id.move_to_bottom_item: + DBWriter.moveQueueItemToBottom(context, selectedItem.getId(), true); case R.id.add_to_queue_item: DBWriter.addQueueItem(context, selectedItem.getId()); break; case R.id.remove_from_queue_item: DBWriter.removeQueueItem(context, selectedItem, true); break; - case R.id.stream_item: - DBTasks.playMedia(context, selectedItem.getMedia(), true, true, - true); + case R.id.reset_position: + selectedItem.getMedia().setPosition(0); + DBWriter.markItemRead(context, selectedItem, false, true); + break; + case R.id.activate_auto_download: + selectedItem.setAutoDownload(true); + DBWriter.setFeedItemAutoDownload(context, selectedItem, true); + break; + case R.id.deactivate_auto_download: + selectedItem.setAutoDownload(false); + DBWriter.setFeedItemAutoDownload(context, selectedItem, false); break; case R.id.visit_website_item: Uri uri = Uri.parse(selectedItem.getLink()); @@ -201,6 +207,7 @@ public class FeedItemMenuHandler { ShareUtils.shareFeedItemLink(context, selectedItem); break; default: + Log.d(TAG, "Unknown menuItemId: " + menuItemId); return false; } // Refresh menu state -- cgit v1.2.3 From 4561f16f11ed2f27d711d3ea42f5e84bcccc002c Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Mon, 11 May 2015 17:14:42 +0200 Subject: Redone new indicator --- .../antennapod/adapter/AllEpisodesListAdapter.java | 185 +++++++++++++++++++++ .../antennapod/adapter/FeedItemlistAdapter.java | 6 +- .../antennapod/adapter/NewEpisodesListAdapter.java | 179 -------------------- .../antennapod/config/StorageCallbacksImpl.java | 6 + .../antennapod/fragment/AllEpisodesFragment.java | 33 +++- .../antennapod/fragment/ItemlistFragment.java | 31 ++-- .../fragment/PlaybackHistoryFragment.java | 5 + .../menuhandler/FeedItemMenuHandler.java | 2 +- 8 files changed, 246 insertions(+), 201 deletions(-) create mode 100644 app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java delete mode 100644 app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java new file mode 100644 index 000000000..ea0c96be9 --- /dev/null +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java @@ -0,0 +1,185 @@ +package de.danoeh.antennapod.adapter; + +import android.content.Context; +import android.text.format.DateUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.squareup.picasso.Picasso; + +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.Converter; + +/** + * List adapter for the list of new episodes + */ +public class AllEpisodesListAdapter extends BaseAdapter { + + private final Context context; + private final ItemAccess itemAccess; + private final ActionButtonCallback actionButtonCallback; + private final ActionButtonUtils actionButtonUtils; + private final boolean showOnlyNewEpisodes; + + public AllEpisodesListAdapter(Context context, ItemAccess itemAccess, ActionButtonCallback actionButtonCallback, + boolean showOnlyNewEpisodes) { + super(); + this.context = context; + this.itemAccess = itemAccess; + this.actionButtonUtils = new ActionButtonUtils(context); + this.actionButtonCallback = actionButtonCallback; + this.showOnlyNewEpisodes = showOnlyNewEpisodes; + } + + @Override + public int getCount() { + return itemAccess.getCount(); + } + + @Override + public Object getItem(int position) { + return itemAccess.getItem(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public int getViewTypeCount() { + return 1; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + final FeedItem item = (FeedItem) getItem(position); + if (item == null) return null; + + if (convertView == null) { + holder = new Holder(); + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + convertView = inflater.inflate(R.layout.new_episodes_listitem, + parent, false); + holder.title = (TextView) convertView.findViewById(R.id.txtvTitle); + holder.pubDate = (TextView) convertView + .findViewById(R.id.txtvPublished); + holder.statusUnread = convertView.findViewById(R.id.statusUnread); + holder.butSecondary = (ImageButton) convertView + .findViewById(R.id.butSecondaryAction); + holder.queueStatus = (ImageView) convertView + .findViewById(R.id.imgvInPlaylist); + holder.downloadProgress = (ProgressBar) convertView + .findViewById(R.id.pbar_download_progress); + holder.imageView = (ImageView) convertView.findViewById(R.id.imgvImage); + holder.txtvDuration = (TextView) convertView.findViewById(R.id.txtvDuration); + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + + holder.title.setText(item.getTitle()); + holder.pubDate.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_ABBREV_ALL)); + if (showOnlyNewEpisodes || item.isRead() || false == itemAccess.isNew(item)) { + holder.statusUnread.setVisibility(View.INVISIBLE); + } else { + holder.statusUnread.setVisibility(View.VISIBLE); + } + + FeedMedia media = item.getMedia(); + if (media != null) { + final boolean isDownloadingMedia = DownloadRequester.getInstance().isDownloadingFile(media); + + if (media.getDuration() > 0) { + holder.txtvDuration.setText(Converter.getDurationStringLong(media.getDuration())); + } else if (media.getSize() > 0) { + holder.txtvDuration.setText(Converter.byteToString(media.getSize())); + } else { + holder.txtvDuration.setText(""); + } + + if (isDownloadingMedia) { + holder.downloadProgress.setVisibility(View.VISIBLE); + holder.txtvDuration.setVisibility(View.GONE); + holder.pubDate.setVisibility(View.GONE); + } else { + holder.txtvDuration.setVisibility(View.VISIBLE); + holder.pubDate.setVisibility(View.VISIBLE); + holder.downloadProgress.setVisibility(View.GONE); + } + + if (!media.isDownloaded()) { + if (isDownloadingMedia) { + // item is being downloaded + holder.downloadProgress.setProgress(itemAccess.getItemDownloadProgressPercent(item)); + } + } + } else { + holder.downloadProgress.setVisibility(View.GONE); + holder.txtvDuration.setVisibility(View.GONE); + } + + if (itemAccess.isInQueue(item)) { + holder.queueStatus.setVisibility(View.VISIBLE); + } else { + holder.queueStatus.setVisibility(View.INVISIBLE); + } + + actionButtonUtils.configureActionButton(holder.butSecondary, item); + holder.butSecondary.setFocusable(false); + holder.butSecondary.setTag(item); + holder.butSecondary.setOnClickListener(secondaryActionListener); + + Picasso.with(context) + .load(item.getImageUri()) + .fit() + .into(holder.imageView); + + return convertView; + } + + private View.OnClickListener secondaryActionListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + FeedItem item = (FeedItem) v.getTag(); + actionButtonCallback.onActionButtonPressed(item); + } + }; + + + static class Holder { + TextView title; + TextView pubDate; + View statusUnread; + ImageView queueStatus; + ImageView imageView; + ProgressBar downloadProgress; + TextView txtvDuration; + ImageButton butSecondary; + } + + public interface ItemAccess { + + int getCount(); + + FeedItem getItem(int position); + + int getItemDownloadProgressPercent(FeedItem item); + + boolean isInQueue(FeedItem item); + + boolean isNew(FeedItem item); + + } +} diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index 30e0b0b57..4a640f112 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -110,7 +110,9 @@ public class FeedItemlistAdapter extends BaseAdapter { } holder.title.setText(buffer.toString()); - if(item.isRead()) { + if(false == item.isRead() && itemAccess.isNew(item)) { + holder.statusUnread.setVisibility(View.VISIBLE); + } else { holder.statusUnread.setVisibility(View.INVISIBLE); } @@ -214,6 +216,8 @@ public class FeedItemlistAdapter extends BaseAdapter { FeedItem getItem(int position); + boolean isNew(FeedItem item); + } } diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java deleted file mode 100644 index 7ad40340d..000000000 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NewEpisodesListAdapter.java +++ /dev/null @@ -1,179 +0,0 @@ -package de.danoeh.antennapod.adapter; - -import android.content.Context; -import android.text.format.DateUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.ImageButton; -import android.widget.ImageView; -import android.widget.ProgressBar; -import android.widget.TextView; - -import com.squareup.picasso.Picasso; - -import de.danoeh.antennapod.R; -import de.danoeh.antennapod.core.feed.FeedItem; -import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.storage.DownloadRequester; -import de.danoeh.antennapod.core.util.Converter; - -/** - * List adapter for the list of new episodes - */ -public class NewEpisodesListAdapter extends BaseAdapter { - - private final Context context; - private final ItemAccess itemAccess; - private final ActionButtonCallback actionButtonCallback; - private final ActionButtonUtils actionButtonUtils; - - public NewEpisodesListAdapter(Context context, ItemAccess itemAccess, ActionButtonCallback actionButtonCallback) { - super(); - this.context = context; - this.itemAccess = itemAccess; - this.actionButtonUtils = new ActionButtonUtils(context); - this.actionButtonCallback = actionButtonCallback; - } - - @Override - public int getCount() { - return itemAccess.getCount(); - } - - @Override - public Object getItem(int position) { - return itemAccess.getItem(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public int getViewTypeCount() { - return 1; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - Holder holder; - final FeedItem item = (FeedItem) getItem(position); - if (item == null) return null; - - if (convertView == null) { - holder = new Holder(); - LayoutInflater inflater = (LayoutInflater) context - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - convertView = inflater.inflate(R.layout.new_episodes_listitem, - parent, false); - holder.title = (TextView) convertView.findViewById(R.id.txtvTitle); - holder.pubDate = (TextView) convertView - .findViewById(R.id.txtvPublished); - holder.statusUnread = convertView.findViewById(R.id.statusUnread); - holder.butSecondary = (ImageButton) convertView - .findViewById(R.id.butSecondaryAction); - holder.queueStatus = (ImageView) convertView - .findViewById(R.id.imgvInPlaylist); - holder.downloadProgress = (ProgressBar) convertView - .findViewById(R.id.pbar_download_progress); - holder.imageView = (ImageView) convertView.findViewById(R.id.imgvImage); - holder.txtvDuration = (TextView) convertView.findViewById(R.id.txtvDuration); - convertView.setTag(holder); - } else { - holder = (Holder) convertView.getTag(); - } - - holder.title.setText(item.getTitle()); - holder.pubDate.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_ABBREV_ALL)); - if (item.isRead()) { - holder.statusUnread.setVisibility(View.INVISIBLE); - } else { - holder.statusUnread.setVisibility(View.VISIBLE); - } - - FeedMedia media = item.getMedia(); - if (media != null) { - final boolean isDownloadingMedia = DownloadRequester.getInstance().isDownloadingFile(media); - - if (media.getDuration() > 0) { - holder.txtvDuration.setText(Converter.getDurationStringLong(media.getDuration())); - } else if (media.getSize() > 0) { - holder.txtvDuration.setText(Converter.byteToString(media.getSize())); - } else { - holder.txtvDuration.setText(""); - } - - if (isDownloadingMedia) { - holder.downloadProgress.setVisibility(View.VISIBLE); - holder.txtvDuration.setVisibility(View.GONE); - holder.pubDate.setVisibility(View.GONE); - } else { - holder.txtvDuration.setVisibility(View.VISIBLE); - holder.pubDate.setVisibility(View.VISIBLE); - holder.downloadProgress.setVisibility(View.GONE); - } - - if (!media.isDownloaded()) { - if (isDownloadingMedia) { - // item is being downloaded - holder.downloadProgress.setProgress(itemAccess.getItemDownloadProgressPercent(item)); - } - } - } else { - holder.downloadProgress.setVisibility(View.GONE); - holder.txtvDuration.setVisibility(View.GONE); - } - - if (itemAccess.isInQueue(item)) { - holder.queueStatus.setVisibility(View.VISIBLE); - } else { - holder.queueStatus.setVisibility(View.INVISIBLE); - } - - actionButtonUtils.configureActionButton(holder.butSecondary, item); - holder.butSecondary.setFocusable(false); - holder.butSecondary.setTag(item); - holder.butSecondary.setOnClickListener(secondaryActionListener); - - Picasso.with(context) - .load(item.getImageUri()) - .fit() - .into(holder.imageView); - - return convertView; - } - - private View.OnClickListener secondaryActionListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - FeedItem item = (FeedItem) v.getTag(); - actionButtonCallback.onActionButtonPressed(item); - } - }; - - - static class Holder { - TextView title; - TextView pubDate; - View statusUnread; - ImageView queueStatus; - ImageView imageView; - ProgressBar downloadProgress; - TextView txtvDuration; - ImageButton butSecondary; - } - - public interface ItemAccess { - - int getCount(); - - FeedItem getItem(int position); - - int getItemDownloadProgressPercent(FeedItem item); - - boolean isInQueue(FeedItem item); - } -} diff --git a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java index 3445b109f..943e05690 100644 --- a/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java +++ b/app/src/main/java/de/danoeh/antennapod/config/StorageCallbacksImpl.java @@ -142,6 +142,12 @@ public class StorageCallbacksImpl implements StorageCallbacks { db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS + " ADD COLUMN " + PodDBAdapter.KEY_LAST_UPDATE_FAILED + " INTEGER DEFAULT 0"); + // create indexes + db.execSQL(PodDBAdapter.CREATE_INDEX_FEEDITEMS_FEED); + db.execSQL(PodDBAdapter.CREATE_INDEX_FEEDITEMS_IMAGE); + db.execSQL(PodDBAdapter.CREATE_INDEX_FEEDMEDIA_FEEDITEM); + db.execSQL(PodDBAdapter.CREATE_INDEX_QUEUE_FEEDITEM); + db.execSQL(PodDBAdapter.CREATE_INDEX_SIMPLECHAPTERS_FEEDITEM); } } } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 91e3df106..8a5cad137 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -29,7 +29,7 @@ import java.util.concurrent.atomic.AtomicReference; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.adapter.DefaultActionButtonCallback; -import de.danoeh.antennapod.adapter.NewEpisodesListAdapter; +import de.danoeh.antennapod.adapter.AllEpisodesListAdapter; import de.danoeh.antennapod.core.asynctask.DownloadObserver; import de.danoeh.antennapod.core.dialog.ConfirmationDialog; import de.danoeh.antennapod.core.feed.EventDistributor; @@ -64,12 +64,13 @@ public class AllEpisodesFragment extends Fragment { private String prefName; protected DragSortListView listView; - private NewEpisodesListAdapter listAdapter; + private AllEpisodesListAdapter listAdapter; private TextView txtvEmpty; private ProgressBar progLoading; private List episodes; - private LongList queueAccess; + private LongList queuedItemsIds; + private LongList newItemsIds; private List downloaderList; private boolean itemsLoaded = false; @@ -308,7 +309,8 @@ public class AllEpisodesFragment extends Fragment { private void onFragmentLoaded() { if (listAdapter == null) { - listAdapter = new NewEpisodesListAdapter(activity.get(), itemAccess, new DefaultActionButtonCallback(activity.get())); + listAdapter = new AllEpisodesListAdapter(activity.get(), itemAccess, + new DefaultActionButtonCallback(activity.get()), showOnlyNewEpisodes); listView.setAdapter(listAdapter); listView.setEmptyView(txtvEmpty); downloadObserver = new DownloadObserver(activity.get(), new Handler(), downloadObserverCallback); @@ -337,7 +339,7 @@ public class AllEpisodesFragment extends Fragment { } }; - private NewEpisodesListAdapter.ItemAccess itemAccess = new NewEpisodesListAdapter.ItemAccess() { + private AllEpisodesListAdapter.ItemAccess itemAccess = new AllEpisodesListAdapter.ItemAccess() { @Override public int getCount() { @@ -371,7 +373,17 @@ public class AllEpisodesFragment extends Fragment { @Override public boolean isInQueue(FeedItem item) { if (itemsLoaded) { - return queueAccess.contains(item.getId()); + return queuedItemsIds.contains(item.getId()); + } else { + return false; + } + } + + @Override + public boolean isNew(FeedItem item) { + if (itemsLoaded) { + // should actually never be called in NewEpisodesFragment, but better safe than sorry + return showOnlyNewEpisodes || newItemsIds.contains(item.getId()); } else { return false; } @@ -436,12 +448,14 @@ public class AllEpisodesFragment extends Fragment { if(showOnlyNewEpisodes) { return new Object[] { DBReader.getNewItemsList(context), - DBReader.getQueueIDList(context) + DBReader.getQueueIDList(context), + null // see ItemAccess.isNew }; } else { return new Object[]{ DBReader.getRecentlyPublishedEpisodes(context, RECENT_EPISODES_LIMIT), - DBReader.getQueueIDList(context) + DBReader.getQueueIDList(context), + DBReader.getNewItemIds(context) }; } } else { @@ -457,7 +471,8 @@ public class AllEpisodesFragment extends Fragment { if (lists != null) { episodes = (List) lists[0]; - queueAccess = (LongList) lists[1]; + queuedItemsIds = (LongList) lists[1]; + newItemsIds = (LongList) lists[2]; itemsLoaded = true; if (viewsCreated && activity.get() != null) { onFragmentLoaded(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index aaa8cd645..463d06376 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -9,8 +9,8 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.ListFragment; -import android.support.v4.util.Pair; import android.support.v4.view.MenuItemCompat; + import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.SearchView; import android.util.Log; @@ -85,7 +85,9 @@ public class ItemlistFragment extends ListFragment { private long feedID; private Feed feed; - private LongList queue; + private LongList queuedItemsIds; + private LongList newItemsIds; + private boolean itemsLoaded = false; private boolean viewsCreated = false; @@ -299,7 +301,7 @@ public class ItemlistFragment extends ListFragment { } contextMenu = menu; - FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, false, queue); + FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, false, queuedItemsIds); } @Override @@ -547,7 +549,12 @@ public class ItemlistFragment extends ListFragment { @Override public boolean isInQueue(FeedItem item) { - return (queue != null) && queue.contains(item.getId()); + return (queuedItemsIds != null) && queuedItemsIds.contains(item.getId()); + } + + @Override + public boolean isNew(FeedItem item) { + return (newItemsIds != null) && newItemsIds.contains(item.getId()); } @Override @@ -580,9 +587,9 @@ public class ItemlistFragment extends ListFragment { } } - private class ItemLoader extends AsyncTask> { + private class ItemLoader extends AsyncTask { @Override - protected Pair doInBackground(Long... params) { + protected Object[] doInBackground(Long... params) { long feedID = params[0]; Context context = getActivity(); if (context != null) { @@ -591,19 +598,21 @@ public class ItemlistFragment extends ListFragment { FeedItemFilter filter = feed.getItemFilter(); feed.setItems(filter.filter(context, feed.getItems())); } - LongList queue = DBReader.getQueueIDList(context); - return Pair.create(feed, queue); + LongList queuedItemsIds = DBReader.getQueueIDList(context); + LongList newItemsIds = DBReader.getNewItemIds(context); + return new Object[] { feed, queuedItemsIds, newItemsIds }; } else { return null; } } @Override - protected void onPostExecute(Pair res) { + protected void onPostExecute(Object[] res) { super.onPostExecute(res); if (res != null) { - feed = res.first; - queue = res.second; + feed = (Feed) res[0]; + queuedItemsIds = (LongList) res[1]; + newItemsIds = res[2] == null ? null : (LongList) res[2]; itemsLoaded = true; if (viewsCreated) { onFragmentLoaded(); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java index 440e38636..9099829d8 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/PlaybackHistoryFragment.java @@ -225,6 +225,11 @@ public class PlaybackHistoryFragment extends ListFragment { return (queue != null) ? queue.contains(item.getId()) : false; } + @Override + public boolean isNew(FeedItem item) { + return false; + } + @Override public int getItemDownloadProgressPercent(FeedItem item) { if (downloaderList != null) { diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index 974a7d4bf..a58666056 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -88,7 +88,7 @@ public class FeedItemMenuHandler { mi.setItemVisibility(R.id.share_link_item, false); } - if (!(state == FeedItem.State.NEW || state == FeedItem.State.IN_PROGRESS)) { + if (!(state == FeedItem.State.UNREAD || state == FeedItem.State.IN_PROGRESS)) { mi.setItemVisibility(R.id.mark_read_item, false); } if (!(state == FeedItem.State.IN_PROGRESS || state == FeedItem.State.READ)) { -- cgit v1.2.3 From 298b02b0aa20314187715aa9787d59e4292a0c64 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Mon, 11 May 2015 19:58:06 +0200 Subject: Fix for indicator, changes in context menus --- .../danoeh/antennapod/adapter/NavListAdapter.java | 2 +- .../antennapod/fragment/AllEpisodesFragment.java | 56 ++++++++++++++++++++++ .../antennapod/fragment/ItemlistFragment.java | 7 ++- .../danoeh/antennapod/fragment/QueueFragment.java | 4 +- 4 files changed, 64 insertions(+), 5 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java index 818f662cd..ae81779e4 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java @@ -277,7 +277,7 @@ public class NavListAdapter extends BaseAdapter holder.count.setText(String.valueOf(feedUnreadItems)); holder.count.setTypeface(holder.title.getTypeface()); } else { - holder.count.setVisibility(View.GONE); + holder.count.setVisibility(View.INVISIBLE); } return convertView; } diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java index 8a5cad137..ff5485251 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/AllEpisodesFragment.java @@ -10,6 +10,8 @@ import android.os.Handler; import android.support.v4.app.Fragment; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; +import android.util.Log; +import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -41,8 +43,10 @@ import de.danoeh.antennapod.core.service.download.Downloader; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBTasks; import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.storage.DownloadRequestException; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.LongList; +import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler; import de.danoeh.antennapod.menuhandler.MenuItemUtils; /** @@ -67,6 +71,7 @@ public class AllEpisodesFragment extends Fragment { private AllEpisodesListAdapter listAdapter; private TextView txtvEmpty; private ProgressBar progLoading; + private ContextMenu contextMenu; private List episodes; private LongList queuedItemsIds; @@ -293,6 +298,8 @@ public class AllEpisodesFragment extends Fragment { } }); + registerForContextMenu(listView); + if (!itemsLoaded) { progLoading.setVisibility(View.VISIBLE); txtvEmpty.setVisibility(View.GONE); @@ -307,6 +314,55 @@ public class AllEpisodesFragment extends Fragment { return root; } + private final FeedItemMenuHandler.MenuInterface contextMenuInterface = new FeedItemMenuHandler.MenuInterface() { + @Override + public void setItemVisibility(int id, boolean visible) { + if(contextMenu == null) { + return; + } + MenuItem item = contextMenu.findItem(id); + if (item != null) { + item.setVisible(visible); + } + } + }; + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { + super.onCreateContextMenu(menu, v, menuInfo); + AdapterView.AdapterContextMenuInfo adapterInfo = (AdapterView.AdapterContextMenuInfo) menuInfo; + FeedItem item = itemAccess.getItem(adapterInfo.position); + + MenuInflater inflater = getActivity().getMenuInflater(); + inflater.inflate(R.menu.allepisodes_context, menu); + + if (item != null) { + menu.setHeaderTitle(item.getTitle()); + } + + contextMenu = menu; + FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true, queuedItemsIds); + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); + FeedItem selectedItem = itemAccess.getItem(menuInfo.position); + + if (selectedItem == null) { + Log.i(TAG, "Selected item at position " + menuInfo.position + " was null, ignoring selection"); + return super.onContextItemSelected(item); + } + + try { + return FeedItemMenuHandler.onMenuItemClicked(getActivity(), item.getItemId(), selectedItem); + } catch (DownloadRequestException e) { + e.printStackTrace(); + Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show(); + return true; + } + } + private void onFragmentLoaded() { if (listAdapter == null) { listAdapter = new AllEpisodesListAdapter(activity.get(), itemAccess, diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index 463d06376..07ae81100 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -26,6 +26,7 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.ListView; +import android.widget.RelativeLayout; import android.widget.TextView; import com.joanzapata.android.iconify.Iconify; @@ -301,7 +302,7 @@ public class ItemlistFragment extends ListFragment { } contextMenu = menu; - FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, false, queuedItemsIds); + FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true, queuedItemsIds); } @Override @@ -428,6 +429,10 @@ public class ItemlistFragment extends ListFragment { if(feed.getItemFilter() != null) { FeedItemFilter filter = feed.getItemFilter(); if(filter.getValues().length > 0) { + if(feed.hasLastUpdateFailed()) { + RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) txtvInformation.getLayoutParams(); + p.addRule(RelativeLayout.BELOW, R.id.txtvFailure); + } txtvInformation.setText("{fa-info-circle} " + this.getString(R.string.filtered_label)); Iconify.addIcons(txtvInformation); txtvInformation.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java index 0ccca3e55..d82c7b8f7 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/QueueFragment.java @@ -329,7 +329,7 @@ public class QueueFragment extends Fragment { for(FeedItem queueItem : queue) { queueIds.add(queueItem.getId()); } - FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, false, queueIds); + FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true, queueIds); } @Override @@ -352,7 +352,6 @@ public class QueueFragment extends Fragment { } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); @@ -435,7 +434,6 @@ public class QueueFragment extends Fragment { }); - registerForContextMenu(listView); if (!itemsLoaded) { -- cgit v1.2.3 From 1bf02167887247b543f6e821d02ac641ba6039b8 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Mon, 11 May 2015 23:29:52 +0200 Subject: Fix move to top/bottom --- .../java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java index a58666056..fe1a09149 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedItemMenuHandler.java @@ -72,10 +72,10 @@ public class FeedItemMenuHandler { } boolean isInQueue = queueAccess.contains(selectedItem.getId()); - if(queueAccess.size() == 0 || queueAccess.get(0) != selectedItem.getId()) { + if(queueAccess.size() == 0 || queueAccess.get(0) == selectedItem.getId()) { mi.setItemVisibility(R.id.move_to_top_item, false); } - if(queueAccess.size() == 0 || queueAccess.get(queueAccess.size()-1) != selectedItem.getId()) { + if(queueAccess.size() == 0 || queueAccess.get(queueAccess.size()-1) == selectedItem.getId()) { mi.setItemVisibility(R.id.move_to_bottom_item, false); } if (!isInQueue || isPlaying) { -- cgit v1.2.3 From dfdfa82b4b0cc0768fd17afcd9fc19b4dabdb177 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Tue, 12 May 2015 10:03:41 +0200 Subject: Fix download bar displacement --- .../main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java | 2 -- .../main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index 4a640f112..72bcda4d0 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -139,12 +139,10 @@ public class FeedItemlistAdapter extends BaseAdapter { item.getMedia())) { holder.episodeProgress.setVisibility(View.VISIBLE); holder.episodeProgress.setProgress(((ItemAccess) itemAccess).getItemDownloadProgressPercent(item)); - holder.published.setVisibility(View.GONE); } else { if(media.getPosition() == 0) { holder.episodeProgress.setVisibility(View.GONE); } - holder.published.setVisibility(View.VISIBLE); } TypedArray typeDrawables = context.obtainStyledAttributes( diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java index af3368c41..31106e727 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java @@ -39,8 +39,7 @@ public class FeedMenuHandler { } Log.d(TAG, "Preparing options menu"); - menu.findItem(R.id.mark_all_read_item).setVisible( - selectedFeed.hasNewItems(true)); + menu.findItem(R.id.mark_all_read_item).setVisible(selectedFeed.hasNewItems()); if (selectedFeed.getPaymentLink() != null && selectedFeed.getFlattrStatus().flattrable()) menu.findItem(R.id.support_item).setVisible(true); else -- cgit v1.2.3 From 44b3a3bb871c2eabae2df8c6092e0a0c0b317f88 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Tue, 12 May 2015 13:42:21 +0200 Subject: Small fixes and refactorings --- app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java | 4 ++-- .../main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java index 07ae81100..a9cbe8291 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -544,12 +544,12 @@ public class ItemlistFragment extends ListFragment { @Override public FeedItem getItem(int position) { - return (feed != null) ? feed.getItemAtIndex(true, position) : null; + return (feed != null) ? feed.getItemAtIndex(position) : null; } @Override public int getCount() { - return (feed != null) ? feed.getNumOfItems(true) : 0; + return (feed != null) ? feed.getNumOfItems() : 0; } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java index 31106e727..7bd8fedc9 100644 --- a/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java +++ b/app/src/main/java/de/danoeh/antennapod/menuhandler/FeedMenuHandler.java @@ -129,7 +129,7 @@ public class FeedMenuHandler { builder.setPositiveButton(R.string.confirm_label, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - feed.setFeedItemsFilter(hidden.toArray(new String[hidden.size()])); + feed.setHiddenItemProperties(hidden.toArray(new String[hidden.size()])); DBWriter.setFeedItemsFilter(context, feed.getId(), hidden); } }); -- cgit v1.2.3 From 61754cae52feaed9a9fa149e087bfe98e2015cbd Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Tue, 19 May 2015 16:46:51 +0200 Subject: Show correct number of new items --- .../main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java | 4 ++-- app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java | 4 ++-- app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java index 8f18235c7..b59f6ba35 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/AudioplayerActivity.java @@ -703,8 +703,8 @@ public class AudioplayerActivity extends MediaplayerActivity implements ItemDesc } @Override - public int getNumberOfUnreadItems() { - return (navDrawerData != null) ? navDrawerData.numUnreadItems : 0; + public int getNumberOfNewItems() { + return (navDrawerData != null) ? navDrawerData.numNewItems : 0; } @Override 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 842dbcc9d..d62612c76 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -507,8 +507,8 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity } @Override - public int getNumberOfUnreadItems() { - return (navDrawerData != null) ? navDrawerData.numUnreadItems : 0; + public int getNumberOfNewItems() { + return (navDrawerData != null) ? navDrawerData.numNewItems : 0; } @Override diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java index ae81779e4..13982f57d 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java @@ -210,7 +210,7 @@ public class NavListAdapter extends BaseAdapter holder.count.setVisibility(View.GONE); } } else if (tags.get(position).equals(NewEpisodesFragment.TAG)) { - int unreadItems = itemAccess.getNumberOfUnreadItems(); + int unreadItems = itemAccess.getNumberOfNewItems(); if (unreadItems > 0) { holder.count.setVisibility(View.VISIBLE); holder.count.setText(String.valueOf(unreadItems)); @@ -300,7 +300,7 @@ public class NavListAdapter extends BaseAdapter Feed getItem(int position); int getSelectedItemIndex(); int getQueueSize(); - int getNumberOfUnreadItems(); + int getNumberOfNewItems(); int getNumberOfUnreadFeedItems(long feedId); } -- cgit v1.2.3 From b0f0d106dae70e52a002e481f4bfcb3fb6ac9038 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Tue, 19 May 2015 16:57:30 +0200 Subject: Transparency for played items --- .../java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java index 72bcda4d0..b39e23d42 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/FeedItemlistAdapter.java @@ -14,6 +14,8 @@ import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; +import com.nineoldandroids.view.ViewHelper; + import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; @@ -115,6 +117,11 @@ public class FeedItemlistAdapter extends BaseAdapter { } else { holder.statusUnread.setVisibility(View.INVISIBLE); } + if(item.isRead()) { + ViewHelper.setAlpha(convertView, 0.5f); + } else { + ViewHelper.setAlpha(convertView, 1.0f); + } holder.published.setText(DateUtils.formatDateTime(context, item.getPubDate().getTime(), DateUtils.FORMAT_ABBREV_ALL)); -- cgit v1.2.3 From ec156b4016b6323e817db0312a2f55d510262c71 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Fri, 22 May 2015 16:21:21 -0400 Subject: now display the download bar under the other windows --- .../antennapod/adapter/AllEpisodesListAdapter.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java index ea0c96be9..5c4946b78 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java @@ -109,22 +109,22 @@ public class AllEpisodesListAdapter extends BaseAdapter { holder.txtvDuration.setText(""); } + FeedItem.State state = item.getState(); if (isDownloadingMedia) { holder.downloadProgress.setVisibility(View.VISIBLE); - holder.txtvDuration.setVisibility(View.GONE); - holder.pubDate.setVisibility(View.GONE); + // item is being downloaded + holder.downloadProgress.setProgress(itemAccess.getItemDownloadProgressPercent(item)); + } else if (state == FeedItem.State.PLAYING + || state == FeedItem.State.IN_PROGRESS) { + if (media.getDuration() > 0) { + int progress = (int) (100.0 * media.getPosition() / media.getDuration()); + holder.downloadProgress.setProgress(progress); + holder.downloadProgress.setVisibility(View.VISIBLE); + } } else { - holder.txtvDuration.setVisibility(View.VISIBLE); - holder.pubDate.setVisibility(View.VISIBLE); holder.downloadProgress.setVisibility(View.GONE); } - if (!media.isDownloaded()) { - if (isDownloadingMedia) { - // item is being downloaded - holder.downloadProgress.setProgress(itemAccess.getItemDownloadProgressPercent(item)); - } - } } else { holder.downloadProgress.setVisibility(View.GONE); holder.txtvDuration.setVisibility(View.GONE); -- cgit v1.2.3 From f28853b00dec8875c967ef89ecef9602049a67e7 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Fri, 22 May 2015 17:13:31 -0400 Subject: renamed download progress bar to just progress --- .../antennapod/adapter/AllEpisodesListAdapter.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java index 5c4946b78..d96326053 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/AllEpisodesListAdapter.java @@ -80,8 +80,8 @@ public class AllEpisodesListAdapter extends BaseAdapter { .findViewById(R.id.butSecondaryAction); holder.queueStatus = (ImageView) convertView .findViewById(R.id.imgvInPlaylist); - holder.downloadProgress = (ProgressBar) convertView - .findViewById(R.id.pbar_download_progress); + holder.progress = (ProgressBar) convertView + .findViewById(R.id.pbar_progress); holder.imageView = (ImageView) convertView.findViewById(R.id.imgvImage); holder.txtvDuration = (TextView) convertView.findViewById(R.id.txtvDuration); convertView.setTag(holder); @@ -111,22 +111,22 @@ public class AllEpisodesListAdapter extends BaseAdapter { FeedItem.State state = item.getState(); if (isDownloadingMedia) { - holder.downloadProgress.setVisibility(View.VISIBLE); + holder.progress.setVisibility(View.VISIBLE); // item is being downloaded - holder.downloadProgress.setProgress(itemAccess.getItemDownloadProgressPercent(item)); + holder.progress.setProgress(itemAccess.getItemDownloadProgressPercent(item)); } else if (state == FeedItem.State.PLAYING || state == FeedItem.State.IN_PROGRESS) { if (media.getDuration() > 0) { int progress = (int) (100.0 * media.getPosition() / media.getDuration()); - holder.downloadProgress.setProgress(progress); - holder.downloadProgress.setVisibility(View.VISIBLE); + holder.progress.setProgress(progress); + holder.progress.setVisibility(View.VISIBLE); } } else { - holder.downloadProgress.setVisibility(View.GONE); + holder.progress.setVisibility(View.GONE); } } else { - holder.downloadProgress.setVisibility(View.GONE); + holder.progress.setVisibility(View.GONE); holder.txtvDuration.setVisibility(View.GONE); } @@ -164,7 +164,7 @@ public class AllEpisodesListAdapter extends BaseAdapter { View statusUnread; ImageView queueStatus; ImageView imageView; - ProgressBar downloadProgress; + ProgressBar progress; TextView txtvDuration; ImageButton butSecondary; } -- cgit v1.2.3 From 94c826a4ce4e03981bac1698252a487792c34192 Mon Sep 17 00:00:00 2001 From: Colin Willson Date: Sun, 24 May 2015 06:53:12 -0400 Subject: Fixed import Google Drive --- .../antennapod/activity/OpmlImportFromPathActivity.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java index c1bbb7e52..74d22d9ff 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java @@ -172,8 +172,19 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity { protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == CHOOSE_OPML_FILE) { - String filename = data.getData().getPath(); - startImport(new File(filename)); + Uri uri = data.getData(); + + if ("content".equals(uri.getScheme())) { + try { + Reader mReader = new InputStreamReader(getContentResolver().openInputStream(uri), LangUtils.UTF_8); + startImport(mReader); + } catch (FileNotFoundException e) { + Log.d(TAG, "File not found"); + } + } else { + String filename = uri.getPath(); + startImport(new File(filename)); + } } } -- cgit v1.2.3 From dfcfe15dd043e5957b196da072b5bf4aa93049ce Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Mon, 25 May 2015 21:48:06 -0400 Subject: * Less picky about the mime type's we accept. * Handling content and files the same way * Improved support for sharing files in fixes AntennaPod/AntennaPod#827 --- .../activity/OpmlImportFromIntentActivity.java | 19 ++++++++++++++----- .../activity/OpmlImportFromPathActivity.java | 17 ++++++----------- 2 files changed, 20 insertions(+), 16 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java index e42072ead..f7e9256c0 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromIntentActivity.java @@ -1,18 +1,27 @@ package de.danoeh.antennapod.activity; import android.app.AlertDialog; +import android.net.Uri; import android.os.Bundle; +import android.util.Log; + import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.util.LangUtils; import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; import java.io.InputStreamReader; +import java.io.Reader; import java.net.URL; /** Lets the user start the OPML-import process. */ public class OpmlImportFromIntentActivity extends OpmlImportBaseActivity { - @Override + private static final String TAG = "OpmlImportFromIntentAct"; + + + @Override protected void onCreate(Bundle savedInstanceState) { setTheme(UserPreferences.getTheme()); super.onCreate(savedInstanceState); @@ -20,10 +29,10 @@ public class OpmlImportFromIntentActivity extends OpmlImportBaseActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); try { - URL mOpmlURL = new URL(getIntent().getData().toString()); - BufferedReader in = new BufferedReader(new InputStreamReader(mOpmlURL.openStream(), - LangUtils.UTF_8)); - startImport(in); + Uri uri = getIntent().getData(); + + Reader mReader = new InputStreamReader(getContentResolver().openInputStream(uri), LangUtils.UTF_8); + startImport(mReader); } catch (Exception e) { new AlertDialog.Builder(this).setMessage("Cannot open XML - Reason: " + e.getMessage()).show(); } diff --git a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java index 74d22d9ff..feb3989bc 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/OpmlImportFromPathActivity.java @@ -31,7 +31,7 @@ import de.danoeh.antennapod.core.util.StorageUtils; */ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity { - private static final String TAG = "OpmlImportFromPathActivity"; + private static final String TAG = "OpmlImportFromPathAct"; private static final int CHOOSE_OPML_FILE = 1; @@ -174,16 +174,11 @@ public class OpmlImportFromPathActivity extends OpmlImportBaseActivity { if (resultCode == RESULT_OK && requestCode == CHOOSE_OPML_FILE) { Uri uri = data.getData(); - if ("content".equals(uri.getScheme())) { - try { - Reader mReader = new InputStreamReader(getContentResolver().openInputStream(uri), LangUtils.UTF_8); - startImport(mReader); - } catch (FileNotFoundException e) { - Log.d(TAG, "File not found"); - } - } else { - String filename = uri.getPath(); - startImport(new File(filename)); + try { + Reader mReader = new InputStreamReader(getContentResolver().openInputStream(uri), LangUtils.UTF_8); + startImport(mReader); + } catch (FileNotFoundException e) { + Log.d(TAG, "File not found"); } } } -- cgit v1.2.3 From 1bf803a6b21c1547cb66d679b927e983f670e2a2 Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Thu, 28 May 2015 11:41:36 +0200 Subject: Remove cancel, adjust strings --- .../de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java index 3d233817b..223fe17f6 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/DefaultActionButtonCallback.java @@ -119,7 +119,7 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { builder .setTitle(R.string.confirm_mobile_download_dialog_title) .setMessage(context.getText(R.string.confirm_mobile_download_dialog_message)) - .setPositiveButton(R.string.confirm_mobile_download_dialog_enable_temporarily, + .setPositiveButton(context.getText(R.string.confirm_mobile_download_dialog_enable_temporarily), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -135,7 +135,7 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { }); LongList queueIds = DBReader.getQueueIDList(context); if(!queueIds.contains(item.getId())) { - builder.setNeutralButton(R.string.confirm_mobile_download_dialog_only_add_to_queue, + builder.setNeutralButton(context.getText(R.string.confirm_mobile_download_dialog_only_add_to_queue), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -148,8 +148,7 @@ public class DefaultActionButtonCallback implements ActionButtonCallback { } else { builder.setMessage(context.getText(R.string.confirm_mobile_download_dialog_message)); } - builder.setNegativeButton(R.string.cancel_label, null) - .create() + builder.create() .show(); } } -- cgit v1.2.3 From ef518f3ec0a489d843da4af053767d9f59fa827f Mon Sep 17 00:00:00 2001 From: Martin Fietz Date: Thu, 28 May 2015 22:42:08 +0200 Subject: Handle failed refresh correctly, fix for nav drawer layout --- app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java index 13982f57d..0d2d5cfa0 100644 --- a/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/adapter/NavListAdapter.java @@ -12,6 +12,7 @@ import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.IconTextView; import android.widget.ImageView; +import android.widget.RelativeLayout; import android.widget.TextView; import com.squareup.picasso.Picasso; @@ -267,8 +268,12 @@ public class NavListAdapter extends BaseAdapter if(feed.hasLastUpdateFailed()) { + RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) holder.title.getLayoutParams(); + p.addRule(RelativeLayout.LEFT_OF, R.id.itxtvFailure); holder.failure.setVisibility(View.VISIBLE); } else { + RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) holder.title.getLayoutParams(); + p.addRule(RelativeLayout.LEFT_OF, R.id.txtvCount); holder.failure.setVisibility(View.GONE); } int feedUnreadItems = itemAccess.getNumberOfUnreadFeedItems(feed.getId()); @@ -277,7 +282,7 @@ public class NavListAdapter extends BaseAdapter holder.count.setText(String.valueOf(feedUnreadItems)); holder.count.setTypeface(holder.title.getTypeface()); } else { - holder.count.setVisibility(View.INVISIBLE); + holder.count.setVisibility(View.GONE); } return convertView; } -- cgit v1.2.3 From 9301a3bd98083ce82c414bc1927be960584f89dd Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Thu, 28 May 2015 17:49:59 -0400 Subject: fix NPE in FeedInfoActivity --- .../main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java index 24b684752..9a45b7db3 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java @@ -120,7 +120,11 @@ public class FeedInfoActivity extends ActionBarActivity { }); txtvTitle.setText(feed.getTitle()); - txtvDescription.setText(feed.getDescription().trim()); + String description = feed.getDescription(); + if (description == null) { + description = ""; + } + txtvDescription.setText(description.trim()); if (feed.getAuthor() != null) { txtvAuthor.setText(feed.getAuthor()); } -- cgit v1.2.3 From 8ed3f95ec5d5c2c1b1d0d40ee3c427b92ae9f100 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Thu, 28 May 2015 17:52:48 -0400 Subject: made description use a little more compact --- .../main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'app/src/main/java/de/danoeh') diff --git a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java index 9a45b7db3..5f76a20a8 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/FeedInfoActivity.java @@ -121,10 +121,7 @@ public class FeedInfoActivity extends ActionBarActivity { txtvTitle.setText(feed.getTitle()); String description = feed.getDescription(); - if (description == null) { - description = ""; - } - txtvDescription.setText(description.trim()); + txtvDescription.setText((description != null) ? description.trim() : ""); if (feed.getAuthor() != null) { txtvAuthor.setText(feed.getAuthor()); } -- cgit v1.2.3 From 9e7bb5ce738cdfa4876824e55cc24e06572be32c Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Thu, 28 May 2015 17:54:41 -0400 Subject: fixed NPE on navDrawerData --- .../main/java/de/danoeh/antennapod/activity/MainActivity.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'app/src/main/java/de/danoeh') 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 d62612c76..0645c4620 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -365,10 +365,12 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity return -1; } else { // last fragment was not a list, but a feed long feedId = Long.parseLong(lastFragment); - List feeds = navDrawerData.feeds; - for (int i = 0; i < feeds.size(); i++) { - if (feeds.get(i).getId() == feedId) { - return i + navAdapter.getSubscriptionOffset(); + if (navDrawerData != null) { + List feeds = navDrawerData.feeds; + for (int i = 0; i < feeds.size(); i++) { + if (feeds.get(i).getId() == feedId) { + return i + navAdapter.getSubscriptionOffset(); + } } } return -1; -- cgit v1.2.3 From e903a13a554b6f4226120a99d1df53395386eab0 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Sat, 6 Jun 2015 14:22:26 -0400 Subject: Avoid IllegalStateExceptions commitAllowingStateLoss should do this for us. As noted in the TODO there is probably a better way, but now is not time. --- app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'app/src/main/java/de/danoeh') 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 0645c4620..254749cd6 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java @@ -332,7 +332,13 @@ public class MainActivity extends ActionBarActivity implements NavDrawerActivity FragmentTransaction t = fragmentManager.beginTransaction(); t.replace(R.id.main_view, fragment, "main"); fragmentManager.popBackStack(); - t.commit(); + // TODO: we have to allow state loss here + // since this function can get called from an AsyncTask which + // could be finishing after our app has already committed state + // and is about to get shutdown. What we *should* do is + // not commit anything in an AsyncTask, but that's a bigger + // change than we want now. + t.commitAllowingStateLoss(); if (navAdapter != null) { navAdapter.notifyDataSetChanged(); } -- cgit v1.2.3 From 1e49bacc9507b0137ec4c46b3622974f8ad729e0 Mon Sep 17 00:00:00 2001 From: Tom Hennen Date: Wed, 10 Jun 2015 17:24:46 -0400 Subject: Fixes AntennaPod/AntennaPod#868 --- .../antennapod/activity/gpoddernet/GpodnetAuthenticationActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/src/main/java/de/danoeh') 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 511115b3c..28c2b7206 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 @@ -97,7 +97,7 @@ public class GpodnetAuthenticationActivity extends ActionBarActivity { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: - NavUtils.navigateUpFromSameTask(this); + finish(); return true; } return super.onOptionsItemSelected(item); -- cgit v1.2.3