Skip to content

Commit 8c9f2af

Browse files
authored
Merge pull request #5187 from TiA4f8R/share-improvements
Share improvements + fix crash when no default browser is set on some devices
2 parents b73eb94 + 594f0b1 commit 8c9f2af

48 files changed

Lines changed: 437 additions & 211 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/src/main/java/com/google/android/material/appbar/FlingBehavior.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import androidx.annotation.NonNull;
1111
import androidx.annotation.Nullable;
1212
import androidx.coordinatorlayout.widget.CoordinatorLayout;
13+
1314
import org.schabi.newpipe.R;
1415

1516
import java.lang.reflect.Field;

app/src/main/java/org/schabi/newpipe/App.java

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,16 @@
66
import android.content.SharedPreferences;
77
import android.os.Build;
88
import android.util.Log;
9+
910
import androidx.annotation.NonNull;
1011
import androidx.annotation.Nullable;
1112
import androidx.multidex.MultiDexApplication;
1213
import androidx.preference.PreferenceManager;
14+
1315
import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache;
1416
import com.nostra13.universalimageloader.core.ImageLoader;
1517
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
16-
import io.reactivex.rxjava3.disposables.Disposable;
17-
import io.reactivex.rxjava3.exceptions.CompositeException;
18-
import io.reactivex.rxjava3.exceptions.MissingBackpressureException;
19-
import io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException;
20-
import io.reactivex.rxjava3.exceptions.UndeliverableException;
21-
import io.reactivex.rxjava3.functions.Consumer;
22-
import io.reactivex.rxjava3.plugins.RxJavaPlugins;
23-
import java.io.IOException;
24-
import java.io.InterruptedIOException;
25-
import java.net.SocketException;
26-
import java.util.Arrays;
27-
import java.util.Collections;
28-
import java.util.List;
18+
2919
import org.acra.ACRA;
3020
import org.acra.config.ACRAConfigurationException;
3121
import org.acra.config.CoreConfiguration;
@@ -41,6 +31,21 @@
4131
import org.schabi.newpipe.util.ServiceHelper;
4232
import org.schabi.newpipe.util.StateSaver;
4333

34+
import java.io.IOException;
35+
import java.io.InterruptedIOException;
36+
import java.net.SocketException;
37+
import java.util.Arrays;
38+
import java.util.Collections;
39+
import java.util.List;
40+
41+
import io.reactivex.rxjava3.disposables.Disposable;
42+
import io.reactivex.rxjava3.exceptions.CompositeException;
43+
import io.reactivex.rxjava3.exceptions.MissingBackpressureException;
44+
import io.reactivex.rxjava3.exceptions.OnErrorNotImplementedException;
45+
import io.reactivex.rxjava3.exceptions.UndeliverableException;
46+
import io.reactivex.rxjava3.functions.Consumer;
47+
import io.reactivex.rxjava3.plugins.RxJavaPlugins;
48+
4449
/*
4550
* Copyright (C) Hans-Christoph Steiner 2016 <hans@eds.org>
4651
* App.java is part of NewPipe.

app/src/main/java/org/schabi/newpipe/DownloaderImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
import android.content.Context;
44
import android.os.Build;
5-
import androidx.preference.PreferenceManager;
65

76
import androidx.annotation.NonNull;
87
import androidx.annotation.Nullable;
8+
import androidx.preference.PreferenceManager;
99

1010
import org.schabi.newpipe.extractor.downloader.Downloader;
1111
import org.schabi.newpipe.extractor.downloader.Request;

app/src/main/java/org/schabi/newpipe/ImageDownloader.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.content.Context;
55
import android.content.SharedPreferences;
66
import android.content.res.Resources;
7+
78
import androidx.preference.PreferenceManager;
89

910
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;

app/src/main/java/org/schabi/newpipe/MainActivity.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020

2121
package org.schabi.newpipe;
2222

23-
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
24-
2523
import android.content.BroadcastReceiver;
2624
import android.content.Context;
2725
import android.content.Intent;
@@ -43,6 +41,7 @@
4341
import android.widget.ArrayAdapter;
4442
import android.widget.FrameLayout;
4543
import android.widget.Spinner;
44+
4645
import androidx.annotation.NonNull;
4746
import androidx.appcompat.app.ActionBar;
4847
import androidx.appcompat.app.ActionBarDrawerToggle;
@@ -53,10 +52,9 @@
5352
import androidx.fragment.app.Fragment;
5453
import androidx.fragment.app.FragmentManager;
5554
import androidx.preference.PreferenceManager;
55+
5656
import com.google.android.material.bottomsheet.BottomSheetBehavior;
57-
import java.util.ArrayList;
58-
import java.util.List;
59-
import java.util.Objects;
57+
6058
import org.schabi.newpipe.databinding.ActivityMainBinding;
6159
import org.schabi.newpipe.databinding.DrawerHeaderBinding;
6260
import org.schabi.newpipe.databinding.DrawerLayoutBinding;
@@ -89,6 +87,12 @@
8987
import org.schabi.newpipe.util.ThemeHelper;
9088
import org.schabi.newpipe.views.FocusOverlayView;
9189

90+
import java.util.ArrayList;
91+
import java.util.List;
92+
import java.util.Objects;
93+
94+
import static org.schabi.newpipe.util.Localization.assureCorrectAppLanguage;
95+
9296
public class MainActivity extends AppCompatActivity {
9397
private static final String TAG = "MainActivity";
9498
public static final boolean DEBUG = !BuildConfig.BUILD_TYPE.equals("release");

app/src/main/java/org/schabi/newpipe/RouterActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ private void showUnsupportedUrlDialog(final String url) {
188188
.setPositiveButton(R.string.open_in_browser,
189189
(dialog, which) -> ShareUtils.openUrlInBrowser(this, url))
190190
.setNegativeButton(R.string.share,
191-
(dialog, which) -> ShareUtils.shareUrl(this, "", url)) // no subject
191+
(dialog, which) -> ShareUtils.shareText(this, "", url)) // no subject
192192
.setNeutralButton(R.string.cancel, null)
193193
.setOnDismissListener(dialog -> finish())
194194
.show();

app/src/main/java/org/schabi/newpipe/about/AboutActivity.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,16 +146,17 @@ public View onCreateView(@NonNull final LayoutInflater inflater, final ViewGroup
146146
aboutBinding.appVersion.setText(BuildConfig.VERSION_NAME);
147147

148148
aboutBinding.githubLink.setOnClickListener(nv ->
149-
openUrlInBrowser(context, context.getString(R.string.github_url)));
149+
openUrlInBrowser(context, context.getString(R.string.github_url), false));
150150

151151
aboutBinding.donationLink.setOnClickListener(v ->
152-
openUrlInBrowser(context, context.getString(R.string.donation_url)));
152+
openUrlInBrowser(context, context.getString(R.string.donation_url), false));
153153

154154
aboutBinding.websiteLink.setOnClickListener(nv ->
155-
openUrlInBrowser(context, context.getString(R.string.website_url)));
155+
openUrlInBrowser(context, context.getString(R.string.website_url), false));
156156

157157
aboutBinding.privacyPolicyLink.setOnClickListener(v ->
158-
openUrlInBrowser(context, context.getString(R.string.privacy_policy_url)));
158+
openUrlInBrowser(context, context.getString(R.string.privacy_policy_url),
159+
false));
159160

160161
return aboutBinding.getRoot();
161162
}

app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java

Lines changed: 17 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import android.os.Handler;
1717
import android.os.Looper;
1818
import android.provider.Settings;
19-
import android.text.util.Linkify;
2019
import android.util.DisplayMetrics;
2120
import android.util.Log;
2221
import android.view.LayoutInflater;
@@ -101,6 +100,7 @@
101100
import org.schabi.newpipe.util.NavigationHelper;
102101
import org.schabi.newpipe.util.PermissionHelper;
103102
import org.schabi.newpipe.util.ShareUtils;
103+
import org.schabi.newpipe.util.TextLinkifier;
104104
import org.schabi.newpipe.util.ThemeHelper;
105105
import org.schabi.newpipe.views.AnimatedProgressBar;
106106
import org.schabi.newpipe.views.LargeTextMovementMethod;
@@ -112,10 +112,7 @@
112112
import java.util.concurrent.TimeUnit;
113113

114114
import icepick.State;
115-
import io.noties.markwon.Markwon;
116-
import io.noties.markwon.linkify.LinkifyPlugin;
117115
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
118-
import io.reactivex.rxjava3.core.Single;
119116
import io.reactivex.rxjava3.disposables.CompositeDisposable;
120117
import io.reactivex.rxjava3.disposables.Disposable;
121118
import io.reactivex.rxjava3.schedulers.Schedulers;
@@ -1232,28 +1229,20 @@ private void prepareDescription(final Description description) {
12321229
return;
12331230
}
12341231

1235-
if (description.getType() == Description.HTML) {
1236-
disposables.add(Single.just(description.getContent())
1237-
.map(descriptionText ->
1238-
HtmlCompat.fromHtml(descriptionText,
1239-
HtmlCompat.FROM_HTML_MODE_LEGACY))
1240-
.subscribeOn(Schedulers.computation())
1241-
.observeOn(AndroidSchedulers.mainThread())
1242-
.subscribe(spanned -> {
1243-
videoDescriptionView.setText(spanned);
1244-
videoDescriptionView.setVisibility(View.VISIBLE);
1245-
}));
1246-
} else if (description.getType() == Description.MARKDOWN) {
1247-
final Markwon markwon = Markwon.builder(requireContext())
1248-
.usePlugin(LinkifyPlugin.create())
1249-
.build();
1250-
markwon.setMarkdown(videoDescriptionView, description.getContent());
1251-
videoDescriptionView.setVisibility(View.VISIBLE);
1252-
} else {
1253-
//== Description.PLAIN_TEXT
1254-
videoDescriptionView.setAutoLinkMask(Linkify.WEB_URLS);
1255-
videoDescriptionView.setText(description.getContent(), TextView.BufferType.SPANNABLE);
1256-
videoDescriptionView.setVisibility(View.VISIBLE);
1232+
switch (description.getType()) {
1233+
case Description.HTML:
1234+
disposables.add(TextLinkifier.createLinksFromHtmlBlock(requireContext(),
1235+
description.getContent(), videoDescriptionView,
1236+
HtmlCompat.FROM_HTML_MODE_LEGACY));
1237+
break;
1238+
case Description.MARKDOWN:
1239+
disposables.add(TextLinkifier.createLinksFromMarkdownText(requireContext(),
1240+
description.getContent(), videoDescriptionView));
1241+
break;
1242+
case Description.PLAIN_TEXT: default:
1243+
disposables.add(TextLinkifier.createLinksFromPlainText(requireContext(),
1244+
description.getContent(), videoDescriptionView));
1245+
break;
12571246
}
12581247
}
12591248

@@ -1569,8 +1558,8 @@ public void handleResult(@NonNull final StreamInfo info) {
15691558
prepareDescription(info.getDescription());
15701559
updateProgressInfo(info);
15711560
initThumbnailViews(info);
1572-
showMetaInfoInTextView(info.getMetaInfo(), detailMetaInfoTextView, detailMetaInfoSeparator);
1573-
1561+
disposables.add(showMetaInfoInTextView(info.getMetaInfo(), detailMetaInfoTextView,
1562+
detailMetaInfoSeparator));
15741563

15751564
if (player == null || player.isStopped()) {
15761565
updateOverlayData(info.getName(), info.getUploaderName(), info.getThumbnailUrl());

app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package org.schabi.newpipe.fragments.list.channel;
22

33
import android.content.Context;
4-
import android.content.Intent;
5-
import android.net.Uri;
64
import android.os.Bundle;
75
import android.text.TextUtils;
86
import android.util.Log;
@@ -188,8 +186,7 @@ public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
188186
private void openRssFeed() {
189187
final ChannelInfo info = currentInfo;
190188
if (info != null) {
191-
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(info.getFeedUrl()));
192-
startActivity(intent);
189+
ShareUtils.openUrlInBrowser(requireContext(), info.getFeedUrl(), false);
193190
}
194191
}
195192

@@ -209,7 +206,7 @@ public boolean onOptionsItemSelected(final MenuItem item) {
209206
break;
210207
case R.id.menu_item_share:
211208
if (currentInfo != null) {
212-
ShareUtils.shareUrl(requireContext(), name, currentInfo.getOriginalUrl());
209+
ShareUtils.shareText(requireContext(), name, currentInfo.getOriginalUrl());
213210
}
214211
break;
215212
default:

app/src/main/java/org/schabi/newpipe/fragments/list/playlist/PlaylistFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ public boolean onOptionsItemSelected(final MenuItem item) {
242242
ShareUtils.openUrlInBrowser(requireContext(), url);
243243
break;
244244
case R.id.menu_item_share:
245-
ShareUtils.shareUrl(requireContext(), name, url);
245+
ShareUtils.shareText(requireContext(), name, url);
246246
break;
247247
case R.id.menu_item_bookmark:
248248
onBookmarkClicked();

0 commit comments

Comments
 (0)