diff options
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java')
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java | 190 |
1 files changed, 61 insertions, 129 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java index 4ee7a06ad..5cf2c5eeb 100644 --- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java @@ -10,7 +10,9 @@ import android.content.SharedPreferences; import android.content.res.TypedArray; import android.graphics.Color; import android.net.Uri; +import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.util.Log; import android.view.ContextMenu; @@ -27,16 +29,11 @@ import android.widget.Toast; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MediaplayerInfoActivity; -import de.danoeh.antennapod.activity.MediaplayerInfoActivity.MediaplayerInfoContentFragment; -import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.preferences.UserPreferences; -import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.util.Converter; import de.danoeh.antennapod.core.util.IntentUtils; import de.danoeh.antennapod.core.util.NetworkUtils; import de.danoeh.antennapod.core.util.ShareUtils; -import de.danoeh.antennapod.core.util.ShownotesProvider; -import de.danoeh.antennapod.core.util.playback.Playable; import de.danoeh.antennapod.core.util.playback.PlaybackController; import de.danoeh.antennapod.core.util.playback.Timeline; import io.reactivex.Observable; @@ -47,7 +44,7 @@ import io.reactivex.schedulers.Schedulers; /** * Displays the description of a Playable object in a Webview. */ -public class ItemDescriptionFragment extends Fragment implements MediaplayerInfoContentFragment { +public class ItemDescriptionFragment extends Fragment { private static final String TAG = "ItemDescriptionFragment"; @@ -55,58 +52,16 @@ public class ItemDescriptionFragment extends Fragment implements MediaplayerInfo private static final String PREF_SCROLL_Y = "prefScrollY"; private static final String PREF_PLAYABLE_ID = "prefPlayableId"; - private static final String ARG_PLAYABLE = "arg.playable"; - private static final String ARG_FEEDITEM_ID = "arg.feeditem"; - - private static final String ARG_SAVE_STATE = "arg.saveState"; - private static final String ARG_HIGHLIGHT_TIMECODES = "arg.highlightTimecodes"; - private WebView webvDescription; - - private ShownotesProvider shownotesProvider; - private Playable media; - private Disposable webViewLoader; + private PlaybackController controller; /** * URL that was selected via long-press. */ private String selectedURL; - /** - * True if Fragment should save its state (e.g. scrolling position) in a - * shared preference. - */ - private boolean saveState; - - /** - * True if Fragment should highlight timecodes (e.g. time codes in the HH:MM:SS format). - */ - private boolean highlightTimecodes; - - public static ItemDescriptionFragment newInstance(Playable media, - boolean saveState, - boolean highlightTimecodes) { - ItemDescriptionFragment f = new ItemDescriptionFragment(); - Bundle args = new Bundle(); - args.putParcelable(ARG_PLAYABLE, media); - args.putBoolean(ARG_SAVE_STATE, saveState); - args.putBoolean(ARG_HIGHLIGHT_TIMECODES, highlightTimecodes); - f.setArguments(args); - return f; - } - - public static ItemDescriptionFragment newInstance(FeedItem item, boolean saveState, boolean highlightTimecodes) { - ItemDescriptionFragment f = new ItemDescriptionFragment(); - Bundle args = new Bundle(); - args.putLong(ARG_FEEDITEM_ID, item.getId()); - args.putBoolean(ARG_SAVE_STATE, saveState); - args.putBoolean(ARG_HIGHLIGHT_TIMECODES, highlightTimecodes); - f.setArguments(args); - return f; - } - @SuppressLint("NewApi") @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -126,6 +81,10 @@ public class ItemDescriptionFragment extends Fragment implements MediaplayerInfo webvDescription.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // Use cached resources, even if they have expired } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + webvDescription.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + webvDescription.getSettings().setUseWideViewPort(false); webvDescription.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); webvDescription.getSettings().setLoadWithOverviewMode(true); @@ -175,39 +134,6 @@ public class ItemDescriptionFragment extends Fragment implements MediaplayerInfo } } - @SuppressLint("NewApi") - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - Log.d(TAG, "Creating fragment"); - Bundle args = getArguments(); - saveState = args.getBoolean(ARG_SAVE_STATE, false); - highlightTimecodes = args.getBoolean(ARG_HIGHLIGHT_TIMECODES, false); - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - Bundle args = getArguments(); - if (args.containsKey(ARG_PLAYABLE)) { - if (media == null) { - media = args.getParcelable(ARG_PLAYABLE); - shownotesProvider = media; - } - load(); - } else if (args.containsKey(ARG_FEEDITEM_ID)) { - long id = getArguments().getLong(ARG_FEEDITEM_ID); - Observable.defer(() -> Observable.just(DBReader.getFeedItem(id))) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(feedItem -> { - shownotesProvider = feedItem; - load(); - }, error -> Log.e(TAG, Log.getStackTraceString(error))); - } - } - - private final View.OnLongClickListener webViewLongClickListener = new View.OnLongClickListener() { @Override @@ -300,22 +226,20 @@ public class ItemDescriptionFragment extends Fragment implements MediaplayerInfo if(webViewLoader != null) { webViewLoader.dispose(); } - if(shownotesProvider == null) { - return; - } webViewLoader = Observable.fromCallable(this::loadData) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(data -> { - webvDescription.loadDataWithBaseURL(null, data, "text/html", + webvDescription.loadDataWithBaseURL("https://127.0.0.1", data, "text/html", "utf-8", "about:blank"); Log.d(TAG, "Webview loaded"); }, error -> Log.e(TAG, Log.getStackTraceString(error))); } + @NonNull private String loadData() { - Timeline timeline = new Timeline(getActivity(), shownotesProvider); - return timeline.processShownotes(highlightTimecodes); + Timeline timeline = new Timeline(getActivity(), controller.getMedia()); + return timeline.processShownotes(true); } @Override @@ -325,42 +249,38 @@ public class ItemDescriptionFragment extends Fragment implements MediaplayerInfo } private void savePreference() { - if (saveState) { - Log.d(TAG, "Saving preferences"); - SharedPreferences prefs = getActivity().getSharedPreferences(PREF, - Activity.MODE_PRIVATE); - SharedPreferences.Editor editor = prefs.edit(); - if (media != null && webvDescription != null) { - Log.d(TAG, "Saving scroll position: " + webvDescription.getScrollY()); - editor.putInt(PREF_SCROLL_Y, webvDescription.getScrollY()); - editor.putString(PREF_PLAYABLE_ID, media.getIdentifier() - .toString()); - } else { - Log.d(TAG, "savePreferences was called while media or webview was null"); - editor.putInt(PREF_SCROLL_Y, -1); - editor.putString(PREF_PLAYABLE_ID, ""); - } - editor.commit(); + Log.d(TAG, "Saving preferences"); + SharedPreferences prefs = getActivity().getSharedPreferences(PREF, + Activity.MODE_PRIVATE); + SharedPreferences.Editor editor = prefs.edit(); + if (controller != null && controller.getMedia() != null && webvDescription != null) { + Log.d(TAG, "Saving scroll position: " + webvDescription.getScrollY()); + editor.putInt(PREF_SCROLL_Y, webvDescription.getScrollY()); + editor.putString(PREF_PLAYABLE_ID, controller.getMedia().getIdentifier() + .toString()); + } else { + Log.d(TAG, "savePreferences was called while media or webview was null"); + editor.putInt(PREF_SCROLL_Y, -1); + editor.putString(PREF_PLAYABLE_ID, ""); } + editor.commit(); } private boolean restoreFromPreference() { - if (saveState) { - Log.d(TAG, "Restoring from preferences"); - Activity activity = getActivity(); - if (activity != null) { - SharedPreferences prefs = activity.getSharedPreferences( - PREF, Activity.MODE_PRIVATE); - String id = prefs.getString(PREF_PLAYABLE_ID, ""); - int scrollY = prefs.getInt(PREF_SCROLL_Y, -1); - if (scrollY != -1 && media != null - && id.equals(media.getIdentifier().toString()) - && webvDescription != null) { - Log.d(TAG, "Restored scroll Position: " + scrollY); - webvDescription.scrollTo(webvDescription.getScrollX(), - scrollY); - return true; - } + Log.d(TAG, "Restoring from preferences"); + Activity activity = getActivity(); + if (activity != null) { + SharedPreferences prefs = activity.getSharedPreferences( + PREF, Activity.MODE_PRIVATE); + String id = prefs.getString(PREF_PLAYABLE_ID, ""); + int scrollY = prefs.getInt(PREF_SCROLL_Y, -1); + if (controller != null && scrollY != -1 && controller.getMedia() != null + && id.equals(controller.getMedia().getIdentifier().toString()) + && webvDescription != null) { + Log.d(TAG, "Restored scroll Position: " + scrollY); + webvDescription.scrollTo(webvDescription.getScrollX(), + scrollY); + return true; } } return false; @@ -377,15 +297,27 @@ public class ItemDescriptionFragment extends Fragment implements MediaplayerInfo } @Override - public void onMediaChanged(Playable media) { - if(this.media == media) { - return; - } - this.media = media; - this.shownotesProvider = media; - if (webvDescription != null) { - load(); - } + public void onStart() { + super.onStart(); + controller = new PlaybackController(getActivity(), false) { + @Override + public boolean loadMediaInfo() { + if (getMedia() == null) { + return false; + } + load(); + return true; + } + + }; + controller.init(); + load(); } + @Override + public void onStop() { + super.onStop(); + controller.release(); + controller = null; + } } |