Added FeedItem dialog
After Width: | Height: | Size: 225 B |
After Width: | Height: | Size: 217 B |
After Width: | Height: | Size: 197 B |
After Width: | Height: | Size: 201 B |
After Width: | Height: | Size: 267 B |
After Width: | Height: | Size: 262 B |
After Width: | Height: | Size: 264 B |
After Width: | Height: | Size: 264 B |
|
@ -0,0 +1,52 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/header"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ImageButton
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/butAction1"
|
||||
android:background="?attr/borderless_button"
|
||||
tools:ignore="ContentDescription"/>
|
||||
|
||||
<ImageButton
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/butAction2"
|
||||
android:background="?attr/borderless_button"
|
||||
tools:ignore="ContentDescription"/>
|
||||
|
||||
<ImageButton
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_weight="1"
|
||||
android:id="@+id/butMoreActions"
|
||||
android:background="?attr/borderless_button"
|
||||
android:src="?attr/ic_action_overflow"
|
||||
android:contentDescription="@string/butAction_label"/>
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="3dp"
|
||||
android:background="@color/bright_blue"/>
|
||||
|
||||
<WebView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/webview"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:custom="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@id/skip_episode_item"
|
||||
android:title="@string/skip_episode_label"
|
||||
custom:showAsAction="collapseActionView">
|
||||
</item>
|
||||
|
||||
<item
|
||||
android:id="@+id/mark_read_item"
|
||||
custom:showAsAction="collapseActionView"
|
||||
android:title="@string/mark_read_label">
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/mark_unread_item"
|
||||
custom:showAsAction="collapseActionView"
|
||||
android:title="@string/mark_unread_label">
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/add_to_queue_item"
|
||||
custom:showAsAction="collapseActionView"
|
||||
android:title="@string/add_to_queue_label">
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/remove_from_queue_item"
|
||||
custom:showAsAction="collapseActionView"
|
||||
android:title="@string/remove_from_queue_label">
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/share_link_item"
|
||||
custom:showAsAction="collapseActionView"
|
||||
android:title="@string/share_link_label">
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/visit_website_item"
|
||||
android:icon="?attr/location_web_site"
|
||||
custom:showAsAction="ifRoom|collapseActionView"
|
||||
android:title="@string/visit_website_label">
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/support_item"
|
||||
custom:showAsAction="collapseActionView"
|
||||
android:title="@string/support_label">
|
||||
</item>
|
||||
|
||||
</menu>
|
|
@ -1,40 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<attr name="action_about" format="reference" />
|
||||
<attr name="action_search" format="reference" />
|
||||
<attr name="action_settings" format="reference" />
|
||||
<attr name="action_stream" format="reference" />
|
||||
<attr name="av_download" format="reference" />
|
||||
<attr name="av_fast_forward" format="reference" />
|
||||
<attr name="av_pause" format="reference" />
|
||||
<attr name="av_play" format="reference" />
|
||||
<attr name="av_rewind" format="reference" />
|
||||
<attr name="content_discard" format="reference" />
|
||||
<attr name="content_new" format="reference" />
|
||||
<attr name="default_cover" format="reference" />
|
||||
<attr name="device_access_time" format="reference" />
|
||||
<attr name="location_web_site" format="reference" />
|
||||
<attr name="navigation_accept" format="reference" />
|
||||
<attr name="navigation_cancel" format="reference" />
|
||||
<attr name="navigation_expand" format="reference" />
|
||||
<attr name="navigation_collapse" format="reference" />
|
||||
<attr name="navigation_refresh" format="reference" />
|
||||
<attr name="navigation_up" format="reference" />
|
||||
<attr name="navigation_shownotes" format="reference" />
|
||||
<attr name="navigation_chapters" format="reference" />
|
||||
<attr name="social_share" format="reference" />
|
||||
<attr name="stat_playlist" format="reference" />
|
||||
<attr name="type_audio" format="reference" />
|
||||
<attr name="type_video" format="reference" />
|
||||
<attr name="borderless_button" format="reference" />
|
||||
<attr name="spinner_button" format="reference" />
|
||||
<attr name="overlay_drawable" format="reference" />
|
||||
<attr name="dragview_background" format="reference" />
|
||||
<attr name="dragview_float_background" format="reference" />
|
||||
<attr name="action_about" format="reference"/>
|
||||
<attr name="action_search" format="reference"/>
|
||||
<attr name="action_settings" format="reference"/>
|
||||
<attr name="action_stream" format="reference"/>
|
||||
<attr name="av_download" format="reference"/>
|
||||
<attr name="av_fast_forward" format="reference"/>
|
||||
<attr name="av_pause" format="reference"/>
|
||||
<attr name="av_play" format="reference"/>
|
||||
<attr name="av_rewind" format="reference"/>
|
||||
<attr name="content_discard" format="reference"/>
|
||||
<attr name="content_new" format="reference"/>
|
||||
<attr name="default_cover" format="reference"/>
|
||||
<attr name="device_access_time" format="reference"/>
|
||||
<attr name="location_web_site" format="reference"/>
|
||||
<attr name="navigation_accept" format="reference"/>
|
||||
<attr name="navigation_cancel" format="reference"/>
|
||||
<attr name="navigation_expand" format="reference"/>
|
||||
<attr name="navigation_collapse" format="reference"/>
|
||||
<attr name="navigation_refresh" format="reference"/>
|
||||
<attr name="navigation_up" format="reference"/>
|
||||
<attr name="navigation_shownotes" format="reference"/>
|
||||
<attr name="navigation_chapters" format="reference"/>
|
||||
<attr name="social_share" format="reference"/>
|
||||
<attr name="stat_playlist" format="reference"/>
|
||||
<attr name="type_audio" format="reference"/>
|
||||
<attr name="type_video" format="reference"/>
|
||||
<attr name="borderless_button" format="reference"/>
|
||||
<attr name="spinner_button" format="reference"/>
|
||||
<attr name="overlay_drawable" format="reference"/>
|
||||
<attr name="dragview_background" format="reference"/>
|
||||
<attr name="dragview_float_background" format="reference"/>
|
||||
<attr name="ic_action_overflow" format="reference"/>
|
||||
<!-- Used in itemdescription -->
|
||||
<attr name="non_transparent_background" format="reference" />
|
||||
<attr name="overlay_background" format="color" />
|
||||
<attr name="non_transparent_background" format="reference"/>
|
||||
<attr name="overlay_background" format="color"/>
|
||||
|
||||
<attr name="nav_drawer_background" format="color"/>
|
||||
<attr name="nav_drawer_toggle" format="reference"/>
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
<item name="attr/dragview_float_background">@color/white</item>
|
||||
<item name="attr/nav_drawer_background">@color/white</item>
|
||||
<item name="attr/nav_drawer_toggle">@drawable/ic_drawer</item>
|
||||
<item name="attr/ic_action_overflow">@drawable/ic_action_overflow</item>
|
||||
</style>
|
||||
|
||||
<style name="Theme.AntennaPod.Dark" parent="@style/Theme.AppCompat">
|
||||
|
@ -75,41 +76,45 @@
|
|||
<item name="attr/dragview_float_background">@color/black</item>
|
||||
<item name="attr/nav_drawer_background">#3B3B3B</item>
|
||||
<item name="attr/nav_drawer_toggle">@drawable/ic_drawer_dark</item>
|
||||
<item name="attr/ic_action_overflow">@drawable/ic_action_overflow_dark</item>
|
||||
|
||||
</style>
|
||||
|
||||
<style name="UndoBar">
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">48dp</item>
|
||||
<item name="android:layout_gravity">bottom</item>
|
||||
<item name="android:layout_marginLeft">8dp</item>
|
||||
<item name="android:layout_marginRight">8dp</item>
|
||||
<item name="android:layout_marginBottom">16dp</item>
|
||||
<item name="android:orientation">horizontal</item>
|
||||
<item name="android:background">@drawable/undobar</item>
|
||||
<item name="android:clickable">true</item>
|
||||
<item name="android:divider">@drawable/undobar_divider</item>
|
||||
<item name="android:layout_width">match_parent</item>
|
||||
<item name="android:layout_height">48dp</item>
|
||||
<item name="android:layout_gravity">bottom</item>
|
||||
<item name="android:layout_marginLeft">8dp</item>
|
||||
<item name="android:layout_marginRight">8dp</item>
|
||||
<item name="android:layout_marginBottom">16dp</item>
|
||||
<item name="android:orientation">horizontal</item>
|
||||
<item name="android:background">@drawable/undobar</item>
|
||||
<item name="android:clickable">true</item>
|
||||
<item name="android:divider">@drawable/undobar_divider</item>
|
||||
</style>
|
||||
|
||||
<style name="UndoBarMessage">
|
||||
<item name="android:layout_width">0dp</item>
|
||||
<item name="android:layout_weight">1</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_marginLeft">16dp</item>
|
||||
<item name="android:layout_gravity">center_vertical</item>
|
||||
<item name="android:layout_marginRight">16dp</item>
|
||||
<item name="android:textAppearance">?android:textAppearanceMedium</item>
|
||||
<item name="android:textColor">#fff</item>
|
||||
<item name="android:layout_width">0dp</item>
|
||||
<item name="android:layout_weight">1</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:layout_marginLeft">16dp</item>
|
||||
<item name="android:layout_gravity">center_vertical</item>
|
||||
<item name="android:layout_marginRight">16dp</item>
|
||||
<item name="android:textAppearance">?android:textAppearanceMedium</item>
|
||||
<item name="android:textColor">#fff</item>
|
||||
</style>
|
||||
|
||||
<style name="UndoBarButton">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">match_parent</item>
|
||||
<item name="android:paddingLeft">16dp</item>
|
||||
<item name="android:paddingRight">16dp</item>
|
||||
<item name="android:background">@drawable/undobar_button</item>
|
||||
<item name="android:drawableLeft">@drawable/ic_undobar_undo</item>
|
||||
<item name="android:drawablePadding">12dp</item>
|
||||
<item name="android:textAppearance">?android:textAppearanceSmall</item>
|
||||
<item name="android:textStyle">bold</item>
|
||||
<item name="android:textColor">#fff</item>
|
||||
<item name="android:text">@string/undo</item>
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">match_parent</item>
|
||||
<item name="android:paddingLeft">16dp</item>
|
||||
<item name="android:paddingRight">16dp</item>
|
||||
<item name="android:background">@drawable/undobar_button</item>
|
||||
<item name="android:drawableLeft">@drawable/ic_undobar_undo</item>
|
||||
<item name="android:drawablePadding">12dp</item>
|
||||
<item name="android:textAppearance">?android:textAppearanceSmall</item>
|
||||
<item name="android:textStyle">bold</item>
|
||||
<item name="android:textColor">#fff</item>
|
||||
<item name="android:text">@string/undo</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
|
|
@ -26,6 +26,10 @@ public class DefaultActionButtonCallback implements ActionButtonCallback {
|
|||
@Override
|
||||
public void onActionButtonPressed(final FeedItem item) {
|
||||
final FeedMedia media = item.getMedia();
|
||||
if (media == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media);
|
||||
if (!isDownloading && !media.isDownloaded()) {
|
||||
try {
|
||||
|
|
|
@ -0,0 +1,306 @@
|
|||
package de.danoeh.antennapod.dialog;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.TypedArray;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.widget.PopupMenu;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.webkit.WebSettings;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.Toast;
|
||||
import de.danoeh.antennapod.BuildConfig;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.storage.DBTasks;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
import de.danoeh.antennapod.storage.DownloadRequestException;
|
||||
import de.danoeh.antennapod.storage.DownloadRequester;
|
||||
import de.danoeh.antennapod.util.QueueAccess;
|
||||
import de.danoeh.antennapod.util.ShownotesProvider;
|
||||
import de.danoeh.antennapod.util.menuhandler.FeedItemMenuHandler;
|
||||
import org.apache.commons.lang3.StringEscapeUtils;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
/**
|
||||
* Shows information about a specific FeedItem and provides actions like playing, downloading, etc.
|
||||
*/
|
||||
public class FeedItemDialog extends Dialog {
|
||||
private static final String TAG = "FeedItemDialog";
|
||||
|
||||
private FeedItem item;
|
||||
private QueueAccess queue;
|
||||
|
||||
private View header;
|
||||
private WebView webvDescription;
|
||||
private ImageButton butAction1;
|
||||
private ImageButton butAction2;
|
||||
private ImageButton butMore;
|
||||
private PopupMenu popupMenu;
|
||||
|
||||
public FeedItemDialog(Context context, FeedItem item, QueueAccess queue) {
|
||||
super(context);
|
||||
if (item == null) throw new IllegalArgumentException("item = null");
|
||||
if (queue == null) throw new IllegalArgumentException("queue = null");
|
||||
this.item = item;
|
||||
this.queue = queue;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.feeditem_dialog);
|
||||
|
||||
header = findViewById(R.id.header);
|
||||
webvDescription = (WebView) findViewById(R.id.webview);
|
||||
butAction1 = (ImageButton) findViewById(R.id.butAction1);
|
||||
butAction2 = (ImageButton) findViewById(R.id.butAction2);
|
||||
butMore = (ImageButton) findViewById(R.id.butMoreActions);
|
||||
popupMenu = new PopupMenu(getContext(), butMore);
|
||||
|
||||
webvDescription.setWebViewClient(new WebViewClient());
|
||||
setTitle(item.getTitle());
|
||||
|
||||
if (UserPreferences.getTheme() == R.style.Theme_AntennaPod_Dark) {
|
||||
if (Build.VERSION.SDK_INT >= 11
|
||||
&& Build.VERSION.SDK_INT <= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
|
||||
webvDescription.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
|
||||
}
|
||||
webvDescription.setBackgroundColor(getContext().getResources().getColor(
|
||||
R.color.black));
|
||||
}
|
||||
webvDescription.getSettings().setUseWideViewPort(false);
|
||||
webvDescription.getSettings().setLayoutAlgorithm(
|
||||
WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
|
||||
webvDescription.getSettings().setLoadWithOverviewMode(true);
|
||||
webvDescription.setWebViewClient(new WebViewClient() {
|
||||
|
||||
@Override
|
||||
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
|
||||
try {
|
||||
getContext().startActivity(intent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
loadDescriptionWebview(item);
|
||||
|
||||
butAction1.setOnClickListener(new View.OnClickListener() {
|
||||
DefaultActionButtonCallback actionButtonCallback = new DefaultActionButtonCallback(getContext());
|
||||
|
||||
@Override
|
||||
|
||||
public void onClick(View v) {
|
||||
FeedMedia media = item.getMedia();
|
||||
if (media == null) {
|
||||
return;
|
||||
}
|
||||
actionButtonCallback.onActionButtonPressed(item);
|
||||
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
butAction2.setOnClickListener(new View.OnClickListener()
|
||||
|
||||
{
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
FeedMedia media = item.getMedia();
|
||||
if (media == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!media.isDownloaded()) {
|
||||
DBTasks.playMedia(getContext(), media, true, true, true);
|
||||
dismiss();
|
||||
} else {
|
||||
DBWriter.deleteFeedMediaOfItem(getContext(), media.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
butMore.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
popupMenu.getMenu().clear();
|
||||
popupMenu.inflate(R.menu.feeditem_dialog);
|
||||
FeedItemMenuHandler.onPrepareMenu(popupMenuInterface, item, true, queue);
|
||||
popupMenu.show();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||
@Override
|
||||
public boolean onMenuItemClick(MenuItem menuItem) {
|
||||
|
||||
try {
|
||||
return FeedItemMenuHandler.onMenuItemClicked(getContext(), menuItem.getItemId(), item);
|
||||
} catch (DownloadRequestException e) {
|
||||
e.printStackTrace();
|
||||
Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_LONG).show();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
updateMenuAppearance();
|
||||
}
|
||||
|
||||
private final FeedItemMenuHandler.MenuInterface popupMenuInterface = new FeedItemMenuHandler.MenuInterface() {
|
||||
@Override
|
||||
public void setItemVisibility(int id, boolean visible) {
|
||||
MenuItem item = popupMenu.getMenu().findItem(id);
|
||||
if (item != null) {
|
||||
item.setVisible(visible);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
public void updateMenuAppearance() {
|
||||
if (item == null || queue == null) {
|
||||
Log.w(TAG, "UpdateMenuAppearance called while item or queue was null");
|
||||
return;
|
||||
}
|
||||
FeedMedia media = item.getMedia();
|
||||
if (media == null) {
|
||||
header.setVisibility(View.GONE);
|
||||
} else {
|
||||
header.setVisibility(View.VISIBLE);
|
||||
boolean isDownloading = DownloadRequester.getInstance().isDownloadingFile(media);
|
||||
TypedArray drawables = getContext().obtainStyledAttributes(new int[]{R.attr.av_play,
|
||||
R.attr.av_download, R.attr.action_stream, R.attr.content_discard, R.attr.navigation_cancel});
|
||||
|
||||
if (!media.isDownloaded()) {
|
||||
butAction2.setImageDrawable(drawables.getDrawable(2));
|
||||
butAction2.setContentDescription(getContext().getString(R.string.stream_label));
|
||||
} else {
|
||||
butAction2.setImageDrawable(drawables.getDrawable(3));
|
||||
butAction2.setContentDescription(getContext().getString(R.string.remove_episode_lable));
|
||||
}
|
||||
|
||||
if (isDownloading) {
|
||||
butAction1.setImageDrawable(drawables.getDrawable(4));
|
||||
butAction1.setContentDescription(getContext().getString(R.string.cancel_download_label));
|
||||
} else if (media.isDownloaded()) {
|
||||
butAction1.setImageDrawable(drawables.getDrawable(0));
|
||||
butAction1.setContentDescription(getContext().getString(R.string.play_label));
|
||||
} else {
|
||||
butAction1.setImageDrawable(drawables.getDrawable(1));
|
||||
butAction1.setContentDescription(getContext().getString(R.string.download_label));
|
||||
}
|
||||
|
||||
drawables.recycle();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void loadDescriptionWebview(final ShownotesProvider shownotesProvider) {
|
||||
AsyncTask<Void, Void, Void> loadTask = new AsyncTask<Void, Void, Void>() {
|
||||
String data;
|
||||
|
||||
|
||||
private String applyWebviewStyle(String textColor, String data) {
|
||||
final String WEBVIEW_STYLE = "<html><head><style type=\"text/css\"> * { color: %s; font-family: Helvetica; line-height: 1.3em; font-size: 11pt; } a { font-style: normal; text-decoration: none; font-weight: normal; color: #00A8DF; } img { display: block; margin: 10 auto; max-width: %s; height: auto; } body { margin: %dpx %dpx %dpx %dpx; }</style></head><body>%s</body></html>";
|
||||
final int pageMargin = (int) TypedValue.applyDimension(
|
||||
TypedValue.COMPLEX_UNIT_DIP, 8, getContext().getResources()
|
||||
.getDisplayMetrics()
|
||||
);
|
||||
return String.format(WEBVIEW_STYLE, textColor, "100%", pageMargin,
|
||||
pageMargin, pageMargin, pageMargin, data);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
super.onPostExecute(result);
|
||||
// /webvDescription.loadData(url, "text/html", "utf-8");
|
||||
if (FeedItemDialog.this.isShowing() && webvDescription != null) {
|
||||
webvDescription.loadDataWithBaseURL(null, data, "text/html",
|
||||
"utf-8", "about:blank");
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, "Webview loaded");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
if (BuildConfig.DEBUG)
|
||||
Log.d(TAG, "Loading Webview");
|
||||
try {
|
||||
Callable<String> shownotesLoadTask = shownotesProvider.loadShownotes();
|
||||
final String shownotes = shownotesLoadTask.call();
|
||||
|
||||
data = StringEscapeUtils.unescapeHtml4(shownotes);
|
||||
TypedArray res = getContext()
|
||||
.getTheme()
|
||||
.obtainStyledAttributes(
|
||||
new int[]{android.R.attr.textColorPrimary});
|
||||
int colorResource = res.getColor(0, 0);
|
||||
String colorString = String.format("#%06X",
|
||||
0xFFFFFF & colorResource);
|
||||
Log.i(TAG, "text color: " + colorString);
|
||||
res.recycle();
|
||||
data = applyWebviewStyle(colorString, data);
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
loadTask.execute();
|
||||
}
|
||||
|
||||
public void setItem(FeedItem item) {
|
||||
if (item == null) throw new IllegalArgumentException("item = null");
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
public void setItemFromCollection(Collection<FeedItem> items) {
|
||||
for (FeedItem item : items) {
|
||||
if (item.getId() == this.item.getId()) {
|
||||
setItem(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void setQueue(QueueAccess queue) {
|
||||
if (queue == null) throw new IllegalArgumentException("queue = null");
|
||||
this.queue = queue;
|
||||
}
|
||||
|
||||
public FeedItem getItem() {
|
||||
return item;
|
||||
}
|
||||
|
||||
public QueueAccess getQueue() {
|
||||
return queue;
|
||||
}
|
||||
}
|
|
@ -23,6 +23,7 @@ import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
|
|||
import de.danoeh.antennapod.adapter.InternalFeedItemlistAdapter;
|
||||
import de.danoeh.antennapod.asynctask.DownloadObserver;
|
||||
import de.danoeh.antennapod.asynctask.ImageLoader;
|
||||
import de.danoeh.antennapod.dialog.FeedItemDialog;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.Feed;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
|
@ -65,6 +66,8 @@ public class ItemlistFragment extends ListFragment {
|
|||
private DownloadObserver downloadObserver;
|
||||
private List<Downloader> downloaderList;
|
||||
|
||||
private FeedItemDialog feedItemDialog;
|
||||
|
||||
|
||||
/**
|
||||
* Creates new ItemlistFragment which shows the Feeditems of a specific
|
||||
|
@ -122,6 +125,7 @@ public class ItemlistFragment extends ListFragment {
|
|||
if (downloadObserver != null) {
|
||||
downloadObserver.onPause();
|
||||
}
|
||||
feedItemDialog = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -149,12 +153,16 @@ public class ItemlistFragment extends ListFragment {
|
|||
@Override
|
||||
public void onListItemClick(ListView l, View v, int position, long id) {
|
||||
FeedItem selection = adapter.getItem(position - l.getHeaderViewsCount());
|
||||
/*
|
||||
Intent showItem = new Intent(getActivity(), ItemviewActivity.class);
|
||||
showItem.putExtra(FeedlistFragment.EXTRA_SELECTED_FEED, selection
|
||||
.getFeed().getId());
|
||||
showItem.putExtra(EXTRA_SELECTED_FEEDITEM, selection.getId());
|
||||
|
||||
startActivity(showItem);
|
||||
*/
|
||||
feedItemDialog = new FeedItemDialog(activity.get(), selection, queue);
|
||||
feedItemDialog.show();
|
||||
}
|
||||
|
||||
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
|
||||
|
@ -200,6 +208,13 @@ public class ItemlistFragment extends ListFragment {
|
|||
setListShown(true);
|
||||
adapter.notifyDataSetChanged();
|
||||
|
||||
if (feedItemDialog != null && feedItemDialog.isShowing()) {
|
||||
feedItemDialog.setItemFromCollection(feed.getItems());
|
||||
feedItemDialog.setQueue(queue);
|
||||
feedItemDialog.updateMenuAppearance();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() {
|
||||
|
@ -208,6 +223,9 @@ public class ItemlistFragment extends ListFragment {
|
|||
if (adapter != null) {
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
if (feedItemDialog != null && feedItemDialog.isShowing()) {
|
||||
feedItemDialog.updateMenuAppearance();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -9,6 +9,7 @@ import android.support.v4.app.Fragment;
|
|||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import com.mobeta.android.dslv.DragSortListView;
|
||||
|
@ -17,6 +18,7 @@ import de.danoeh.antennapod.activity.MainActivity;
|
|||
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
|
||||
import de.danoeh.antennapod.adapter.NewEpisodesListAdapter;
|
||||
import de.danoeh.antennapod.asynctask.DownloadObserver;
|
||||
import de.danoeh.antennapod.dialog.FeedItemDialog;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
|
@ -56,6 +58,8 @@ public class NewEpisodesFragment extends Fragment {
|
|||
|
||||
private DownloadObserver downloadObserver = null;
|
||||
|
||||
private FeedItemDialog feedItemDialog;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
@ -101,6 +105,7 @@ public class NewEpisodesFragment extends Fragment {
|
|||
if (downloadObserver != null) {
|
||||
downloadObserver.onPause();
|
||||
}
|
||||
feedItemDialog = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -111,6 +116,18 @@ public class NewEpisodesFragment extends Fragment {
|
|||
txtvEmpty = (TextView) root.findViewById(android.R.id.empty);
|
||||
progLoading = (ProgressBar) root.findViewById(R.id.progLoading);
|
||||
|
||||
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
FeedItem item = (FeedItem) listAdapter.getItem(position - listView.getHeaderViewsCount());
|
||||
if (item != null) {
|
||||
feedItemDialog = new FeedItemDialog(activity.get(), item, queueAccess);
|
||||
feedItemDialog.show();
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
if (!itemsLoaded) {
|
||||
progLoading.setVisibility(View.VISIBLE);
|
||||
txtvEmpty.setVisibility(View.GONE);
|
||||
|
@ -133,6 +150,12 @@ public class NewEpisodesFragment extends Fragment {
|
|||
downloadObserver = new DownloadObserver(activity.get(), new Handler(), downloadObserverCallback);
|
||||
downloadObserver.onResume();
|
||||
}
|
||||
if (feedItemDialog != null && feedItemDialog.isShowing()) {
|
||||
feedItemDialog.setQueue(queueAccess);
|
||||
feedItemDialog.setItemFromCollection(unreadItems);
|
||||
feedItemDialog.setItemFromCollection(recentItems);
|
||||
feedItemDialog.updateMenuAppearance();
|
||||
}
|
||||
listAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
|
@ -142,6 +165,9 @@ public class NewEpisodesFragment extends Fragment {
|
|||
if (listAdapter != null) {
|
||||
listAdapter.notifyDataSetChanged();
|
||||
}
|
||||
if (feedItemDialog != null && feedItemDialog.isShowing()) {
|
||||
feedItemDialog.updateMenuAppearance();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -7,10 +7,12 @@ import android.os.Bundle;
|
|||
import android.os.Handler;
|
||||
import android.support.v4.app.ListFragment;
|
||||
import android.view.View;
|
||||
import android.widget.ListView;
|
||||
import de.danoeh.antennapod.adapter.ActionButtonCallback;
|
||||
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
|
||||
import de.danoeh.antennapod.adapter.InternalFeedItemlistAdapter;
|
||||
import de.danoeh.antennapod.asynctask.DownloadObserver;
|
||||
import de.danoeh.antennapod.dialog.FeedItemDialog;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
|
@ -36,6 +38,8 @@ public class PlaybackHistoryFragment extends ListFragment {
|
|||
private DownloadObserver downloadObserver;
|
||||
private List<Downloader> downloaderList;
|
||||
|
||||
private FeedItemDialog feedItemDialog;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
@ -67,6 +71,7 @@ public class PlaybackHistoryFragment extends ListFragment {
|
|||
if (downloadObserver != null) {
|
||||
downloadObserver.onPause();
|
||||
}
|
||||
feedItemDialog = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -91,6 +96,16 @@ public class PlaybackHistoryFragment extends ListFragment {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onListItemClick(ListView l, View v, int position, long id) {
|
||||
super.onListItemClick(l, v, position, id);
|
||||
FeedItem item = adapter.getItem(position - l.getHeaderViewsCount());
|
||||
if (item != null) {
|
||||
feedItemDialog = new FeedItemDialog(activity.get(), item, queue);
|
||||
feedItemDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
private EventDistributor.EventListener contentUpdate = new EventDistributor.EventListener() {
|
||||
|
||||
@Override
|
||||
|
@ -110,6 +125,11 @@ public class PlaybackHistoryFragment extends ListFragment {
|
|||
}
|
||||
setListShown(true);
|
||||
adapter.notifyDataSetChanged();
|
||||
if (feedItemDialog != null && feedItemDialog.isShowing()) {
|
||||
feedItemDialog.setItemFromCollection(playbackHistory);
|
||||
feedItemDialog.setQueue(queue);
|
||||
feedItemDialog.updateMenuAppearance();
|
||||
}
|
||||
}
|
||||
|
||||
private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() {
|
||||
|
@ -118,6 +138,9 @@ public class PlaybackHistoryFragment extends ListFragment {
|
|||
if (adapter != null) {
|
||||
adapter.notifyDataSetChanged();
|
||||
}
|
||||
if (feedItemDialog != null && feedItemDialog.isShowing()) {
|
||||
feedItemDialog.updateMenuAppearance();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -11,6 +11,7 @@ import android.util.Log;
|
|||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import com.mobeta.android.dslv.DragSortListView;
|
||||
|
@ -19,12 +20,14 @@ import de.danoeh.antennapod.activity.MainActivity;
|
|||
import de.danoeh.antennapod.adapter.DefaultActionButtonCallback;
|
||||
import de.danoeh.antennapod.adapter.QueueListAdapter;
|
||||
import de.danoeh.antennapod.asynctask.DownloadObserver;
|
||||
import de.danoeh.antennapod.dialog.FeedItemDialog;
|
||||
import de.danoeh.antennapod.feed.EventDistributor;
|
||||
import de.danoeh.antennapod.feed.FeedItem;
|
||||
import de.danoeh.antennapod.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.service.download.Downloader;
|
||||
import de.danoeh.antennapod.storage.DBReader;
|
||||
import de.danoeh.antennapod.storage.DBWriter;
|
||||
import de.danoeh.antennapod.util.QueueAccess;
|
||||
import de.danoeh.antennapod.util.UndoBarController;
|
||||
import de.danoeh.antennapod.util.gui.FeedItemUndoToken;
|
||||
|
||||
|
@ -56,6 +59,8 @@ public class QueueFragment extends Fragment {
|
|||
|
||||
private DownloadObserver downloadObserver = null;
|
||||
|
||||
private FeedItemDialog feedItemDialog;
|
||||
|
||||
/**
|
||||
* Download observer updates won't result in an upate of the list adapter if this is true.
|
||||
*/
|
||||
|
@ -108,6 +113,7 @@ public class QueueFragment extends Fragment {
|
|||
if (downloadObserver != null) {
|
||||
downloadObserver.onPause();
|
||||
}
|
||||
feedItemDialog = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -119,6 +125,16 @@ public class QueueFragment extends Fragment {
|
|||
progLoading = (ProgressBar) root.findViewById(R.id.progLoading);
|
||||
listView.setEmptyView(txtvEmpty);
|
||||
|
||||
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
FeedItem item = (FeedItem) listAdapter.getItem(position - listView.getHeaderViewsCount());
|
||||
if (item != null) {
|
||||
feedItemDialog = new FeedItemDialog(activity.get(), item, QueueAccess.ItemListAccess(queue));
|
||||
feedItemDialog.show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
listView.setRemoveListener(new DragSortListView.RemoveListener() {
|
||||
@Override
|
||||
|
@ -192,6 +208,11 @@ public class QueueFragment extends Fragment {
|
|||
downloadObserver.onResume();
|
||||
}
|
||||
listAdapter.notifyDataSetChanged();
|
||||
if (feedItemDialog != null && feedItemDialog.isShowing()) {
|
||||
feedItemDialog.setQueue(QueueAccess.ItemListAccess(queue));
|
||||
feedItemDialog.setItemFromCollection(queue);
|
||||
feedItemDialog.updateMenuAppearance();
|
||||
}
|
||||
}
|
||||
|
||||
private DownloadObserver.Callback downloadObserverCallback = new DownloadObserver.Callback() {
|
||||
|
@ -200,6 +221,9 @@ public class QueueFragment extends Fragment {
|
|||
if (listAdapter != null && !blockDownloadObserverUpdate) {
|
||||
listAdapter.notifyDataSetChanged();
|
||||
}
|
||||
if (feedItemDialog != null && feedItemDialog.isShowing()) {
|
||||
feedItemDialog.updateMenuAppearance();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|