Fix for indicator, changes in context menus
This commit is contained in:
parent
4561f16f11
commit
298b02b0aa
|
@ -277,7 +277,7 @@ public class NavListAdapter extends BaseAdapter
|
||||||
holder.count.setText(String.valueOf(feedUnreadItems));
|
holder.count.setText(String.valueOf(feedUnreadItems));
|
||||||
holder.count.setTypeface(holder.title.getTypeface());
|
holder.count.setTypeface(holder.title.getTypeface());
|
||||||
} else {
|
} else {
|
||||||
holder.count.setVisibility(View.GONE);
|
holder.count.setVisibility(View.INVISIBLE);
|
||||||
}
|
}
|
||||||
return convertView;
|
return convertView;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,8 @@ import android.os.Handler;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.view.MenuItemCompat;
|
import android.support.v4.view.MenuItemCompat;
|
||||||
import android.support.v7.widget.SearchView;
|
import android.support.v7.widget.SearchView;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.ContextMenu;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
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.DBReader;
|
||||||
import de.danoeh.antennapod.core.storage.DBTasks;
|
import de.danoeh.antennapod.core.storage.DBTasks;
|
||||||
import de.danoeh.antennapod.core.storage.DBWriter;
|
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.storage.DownloadRequester;
|
||||||
import de.danoeh.antennapod.core.util.LongList;
|
import de.danoeh.antennapod.core.util.LongList;
|
||||||
|
import de.danoeh.antennapod.menuhandler.FeedItemMenuHandler;
|
||||||
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
|
import de.danoeh.antennapod.menuhandler.MenuItemUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -67,6 +71,7 @@ public class AllEpisodesFragment extends Fragment {
|
||||||
private AllEpisodesListAdapter listAdapter;
|
private AllEpisodesListAdapter listAdapter;
|
||||||
private TextView txtvEmpty;
|
private TextView txtvEmpty;
|
||||||
private ProgressBar progLoading;
|
private ProgressBar progLoading;
|
||||||
|
private ContextMenu contextMenu;
|
||||||
|
|
||||||
private List<FeedItem> episodes;
|
private List<FeedItem> episodes;
|
||||||
private LongList queuedItemsIds;
|
private LongList queuedItemsIds;
|
||||||
|
@ -293,6 +298,8 @@ public class AllEpisodesFragment extends Fragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
registerForContextMenu(listView);
|
||||||
|
|
||||||
if (!itemsLoaded) {
|
if (!itemsLoaded) {
|
||||||
progLoading.setVisibility(View.VISIBLE);
|
progLoading.setVisibility(View.VISIBLE);
|
||||||
txtvEmpty.setVisibility(View.GONE);
|
txtvEmpty.setVisibility(View.GONE);
|
||||||
|
@ -307,6 +314,55 @@ public class AllEpisodesFragment extends Fragment {
|
||||||
return root;
|
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() {
|
private void onFragmentLoaded() {
|
||||||
if (listAdapter == null) {
|
if (listAdapter == null) {
|
||||||
listAdapter = new AllEpisodesListAdapter(activity.get(), itemAccess,
|
listAdapter = new AllEpisodesListAdapter(activity.get(), itemAccess,
|
||||||
|
|
|
@ -26,6 +26,7 @@ import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.ListAdapter;
|
import android.widget.ListAdapter;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.joanzapata.android.iconify.Iconify;
|
import com.joanzapata.android.iconify.Iconify;
|
||||||
|
@ -301,7 +302,7 @@ public class ItemlistFragment extends ListFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
contextMenu = menu;
|
contextMenu = menu;
|
||||||
FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, false, queuedItemsIds);
|
FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true, queuedItemsIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -428,6 +429,10 @@ public class ItemlistFragment extends ListFragment {
|
||||||
if(feed.getItemFilter() != null) {
|
if(feed.getItemFilter() != null) {
|
||||||
FeedItemFilter filter = feed.getItemFilter();
|
FeedItemFilter filter = feed.getItemFilter();
|
||||||
if(filter.getValues().length > 0) {
|
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));
|
txtvInformation.setText("{fa-info-circle} " + this.getString(R.string.filtered_label));
|
||||||
Iconify.addIcons(txtvInformation);
|
Iconify.addIcons(txtvInformation);
|
||||||
txtvInformation.setVisibility(View.VISIBLE);
|
txtvInformation.setVisibility(View.VISIBLE);
|
||||||
|
|
|
@ -329,7 +329,7 @@ public class QueueFragment extends Fragment {
|
||||||
for(FeedItem queueItem : queue) {
|
for(FeedItem queueItem : queue) {
|
||||||
queueIds.add(queueItem.getId());
|
queueIds.add(queueItem.getId());
|
||||||
}
|
}
|
||||||
FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, false, queueIds);
|
FeedItemMenuHandler.onPrepareMenu(contextMenuInterface, item, true, queueIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -352,7 +352,6 @@ public class QueueFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
super.onCreateView(inflater, container, savedInstanceState);
|
super.onCreateView(inflater, container, savedInstanceState);
|
||||||
|
@ -435,7 +434,6 @@ public class QueueFragment extends Fragment {
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
registerForContextMenu(listView);
|
registerForContextMenu(listView);
|
||||||
|
|
||||||
if (!itemsLoaded) {
|
if (!itemsLoaded) {
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@id/skip_episode_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/skip_episode_label" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/mark_read_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/mark_read_label" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/mark_unread_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/mark_unread_label" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/add_to_queue_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/add_to_queue_label" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/remove_from_queue_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/remove_from_queue_label" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/reset_position"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/reset_position" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/activate_auto_download"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/activate_auto_download" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/deactivate_auto_download"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/deactivate_auto_download" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/share_link_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/share_link_label" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/visit_website_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/visit_website_label" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/support_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/support_label" />
|
||||||
|
|
||||||
|
</menu>
|
|
@ -30,6 +30,23 @@
|
||||||
android:title="@string/remove_from_queue_label">
|
android:title="@string/remove_from_queue_label">
|
||||||
</item>
|
</item>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/reset_position"
|
||||||
|
custom:showAsAction="collapseActionView"
|
||||||
|
android:title="@string/reset_position">
|
||||||
|
</item>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/activate_auto_download"
|
||||||
|
custom:showAsAction="collapseActionView"
|
||||||
|
android:title="@string/activate_auto_download">
|
||||||
|
</item>
|
||||||
|
<item
|
||||||
|
android:id="@+id/deactivate_auto_download"
|
||||||
|
custom:showAsAction="collapseActionView"
|
||||||
|
android:title="@string/deactivate_auto_download">
|
||||||
|
</item>
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/share_link_item"
|
android:id="@+id/share_link_item"
|
||||||
custom:showAsAction="collapseActionView"
|
custom:showAsAction="collapseActionView"
|
||||||
|
|
|
@ -2,6 +2,11 @@
|
||||||
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@id/skip_episode_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/skip_episode_label" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/mark_read_item"
|
android:id="@+id/mark_read_item"
|
||||||
android:menuCategory="container"
|
android:menuCategory="container"
|
||||||
|
|
|
@ -7,13 +7,18 @@
|
||||||
android:menuCategory="container"
|
android:menuCategory="container"
|
||||||
android:title="@string/move_to_top_label" />
|
android:title="@string/move_to_top_label" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/move_to_bottom_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/move_to_bottom_label" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/mark_read_item"
|
android:id="@+id/mark_read_item"
|
||||||
android:menuCategory="container"
|
android:menuCategory="container"
|
||||||
android:title="@string/mark_read_label" />
|
android:title="@string/mark_read_label" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/mark_unread_item_item"
|
android:id="@+id/mark_unread_item"
|
||||||
android:menuCategory="container"
|
android:menuCategory="container"
|
||||||
android:title="@string/mark_unread_label" />
|
android:title="@string/mark_unread_label" />
|
||||||
|
|
||||||
|
@ -38,8 +43,18 @@
|
||||||
android:title="@string/deactivate_auto_download" />
|
android:title="@string/deactivate_auto_download" />
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/move_to_bottom_item"
|
android:id="@+id/share_link_item"
|
||||||
android:menuCategory="container"
|
android:menuCategory="container"
|
||||||
android:title="@string/move_to_bottom_label" />
|
android:title="@string/share_link_label" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/visit_website_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/visit_website_label" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/support_item"
|
||||||
|
android:menuCategory="container"
|
||||||
|
android:title="@string/support_label" />
|
||||||
|
|
||||||
|
|
||||||
</menu>
|
</menu>
|
|
@ -1060,9 +1060,11 @@ public class DownloadService extends Service {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (request.isDeleteOnFailure()) {
|
if(request.getFeedfileType() == Feed.FEEDFILETYPE_FEED) {
|
||||||
|
DBWriter.setFeedLastUpdateFailed(DownloadService.this, request.getFeedfileId(), true);
|
||||||
|
} else if (request.isDeleteOnFailure()) {
|
||||||
Log.d(TAG, "Ignoring failed download, deleteOnFailure=true");
|
Log.d(TAG, "Ignoring failed download, deleteOnFailure=true");
|
||||||
} else {
|
} else {
|
||||||
File dest = new File(request.getDestination());
|
File dest = new File(request.getDestination());
|
||||||
if (dest.exists() && request.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) {
|
if (dest.exists() && request.getFeedfileType() == FeedMedia.FEEDFILETYPE_FEEDMEDIA) {
|
||||||
Log.d(TAG, "File has been partially downloaded. Writing file url");
|
Log.d(TAG, "File has been partially downloaded. Writing file url");
|
||||||
|
|
|
@ -193,7 +193,7 @@ public class PlaybackServiceMediaPlayer {
|
||||||
if(oldMedia.hasAlmostEnded()) {
|
if(oldMedia.hasAlmostEnded()) {
|
||||||
Log.d(TAG, "smart mark as read");
|
Log.d(TAG, "smart mark as read");
|
||||||
FeedItem item = oldMedia.getItem();
|
FeedItem item = oldMedia.getItem();
|
||||||
// DBWriter.markItemRead(context, item, true, false);
|
DBWriter.markItemRead(context, item, true, false);
|
||||||
DBWriter.removeQueueItem(context, item, false);
|
DBWriter.removeQueueItem(context, item, false);
|
||||||
DBWriter.addItemToPlaybackHistory(context, oldMedia);
|
DBWriter.addItemToPlaybackHistory(context, oldMedia);
|
||||||
if (UserPreferences.isAutoDelete()) {
|
if (UserPreferences.isAutoDelete()) {
|
||||||
|
|
|
@ -319,7 +319,7 @@ public final class DBReader {
|
||||||
cursor.getInt(PodDBAdapter.IDX_FEED_SEL_STD_IS_PAGED) > 0,
|
cursor.getInt(PodDBAdapter.IDX_FEED_SEL_STD_IS_PAGED) > 0,
|
||||||
cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_NEXT_PAGE_LINK),
|
cursor.getString(PodDBAdapter.IDX_FEED_SEL_STD_NEXT_PAGE_LINK),
|
||||||
cursor.getString(cursor.getColumnIndex(PodDBAdapter.KEY_HIDE)),
|
cursor.getString(cursor.getColumnIndex(PodDBAdapter.KEY_HIDE)),
|
||||||
cursor.getInt(PodDBAdapter.IDX_FEED_SEL_STD_LAST_UPDATE_FAILED) > 0
|
cursor.getInt(cursor.getColumnIndex(PodDBAdapter.KEY_LAST_UPDATE_FAILED)) > 0
|
||||||
);
|
);
|
||||||
|
|
||||||
if (image != null) {
|
if (image != null) {
|
||||||
|
|
|
@ -302,6 +302,7 @@ public final class DBTasks {
|
||||||
*/
|
*/
|
||||||
public static void refreshFeed(Context context, Feed feed)
|
public static void refreshFeed(Context context, Feed feed)
|
||||||
throws DownloadRequestException {
|
throws DownloadRequestException {
|
||||||
|
Log.d(TAG, "id " + feed.getId());
|
||||||
refreshFeed(context, feed, false);
|
refreshFeed(context, feed, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -302,8 +302,6 @@ public class PodDBAdapter {
|
||||||
public static final int IDX_FEED_SEL_STD_NEXT_PAGE_LINK = 17;
|
public static final int IDX_FEED_SEL_STD_NEXT_PAGE_LINK = 17;
|
||||||
public static final int IDX_FEED_SEL_PREFERENCES_USERNAME = 18;
|
public static final int IDX_FEED_SEL_PREFERENCES_USERNAME = 18;
|
||||||
public static final int IDX_FEED_SEL_PREFERENCES_PASSWORD = 19;
|
public static final int IDX_FEED_SEL_PREFERENCES_PASSWORD = 19;
|
||||||
public static final int IDX_FEED_SEL_STD_LAST_UPDATE_FAILED = 20;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Select all columns from the feeditems-table except description and
|
* Select all columns from the feeditems-table except description and
|
||||||
|
@ -810,9 +808,10 @@ public class PodDBAdapter {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFeedLastUpdateFailed(long feedId, boolean failed) {
|
public void setFeedLastUpdateFailed(long feedId, boolean failed) {
|
||||||
ContentValues values = new ContentValues();
|
final String sql = "UPDATE " + TABLE_NAME_FEEDS
|
||||||
values.put(KEY_LAST_UPDATE_FAILED, failed ? 1 : 0);
|
+ " SET " + KEY_LAST_UPDATE_FAILED+ "=" + (failed ? "1" : "0")
|
||||||
db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[]{String.valueOf(feedId)});
|
+ " WHERE " + KEY_ID + "="+ feedId;
|
||||||
|
db.execSQL(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue