summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2020-02-01 12:08:11 +0100
committerByteHamster <info@bytehamster.com>2020-02-01 12:09:16 +0100
commit5af5f30bb6d8a26407dc5647c829857f70000814 (patch)
tree6060d4c963fa9b01445b343222c0fb59ba37b321 /app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
parent8ed2102c85571efd2562a50c4cfedc0b2eb09459 (diff)
downloadAntennaPod-5af5f30bb6d8a26407dc5647c829857f70000814.zip
Reduced code duplication
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.java190
1 files changed, 18 insertions, 172 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 85978b761..112e0bcb7 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/ItemDescriptionFragment.java
@@ -1,40 +1,18 @@
package de.danoeh.antennapod.fragment;
-import android.annotation.SuppressLint;
import android.app.Activity;
-import android.content.ClipData;
-import android.content.Context;
-import android.content.Intent;
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 androidx.annotation.NonNull;
-import androidx.fragment.app.Fragment;
import android.util.Log;
-import android.view.ContextMenu;
-import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
-import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.webkit.WebSettings;
-import android.webkit.WebView;
-import android.webkit.WebViewClient;
-import android.widget.Toast;
-
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.MediaplayerInfoActivity;
-import de.danoeh.antennapod.core.preferences.UserPreferences;
-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 androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
import de.danoeh.antennapod.core.util.playback.PlaybackController;
import de.danoeh.antennapod.core.util.playback.Timeline;
+import de.danoeh.antennapod.view.ShownotesWebView;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
@@ -44,72 +22,29 @@ import io.reactivex.schedulers.Schedulers;
* Displays the description of a Playable object in a Webview.
*/
public class ItemDescriptionFragment extends Fragment {
-
private static final String TAG = "ItemDescriptionFragment";
private static final String PREF = "ItemDescriptionFragmentPrefs";
private static final String PREF_SCROLL_Y = "prefScrollY";
private static final String PREF_PLAYABLE_ID = "prefPlayableId";
- private WebView webvDescription;
+ private ShownotesWebView webvDescription;
private Disposable webViewLoader;
private PlaybackController controller;
- /**
- * URL that was selected via long-press.
- */
- private String selectedURL;
-
-
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "Creating view");
- webvDescription = new WebView(getActivity().getApplicationContext());
- webvDescription.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
-
- TypedArray ta = getActivity().getTheme().obtainStyledAttributes(new int[]
- {android.R.attr.colorBackground});
- boolean black = UserPreferences.getTheme() == R.style.Theme_AntennaPod_Dark
- || UserPreferences.getTheme() == R.style.Theme_AntennaPod_TrueBlack;
- int backgroundColor = ta.getColor(0, black ? Color.BLACK : Color.WHITE);
-
- ta.recycle();
- webvDescription.setBackgroundColor(backgroundColor);
- if (!NetworkUtils.networkAvailable()) {
- 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);
- webvDescription.setOnLongClickListener(webViewLongClickListener);
- webvDescription.setWebViewClient(new WebViewClient() {
-
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- if (Timeline.isTimecodeLink(url)) {
- onTimecodeLinkSelected(url);
- } else {
- IntentUtils.openInBrowser(getContext(), url);
- }
- return true;
+ webvDescription = new ShownotesWebView(getActivity().getApplicationContext());
+ webvDescription.setTimecodeSelectedListener(time -> {
+ if (controller != null) {
+ controller.seekTo(time);
}
-
- @Override
- public void onPageFinished(WebView view, String url) {
- super.onPageFinished(view, url);
- Log.d(TAG, "Page finished");
- // Restoring the scroll position might not always work
- view.postDelayed(ItemDescriptionFragment.this::restoreFromPreference, 50);
- }
-
});
-
+ webvDescription.setPageFinishedListener(() -> {
+ // Restoring the scroll position might not always work
+ webvDescription.postDelayed(ItemDescriptionFragment.this::restoreFromPreference, 50);
+ });
registerForContextMenu(webvDescription);
return webvDescription;
}
@@ -127,91 +62,14 @@ public class ItemDescriptionFragment extends Fragment {
}
}
- private final View.OnLongClickListener webViewLongClickListener = new View.OnLongClickListener() {
-
- @Override
- public boolean onLongClick(View v) {
- WebView.HitTestResult r = webvDescription.getHitTestResult();
- if (r != null
- && r.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE) {
- Log.d(TAG, "Link of webview was long-pressed. Extra: " + r.getExtra());
- selectedURL = r.getExtra();
- webvDescription.showContextMenu();
- return true;
- }
- selectedURL = null;
- return false;
- }
- };
-
- @SuppressLint("NewApi")
@Override
public boolean onContextItemSelected(MenuItem item) {
- boolean handled = selectedURL != null;
- if (selectedURL != null) {
- switch (item.getItemId()) {
- case R.id.open_in_browser_item:
- IntentUtils.openInBrowser(getContext(), selectedURL);
- break;
- case R.id.share_url_item:
- ShareUtils.shareLink(getActivity(), selectedURL);
- break;
- case R.id.copy_url_item:
- ClipData clipData = ClipData.newPlainText(selectedURL,
- selectedURL);
- android.content.ClipboardManager cm = (android.content.ClipboardManager) getActivity()
- .getSystemService(Context.CLIPBOARD_SERVICE);
- cm.setPrimaryClip(clipData);
- Toast t = Toast.makeText(getActivity(),
- R.string.copied_url_msg, Toast.LENGTH_SHORT);
- t.show();
- break;
- case R.id.go_to_position_item:
- if (Timeline.isTimecodeLink(selectedURL)) {
- onTimecodeLinkSelected(selectedURL);
- } else {
- Log.e(TAG, "Selected go_to_position_item, but URL was no timecode link: " + selectedURL);
- }
- break;
- default:
- handled = false;
- break;
-
- }
- selectedURL = null;
- }
- return handled;
-
- }
-
- @Override
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- if (selectedURL != null) {
- super.onCreateContextMenu(menu, v, menuInfo);
- if (Timeline.isTimecodeLink(selectedURL)) {
- menu.add(Menu.NONE, R.id.go_to_position_item, Menu.NONE,
- R.string.go_to_position_label);
- menu.setHeaderTitle(Converter.getDurationStringLong(Timeline.getTimecodeLinkTime(selectedURL)));
- } else {
- Uri uri = Uri.parse(selectedURL);
- final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
- if(IntentUtils.isCallable(getActivity(), intent)) {
- menu.add(Menu.NONE, R.id.open_in_browser_item, Menu.NONE,
- R.string.open_in_browser_label);
- }
- menu.add(Menu.NONE, R.id.copy_url_item, Menu.NONE,
- R.string.copy_url_label);
- menu.add(Menu.NONE, R.id.share_url_item, Menu.NONE,
- R.string.share_url_label);
- menu.setHeaderTitle(selectedURL);
- }
- }
+ return webvDescription.onContextItemSelected(item);
}
private void load() {
Log.d(TAG, "load()");
- if(webViewLoader != null) {
+ if (webViewLoader != null) {
webViewLoader.dispose();
}
webViewLoader = Observable.fromCallable(this::loadData)
@@ -238,8 +96,7 @@ public class ItemDescriptionFragment extends Fragment {
private void savePreference() {
Log.d(TAG, "Saving preferences");
- SharedPreferences prefs = getActivity().getSharedPreferences(PREF,
- Activity.MODE_PRIVATE);
+ 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());
@@ -251,15 +108,14 @@ public class ItemDescriptionFragment extends Fragment {
editor.putInt(PREF_SCROLL_Y, -1);
editor.putString(PREF_PLAYABLE_ID, "");
}
- editor.commit();
+ editor.apply();
}
private boolean restoreFromPreference() {
Log.d(TAG, "Restoring from preferences");
Activity activity = getActivity();
if (activity != null) {
- SharedPreferences prefs = activity.getSharedPreferences(
- PREF, Activity.MODE_PRIVATE);
+ 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
@@ -274,16 +130,6 @@ public class ItemDescriptionFragment extends Fragment {
return false;
}
- private void onTimecodeLinkSelected(String link) {
- int time = Timeline.getTimecodeLinkTime(link);
- if (getActivity() != null && getActivity() instanceof MediaplayerInfoActivity) {
- PlaybackController pc = ((MediaplayerInfoActivity) getActivity()).getPlaybackController();
- if (pc != null) {
- pc.seekTo(time);
- }
- }
- }
-
@Override
public void onStart() {
super.onStart();