From 1ae54f6f8c62a487bfd72c03c6edf431b4a221cc Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Sun, 23 Dec 2018 22:07:27 +0100 Subject: [PATCH 01/14] further compatiblity fix for meadic.ccc --- app/build.gradle | 2 +- .../fragments/detail/VideoDetailFragment.java | 21 +++++++++++++------ .../list/channel/ChannelFragment.java | 4 ++-- .../resolver/VideoPlaybackResolver.java | 18 +++++++++------- .../schabi/newpipe/util/ExtractorHelper.java | 13 ++++++++---- .../newpipe/util/StreamItemAdapter.java | 14 +++++++++---- app/src/main/res/values/colors_services.xml | 11 ++++++++++ 7 files changed, 58 insertions(+), 25 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 782634a0b..59cf01e89 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ dependencies { exclude module: 'support-annotations' }) - implementation 'com.github.TeamNewPipe:NewPipeExtractor:f7c7b9df1a' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:73232a7ba' testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.23.0' diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index edca200d7..6738083c3 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -55,6 +55,7 @@ import org.schabi.newpipe.ReCaptchaActivity; import org.schabi.newpipe.download.DownloadDialog; import org.schabi.newpipe.extractor.InfoItem; import org.schabi.newpipe.extractor.NewPipe; +import org.schabi.newpipe.extractor.ServiceList; import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException; import org.schabi.newpipe.extractor.exceptions.ParsingException; import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor; @@ -699,13 +700,13 @@ public class VideoDetailFragment switch (id) { case R.id.menu_item_share: { if (currentInfo != null) { - shareUrl(currentInfo.getName(), currentInfo.getUrl()); + shareUrl(currentInfo.getName(), currentInfo.getOriginalUrl()); } return true; } case R.id.menu_item_openInBrowser: { if (currentInfo != null) { - openUrlInBrowser(currentInfo.getUrl()); + openUrlInBrowser(currentInfo.getOriginalUrl()); } return true; } @@ -1269,10 +1270,18 @@ public class VideoDetailFragment downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog"); } catch (Exception e) { - Toast.makeText(activity, - R.string.could_not_setup_download_menu, - Toast.LENGTH_LONG).show(); - e.printStackTrace(); + ErrorActivity.ErrorInfo info = ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR, + ServiceList.all() + .get(currentInfo + .getServiceId()) + .getServiceInfo() + .getName(), "", + R.string.could_not_setup_download_menu); + + ErrorActivity.reportError(getActivity(), + e, + getActivity().getClass(), + getActivity().findViewById(android.R.id.content), info); } } diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java index 6a3b3eb50..b9489ffa7 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/channel/ChannelFragment.java @@ -233,10 +233,10 @@ public class ChannelFragment extends BaseListInfoFragment { openRssFeed(); break; case R.id.menu_item_openInBrowser: - openUrlInBrowser(url); + openUrlInBrowser(currentInfo.getOriginalUrl()); break; case R.id.menu_item_share: - shareUrl(name, url); + shareUrl(name, currentInfo.getOriginalUrl()); break; default: return super.onOptionsItemSelected(item); diff --git a/app/src/main/java/org/schabi/newpipe/player/resolver/VideoPlaybackResolver.java b/app/src/main/java/org/schabi/newpipe/player/resolver/VideoPlaybackResolver.java index ad2b79523..c62dc1088 100644 --- a/app/src/main/java/org/schabi/newpipe/player/resolver/VideoPlaybackResolver.java +++ b/app/src/main/java/org/schabi/newpipe/player/resolver/VideoPlaybackResolver.java @@ -93,15 +93,17 @@ public class VideoPlaybackResolver implements PlaybackResolver { // Below are auxiliary media sources // Create subtitle sources - for (final SubtitlesStream subtitle : info.getSubtitles()) { - final String mimeType = PlayerHelper.subtitleMimeTypesOf(subtitle.getFormat()); - if (mimeType == null) continue; + if(info.getSubtitles() != null) { + for (final SubtitlesStream subtitle : info.getSubtitles()) { + final String mimeType = PlayerHelper.subtitleMimeTypesOf(subtitle.getFormat()); + if (mimeType == null) continue; - final Format textFormat = Format.createTextSampleFormat(null, mimeType, - SELECTION_FLAG_AUTOSELECT, PlayerHelper.captionLanguageOf(context, subtitle)); - final MediaSource textSource = dataSource.getSampleMediaSourceFactory() - .createMediaSource(Uri.parse(subtitle.getURL()), textFormat, TIME_UNSET); - mediaSources.add(textSource); + final Format textFormat = Format.createTextSampleFormat(null, mimeType, + SELECTION_FLAG_AUTOSELECT, PlayerHelper.captionLanguageOf(context, subtitle)); + final MediaSource textSource = dataSource.getSampleMediaSourceFactory() + .createMediaSource(Uri.parse(subtitle.getURL()), textFormat, TIME_UNSET); + mediaSources.add(textSource); + } } if (mediaSources.size() == 1) { diff --git a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java index e04c1e8d0..041f4933f 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java @@ -31,6 +31,7 @@ import org.schabi.newpipe.ReCaptchaActivity; import org.schabi.newpipe.extractor.Info; import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage; import org.schabi.newpipe.extractor.NewPipe; +import org.schabi.newpipe.extractor.SuggestionExtractor; import org.schabi.newpipe.extractor.channel.ChannelInfo; import org.schabi.newpipe.extractor.channel.ChannelInfoItem; import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException; @@ -46,6 +47,7 @@ import org.schabi.newpipe.report.UserAction; import java.io.IOException; import java.io.InterruptedIOException; +import java.util.Collections; import java.util.List; import io.reactivex.Maybe; @@ -95,10 +97,13 @@ public final class ExtractorHelper { public static Single> suggestionsFor(final int serviceId, final String query) { checkServiceId(serviceId); - return Single.fromCallable(() -> - NewPipe.getService(serviceId) - .getSuggestionExtractor() - .suggestionList(query)); + return Single.fromCallable(() -> { + SuggestionExtractor extractor = NewPipe.getService(serviceId) + .getSuggestionExtractor(); + return extractor != null + ? extractor.suggestionList(query) + : Collections.emptyList(); + }); } public static Single getStreamInfo(final int serviceId, diff --git a/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java b/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java index eb106f91d..49a7125ed 100644 --- a/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/util/StreamItemAdapter.java @@ -28,7 +28,8 @@ import io.reactivex.schedulers.Schedulers; import us.shandian.giga.util.Utility; /** - * A list adapter for a list of {@link Stream streams}, currently supporting {@link VideoStream} and {@link AudioStream}. + * A list adapter for a list of {@link Stream streams}, + * currently supporting {@link VideoStream}, {@link AudioStream} and {@link SubtitlesStream} */ public class StreamItemAdapter extends BaseAdapter { private final Context context; @@ -110,7 +111,10 @@ public class StreamItemAdapter extends BaseA } } } else if (stream instanceof AudioStream) { - qualityString = ((AudioStream) stream).getAverageBitrate() + "kbps"; + AudioStream audioStream = ((AudioStream) stream); + qualityString = audioStream.getAverageBitrate() > 0 + ? audioStream.getAverageBitrate() + "kbps" + : audioStream.getFormat().getName(); } else if (stream instanceof SubtitlesStream) { qualityString = ((SubtitlesStream) stream).getDisplayLanguageName(); if (((SubtitlesStream) stream).isAutoGenerated()) { @@ -154,8 +158,10 @@ public class StreamItemAdapter extends BaseA private final long[] streamSizes; private final String unknownSize; - public StreamSizeWrapper(List streamsList, Context context) { - this.streamsList = streamsList; + public StreamSizeWrapper(List sL, Context context) { + this.streamsList = sL != null + ? sL + : Collections.emptyList(); this.streamSizes = new long[streamsList.size()]; this.unknownSize = context == null ? "--.-" : context.getString(R.string.unknown_content); diff --git a/app/src/main/res/values/colors_services.xml b/app/src/main/res/values/colors_services.xml index 761b721d0..1cc464280 100644 --- a/app/src/main/res/values/colors_services.xml +++ b/app/src/main/res/values/colors_services.xml @@ -22,4 +22,15 @@ #FFFFFF #ff9100 + + #888888 + #555555 + #000000 + #777777 + + #888888 + #555555 + #FFFFFF + #777777 + \ No newline at end of file From e88a90f24288034481ec46075c9622a7ee27f04d Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Sun, 23 Dec 2018 22:41:42 +0100 Subject: [PATCH 02/14] add theming to mediaccc --- .../schabi/newpipe/util/ServiceHelper.java | 6 +- .../org/schabi/newpipe/util/ThemeHelper.java | 4 +- .../res/drawable-nodpi/place_holder_cloud.png | Bin 0 -> 8032 bytes .../res/drawable-nodpi/place_holder_gadse.png | Bin 0 -> 17166 bytes .../main/res/values-v21/styles_services.xml | 18 ++++++ app/src/main/res/values/colors_services.xml | 18 +++--- app/src/main/res/values/styles_services.xml | 20 ++++++ assets/media_gadse.svg | 60 ++++++++++++++++++ 8 files changed, 114 insertions(+), 12 deletions(-) create mode 100644 app/src/main/res/drawable-nodpi/place_holder_cloud.png create mode 100644 app/src/main/res/drawable-nodpi/place_holder_gadse.png create mode 100644 assets/media_gadse.svg diff --git a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java index 7c781eb14..da0d33809 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java @@ -24,9 +24,11 @@ public class ServiceHelper { case 0: return R.drawable.place_holder_youtube; case 1: - return R.drawable.place_holder_circle; + return R.drawable.place_holder_cloud; + case 2: + return R.drawable.place_holder_gadse; default: - return R.drawable.service; + return R.drawable.place_holder_circle; } } diff --git a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java index 1d1b66bf9..0c7861e16 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ThemeHelper.java @@ -137,7 +137,9 @@ public class ThemeHelper { else if (selectedTheme.equals(darkTheme)) themeName = "DarkTheme"; themeName += "." + service.getServiceInfo().getName(); - int resourceId = context.getResources().getIdentifier(themeName, "style", context.getPackageName()); + int resourceId = context + .getResources() + .getIdentifier(themeName, "style", context.getPackageName()); if (resourceId > 0) { return resourceId; diff --git a/app/src/main/res/drawable-nodpi/place_holder_cloud.png b/app/src/main/res/drawable-nodpi/place_holder_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..f78e846e155e78f04eafcf8d31459b2a0610a6b9 GIT binary patch literal 8032 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 B-o^j` literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-nodpi/place_holder_gadse.png b/app/src/main/res/drawable-nodpi/place_holder_gadse.png new file mode 100644 index 0000000000000000000000000000000000000000..f11dd57e536590d12225cb9349eb6f930957f8b7 GIT binary patch literal 17166 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:ejEC0`Y5 zT)8Pn!NjkiOYMLRBy*q+)n)~MXB{AK2Kus-p7Emlg7$WIFmG-4wx&GLG$hZD${6W^J~{rs+GvB$%vSa0bFRsq;Dj12#VTxQCs<>?EEX_jXP$ zgsV{L08s~Uc=r^xm+UiL!$_&EVhOwE+_5|WsT1w&)zpNp{|Z0`iyYo24SM-7GqRxW zCIH$2w;{0gS;7ci|b^~FyH{YlS{m6_Xz1w9WlHoz_G zyH9TpCeEV7)ETmMq6#pH!0K8cD~9)_ElA+&2EsSL7eKb(YB%rm9bpQ7jC?v&^swWr zpCBBocaujlKQR}HiNz-07@qTkR3YKP5d-(e>PR3*da{ftX zK$`%0^ziDab+Iexz9yTNbSaN07V?ep#aFp4j-%eKyl331Ts-E)P>caNw&J}qTeDL^ zVl(%Y$>S{hhAoL(@r|fL0A>E1r+jtU{F(-iL3IIz$jK-3{3J%J2CkLLdO2+RgR2v< zf@mg?E=ZPVG5E*t=5KQzUQgnh;K1{upf6~Q>lX3nM)Oq?aq|J?-nRj77Pu`|B%(%2 zBTPSI6PE~YF^k;t-X=@KfJW_e+-S}iDH|xW}*V6iLR>^E&I(~6;ns{i$HBPK@t}VU-d=tXZdL}F%CeGmP=y`@O zhI37xGGf0B?|#nf=mF6aE-zQ{M;;m(eVvh-+^LR{nGdG1y9&dpHW8o!p4{5ofINl& oU+u<({FI}F`TzInRp2Y1vq@f6_KuYR-(3OOS~}pXju5W@AD*IeMF0Q* literal 0 HcmV?d00001 diff --git a/app/src/main/res/values-v21/styles_services.xml b/app/src/main/res/values-v21/styles_services.xml index e3d6c24e2..6c118bc09 100644 --- a/app/src/main/res/values-v21/styles_services.xml +++ b/app/src/main/res/values-v21/styles_services.xml @@ -31,4 +31,22 @@ @color/dark_soundcloud_accent_color + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors_services.xml b/app/src/main/res/values/colors_services.xml index 1cc464280..ea90cb083 100644 --- a/app/src/main/res/values/colors_services.xml +++ b/app/src/main/res/values/colors_services.xml @@ -22,15 +22,15 @@ #FFFFFF #ff9100 - - #888888 - #555555 - #000000 - #777777 + + #9e9e9e + #616161 + #000000 + #afafaf - #888888 - #555555 - #FFFFFF - #777777 + #9e9e9e + #616161 + #FFFFFF + #afafaf \ No newline at end of file diff --git a/app/src/main/res/values/styles_services.xml b/app/src/main/res/values/styles_services.xml index 7ca9dacde..257b1905d 100644 --- a/app/src/main/res/values/styles_services.xml +++ b/app/src/main/res/values/styles_services.xml @@ -9,6 +9,7 @@ + + + + + + + + \ No newline at end of file diff --git a/assets/media_gadse.svg b/assets/media_gadse.svg new file mode 100644 index 000000000..eda875160 --- /dev/null +++ b/assets/media_gadse.svg @@ -0,0 +1,60 @@ + + + + + + image/svg+xml + + + + + + + + + From a1cc0897df286eb8307ed9527dd3a0c03b7d9c4b Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Sat, 26 Jan 2019 22:57:04 +0100 Subject: [PATCH 03/14] make frontend not crash on scrolling on ccc search --- .../org/schabi/newpipe/fragments/list/search/SearchFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java index 2833abb8d..66827bd92 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java @@ -736,6 +736,7 @@ public class SearchFragment @Override protected void loadMoreItems() { + if(nextPageUrl == null || nextPageUrl.isEmpty()) return; isLoading.set(true); showListFooter(true); if (searchDisposable != null) searchDisposable.dispose(); From d8c76d4c213be8e2af8bb0d1719f345dbbdd1956 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Mon, 28 Jan 2019 13:33:30 +0100 Subject: [PATCH 04/14] add conferences --- app/build.gradle | 2 +- .../main/java/org/schabi/newpipe/util/KioskTranslator.java | 4 ++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 59cf01e89..83da79219 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ dependencies { exclude module: 'support-annotations' }) - implementation 'com.github.TeamNewPipe:NewPipeExtractor:73232a7ba' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:150345929202a' testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.23.0' diff --git a/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java b/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java index 392892cef..a04e1145f 100644 --- a/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java +++ b/app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java @@ -31,6 +31,8 @@ public class KioskTranslator { return c.getString(R.string.top_50); case "New & hot": return c.getString(R.string.new_and_hot); + case "conferences": + return c.getString(R.string.conferences); default: return kioskId; } @@ -44,6 +46,8 @@ public class KioskTranslator { return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot); case "New & hot": return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot); + case "conferences": + return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot); default: return 0; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3756119a6..d83d4d3a4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -396,6 +396,7 @@ Trending Top 50 New & hot + Conferences %1$s/%2$s From d0a3125df4d228d65af6ac8e742f610c472deef8 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 29 Jan 2019 16:13:46 +0100 Subject: [PATCH 05/14] fox ogg --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 83da79219..af32cdc2c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ dependencies { exclude module: 'support-annotations' }) - implementation 'com.github.TeamNewPipe:NewPipeExtractor:150345929202a' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:d0efe8bd47' testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.23.0' From 6edbfe2a6f98c802fbb3e9f5b46e8cf81b3187b1 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 29 Jan 2019 17:20:30 +0100 Subject: [PATCH 06/14] add content filter to mediaccc --- app/build.gradle | 2 +- .../newpipe/fragments/list/search/SearchFragment.java | 9 +++++++-- .../main/java/org/schabi/newpipe/util/ServiceHelper.java | 2 ++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index af32cdc2c..75f966a9b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -57,7 +57,7 @@ dependencies { exclude module: 'support-annotations' }) - implementation 'com.github.TeamNewPipe:NewPipeExtractor:d0efe8bd47' + implementation 'com.github.TeamNewPipe:NewPipeExtractor:79b0a19d1af' testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.23.0' diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java index 66827bd92..c683f1af7 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/SearchFragment.java @@ -104,8 +104,13 @@ public class SearchFragment // this three represet the current search query @State protected String searchString; + + /** + * No content filter should add like contentfilter = all + * be aware of this when implementing an extractor. + */ @State - protected String[] contentFilter; + protected String[] contentFilter = new String[0]; @State protected String sortFilter; @@ -335,7 +340,7 @@ public class SearchFragment || (searchEditText != null && !TextUtils.isEmpty(searchEditText.getText()))) { search(!TextUtils.isEmpty(searchString) ? searchString - : searchEditText.getText().toString(), new String[0], ""); + : searchEditText.getText().toString(), this.contentFilter, ""); } else { if (searchEditText != null) { searchEditText.setText(""); diff --git a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java index da0d33809..c6ce3fec7 100644 --- a/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java +++ b/app/src/main/java/org/schabi/newpipe/util/ServiceHelper.java @@ -40,6 +40,8 @@ public class ServiceHelper { case "playlists": return c.getString(R.string.playlists); case "tracks": return c.getString(R.string.tracks); case "users": return c.getString(R.string.users); + case "conferences" : return c.getString(R.string.conferences); + case "events" : return c.getString(R.string.events); default: return filter; } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d83d4d3a4..462b331d2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -137,6 +137,7 @@ Videos Tracks Users + Events Yes Later Disabled From 14043c86f551b951becc1dc0f47e9f1c35b481a5 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Thu, 31 Jan 2019 13:24:02 +0100 Subject: [PATCH 07/14] fix backstack issue with mediaccc --- .../fragments/detail/VideoDetailFragment.java | 54 ++++++++++++------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java index 6738083c3..c346e1329 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/detail/VideoDetailFragment.java @@ -363,7 +363,8 @@ public class VideoDetailFragment } break; case R.id.detail_controls_download: - if (PermissionHelper.checkStoragePermissions(activity, PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) { + if (PermissionHelper.checkStoragePermissions(activity, + PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) { this.openDownloadDialog(); } break; @@ -447,7 +448,6 @@ public class VideoDetailFragment return; } - //Log.d(TAG, "toggleExpandRelatedVideos() called with: info = [" + info + "], from = [" + INITIAL_RELATED_VIDEOS + "]"); for (int i = INITIAL_RELATED_VIDEOS; i < info.getRelatedStreams().size(); i++) { InfoItem item = info.getRelatedStreams().get(i); //Log.d(TAG, "i = " + i); @@ -520,7 +520,9 @@ public class VideoDetailFragment infoItemBuilder.setOnStreamSelectedListener(new OnClickGesture() { @Override public void selected(StreamInfoItem selectedItem) { - selectAndLoadVideo(selectedItem.getServiceId(), selectedItem.getUrl(), selectedItem.getName()); + selectAndLoadVideo(selectedItem.getServiceId(), + selectedItem.getUrl(), + selectedItem.getName()); } @Override @@ -743,10 +745,16 @@ public class VideoDetailFragment boolean isExternalPlayerEnabled = PreferenceManager.getDefaultSharedPreferences(activity) .getBoolean(activity.getString(R.string.use_external_video_player_key), false); - sortedVideoStreams = ListHelper.getSortedStreamVideosList(activity, info.getVideoStreams(), info.getVideoOnlyStreams(), false); + sortedVideoStreams = ListHelper.getSortedStreamVideosList( + activity, + info.getVideoStreams(), + info.getVideoOnlyStreams(), + false); selectedVideoStreamIndex = ListHelper.getDefaultResolutionIndex(activity, sortedVideoStreams); - final StreamItemAdapter streamsAdapter = new StreamItemAdapter<>(activity, new StreamSizeWrapper<>(sortedVideoStreams, activity), isExternalPlayerEnabled); + final StreamItemAdapter streamsAdapter = + new StreamItemAdapter<>(activity, + new StreamSizeWrapper<>(sortedVideoStreams, activity), isExternalPlayerEnabled); spinnerToolbar.setAdapter(streamsAdapter); spinnerToolbar.setSelection(selectedVideoStreamIndex); spinnerToolbar.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @@ -771,17 +779,17 @@ public class VideoDetailFragment */ protected final LinkedList stack = new LinkedList<>(); - public void clearHistory() { - stack.clear(); - } - public void pushToStack(int serviceId, String videoUrl, String name) { if (DEBUG) { - Log.d(TAG, "pushToStack() called with: serviceId = [" + serviceId + "], videoUrl = [" + videoUrl + "], name = [" + name + "]"); + Log.d(TAG, "pushToStack() called with: serviceId = [" + + serviceId + "], videoUrl = [" + videoUrl + "], name = [" + name + "]"); } - if (stack.size() > 0 && stack.peek().getServiceId() == serviceId && stack.peek().getUrl().equals(videoUrl)) { - Log.d(TAG, "pushToStack() called with: serviceId == peek.serviceId = [" + serviceId + "], videoUrl == peek.getUrl = [" + videoUrl + "]"); + if (stack.size() > 0 + && stack.peek().getServiceId() == serviceId + && stack.peek().getUrl().equals(videoUrl)) { + Log.d(TAG, "pushToStack() called with: serviceId == peek.serviceId = [" + + serviceId + "], videoUrl == peek.getUrl = [" + videoUrl + "]"); return; } else { Log.d(TAG, "pushToStack() wasn't equal"); @@ -812,7 +820,11 @@ public class VideoDetailFragment // Get stack item from the new top StackItem peek = stack.peek(); - selectAndLoadVideo(peek.getServiceId(), peek.getUrl(), !TextUtils.isEmpty(peek.getTitle()) ? peek.getTitle() : ""); + selectAndLoadVideo(peek.getServiceId(), + peek.getUrl(), + !TextUtils.isEmpty(peek.getTitle()) + ? peek.getTitle() + : ""); return true; } @@ -832,9 +844,10 @@ public class VideoDetailFragment } public void prepareAndHandleInfo(final StreamInfo info, boolean scrollToTop) { - if (DEBUG) Log.d(TAG, "prepareAndHandleInfo() called with: info = [" + info + "], scrollToTop = [" + scrollToTop + "]"); + if (DEBUG) Log.d(TAG, "prepareAndHandleInfo() called with: info = [" + + info + "], scrollToTop = [" + scrollToTop + "]"); - setInitialData(info.getServiceId(), info.getOriginalUrl(), info.getName()); + setInitialData(info.getServiceId(), info.getUrl(), info.getName()); pushToStack(serviceId, url, name); showLoading(); @@ -1027,7 +1040,8 @@ public class VideoDetailFragment private void showContentWithAnimation(long duration, long delay, - @FloatRange(from = 0.0f, to = 1.0f) float translationPercent) { + @FloatRange(from = 0.0f, to = 1.0f) + float translationPercent) { int translationY = (int) (getResources().getDisplayMetrics().heightPixels * (translationPercent > 0.0f ? translationPercent : .06f)); @@ -1135,7 +1149,7 @@ public class VideoDetailFragment super.handleResult(info); setInitialData(info.getServiceId(), info.getOriginalUrl(), info.getName()); - pushToStack(serviceId, url, name); + //pushToStack(serviceId, url, name); animateView(thumbnailPlayButton, true, 200); videoTitleTextView.setText(name); @@ -1186,11 +1200,13 @@ public class VideoDetailFragment if (info.getDuration() > 0) { detailDurationView.setText(Localization.getDurationString(info.getDuration())); - detailDurationView.setBackgroundColor(ContextCompat.getColor(activity, R.color.duration_background_color)); + detailDurationView.setBackgroundColor( + ContextCompat.getColor(activity, R.color.duration_background_color)); animateView(detailDurationView, true, 100); } else if (info.getStreamType() == StreamType.LIVE_STREAM) { detailDurationView.setText(R.string.duration_live); - detailDurationView.setBackgroundColor(ContextCompat.getColor(activity, R.color.live_duration_background_color)); + detailDurationView.setBackgroundColor( + ContextCompat.getColor(activity, R.color.live_duration_background_color)); animateView(detailDurationView, true, 100); } else { detailDurationView.setVisibility(View.GONE); From 1bac5db6d5f98afde953f4687bfd101f95d5ef21 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Thu, 31 Jan 2019 18:13:00 +0100 Subject: [PATCH 08/14] add splash --- app/src/main/res/drawable/splash_background.xml | 12 ++++++++++++ app/src/main/res/drawable/splash_forground.png | Bin 0 -> 1515 bytes app/src/main/res/values/styles.xml | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/splash_background.xml create mode 100644 app/src/main/res/drawable/splash_forground.png diff --git a/app/src/main/res/drawable/splash_background.xml b/app/src/main/res/drawable/splash_background.xml new file mode 100644 index 000000000..a1fd3b719 --- /dev/null +++ b/app/src/main/res/drawable/splash_background.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/splash_forground.png b/app/src/main/res/drawable/splash_forground.png new file mode 100644 index 0000000000000000000000000000000000000000..dd033cebff379a128455298b594035f10aba0c0b GIT binary patch literal 1515 zcmV0*{z40JIigfQtMT5t7K z_7VkAT0to#WJO_@2d8?ehe9g|U$rnY%`SGKG0;RE5{#4xnvlv2FZ1tVon_PH%$zxM z)~vJEUccv=@B7aDX0N@!Z?CgA6bgkxp-?Ck3WY*uNSY|=*4T9vYDj96<0DB^W7ku8 zdI*uELz3Dhjf-7ZW$7ivvrp0jNfx`l%F%}q&n8K2v1_ap0|=3%qmouhIxBXqm7oqG zo-Rp?B%Khu=Bycn5YHA#vtrksEe!~fq;5&8B~6T7e|9t|#Pg@5Ws**e{W-E>h(bJ_ zlIF$!EW^Qw*ag(dWMHkNHIgogT}(()5#pH->`=zteriGhMgt3RVzTS@QxxJkA6N-& zR7Tx?%0fIh03DKER|egF4nhD%0`~#Clz6wFixAHlzzX0SN!Q0NrV(-z;<+05TyAK2 zUhHB9L#{#q47eNkq1Nq>j$KeaQ3CK(|fGusGU13Uuk50K(aT(|#)q-z7j@0a9+0GQcfGg|>%3cLaw z4UlFgZUnPR(zyZRAD1MBc+9NJ%oYJNfXyLN;JW>tk`@m~x1Y2SkC}AW~+cHzze{k0BJ4<*44WGivq;YM~KJF_M6!fpbc0TC{539 z|Dbco_ISK#B>tElOWY znlYGPtfUY)*6p|BE|cE?x&x${4s5P<`)Akl3zZe(F|(h|?0#Ig|5bn#BXHe*U0akY zFT`VJ-vZA92Lh!y9e5n*cY9J10!W%9X*KXZZc{|FIgA^EPBpX7`uo9=0g@+!q_MdF z+QmRqJMJEQ3@kFUx~}RfD@4+5xXlz721@Z0u(UQ`tDDLRku(Kp2W}3O;vn!Mu-wcB zJsGHs5J}^4s51HAXMgwFoq;_xoF5o5LoIq(hap#F4PnWY6B56AA>Sku3 z6bFEpf#=PvDfeHp6e4K?unf4DFqifM-T@vnv!>pm%u0x)QMhx&GeE-=*8$jqJ5PkT zho6rSNpo;lPeZ;Z(FecbM89TcA$GX{83>Vk{Kj**c~JvN&Ft4eIgXL6kYVbw zKgBIiTLZ=aA4v+SEl+O&p&m}N7k9#bFHrnGNp-k5k1#U)5O7)y8Ib4^5{UJ{LNnVD zvxroWkY=(QxYNvTiY)`GeT4jl8>cih1Pn!0g{%c0G_xOL7t))m3E71k0)7~~kiMwO zIb=Vu1ZZnz8Ib=G5^M+3&|GM_x_OX;eP5)WvN3*N2*VuPLh6vl((|Q z;5b6cdkbUIOGtUMXKZRh%DZn{1xe#1of5l_LZMJ76bgkxp-?Ck3WY-Q`~zzo@gGPa R<(U8g002ovPDHLkV1g8fmzDqk literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 8753b9295..a7686dedc 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -5,7 +5,7 @@ @android:color/transparent @android:color/transparent - @color/dark_background_color + @drawable/splash_background From 64547fc4a7e9bb4b355eda3668e78192b17f4534 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Tue, 5 Feb 2019 18:24:34 +0100 Subject: [PATCH 09/14] remove splash for older android --- .../res/drawable-v23/splash_background.xml | 12 ++++ .../main/res/drawable/splash_background.xml | 7 +- .../main/res/drawable/splash_forground.png | Bin 1515 -> 0 bytes .../main/res/drawable/splash_forground.xml | 10 +++ assets/pure_logo.svg | 67 ++++++++++++++++++ 5 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/drawable-v23/splash_background.xml delete mode 100644 app/src/main/res/drawable/splash_forground.png create mode 100644 app/src/main/res/drawable/splash_forground.xml create mode 100644 assets/pure_logo.svg diff --git a/app/src/main/res/drawable-v23/splash_background.xml b/app/src/main/res/drawable-v23/splash_background.xml new file mode 100644 index 000000000..a67fbc4a6 --- /dev/null +++ b/app/src/main/res/drawable-v23/splash_background.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/splash_background.xml b/app/src/main/res/drawable/splash_background.xml index a1fd3b719..5b805cffa 100644 --- a/app/src/main/res/drawable/splash_background.xml +++ b/app/src/main/res/drawable/splash_background.xml @@ -2,11 +2,6 @@ + android:drawable="@color/dark_background_color"/> - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/splash_forground.png b/app/src/main/res/drawable/splash_forground.png deleted file mode 100644 index dd033cebff379a128455298b594035f10aba0c0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1515 zcmV0*{z40JIigfQtMT5t7K z_7VkAT0to#WJO_@2d8?ehe9g|U$rnY%`SGKG0;RE5{#4xnvlv2FZ1tVon_PH%$zxM z)~vJEUccv=@B7aDX0N@!Z?CgA6bgkxp-?Ck3WY*uNSY|=*4T9vYDj96<0DB^W7ku8 zdI*uELz3Dhjf-7ZW$7ivvrp0jNfx`l%F%}q&n8K2v1_ap0|=3%qmouhIxBXqm7oqG zo-Rp?B%Khu=Bycn5YHA#vtrksEe!~fq;5&8B~6T7e|9t|#Pg@5Ws**e{W-E>h(bJ_ zlIF$!EW^Qw*ag(dWMHkNHIgogT}(()5#pH->`=zteriGhMgt3RVzTS@QxxJkA6N-& zR7Tx?%0fIh03DKER|egF4nhD%0`~#Clz6wFixAHlzzX0SN!Q0NrV(-z;<+05TyAK2 zUhHB9L#{#q47eNkq1Nq>j$KeaQ3CK(|fGusGU13Uuk50K(aT(|#)q-z7j@0a9+0GQcfGg|>%3cLaw z4UlFgZUnPR(zyZRAD1MBc+9NJ%oYJNfXyLN;JW>tk`@m~x1Y2SkC}AW~+cHzze{k0BJ4<*44WGivq;YM~KJF_M6!fpbc0TC{539 z|Dbco_ISK#B>tElOWY znlYGPtfUY)*6p|BE|cE?x&x${4s5P<`)Akl3zZe(F|(h|?0#Ig|5bn#BXHe*U0akY zFT`VJ-vZA92Lh!y9e5n*cY9J10!W%9X*KXZZc{|FIgA^EPBpX7`uo9=0g@+!q_MdF z+QmRqJMJEQ3@kFUx~}RfD@4+5xXlz721@Z0u(UQ`tDDLRku(Kp2W}3O;vn!Mu-wcB zJsGHs5J}^4s51HAXMgwFoq;_xoF5o5LoIq(hap#F4PnWY6B56AA>Sku3 z6bFEpf#=PvDfeHp6e4K?unf4DFqifM-T@vnv!>pm%u0x)QMhx&GeE-=*8$jqJ5PkT zho6rSNpo;lPeZ;Z(FecbM89TcA$GX{83>Vk{Kj**c~JvN&Ft4eIgXL6kYVbw zKgBIiTLZ=aA4v+SEl+O&p&m}N7k9#bFHrnGNp-k5k1#U)5O7)y8Ib4^5{UJ{LNnVD zvxroWkY=(QxYNvTiY)`GeT4jl8>cih1Pn!0g{%c0G_xOL7t))m3E71k0)7~~kiMwO zIb=Vu1ZZnz8Ib=G5^M+3&|GM_x_OX;eP5)WvN3*N2*VuPLh6vl((|Q z;5b6cdkbUIOGtUMXKZRh%DZn{1xe#1of5l_LZMJ76bgkxp-?Ck3WY-Q`~zzo@gGPa R<(U8g002ovPDHLkV1g8fmzDqk diff --git a/app/src/main/res/drawable/splash_forground.xml b/app/src/main/res/drawable/splash_forground.xml new file mode 100644 index 000000000..cfb650758 --- /dev/null +++ b/app/src/main/res/drawable/splash_forground.xml @@ -0,0 +1,10 @@ + + + diff --git a/assets/pure_logo.svg b/assets/pure_logo.svg new file mode 100644 index 000000000..4455b19c6 --- /dev/null +++ b/assets/pure_logo.svg @@ -0,0 +1,67 @@ + + + +image/svg+xml + + + + + + + + + + + + + + \ No newline at end of file From 1b6c49f621b5b11bc19e3b8fbefc80ecc646c3a6 Mon Sep 17 00:00:00 2001 From: Chinmaya Krishnan Mahesh Date: Fri, 8 Feb 2019 17:33:35 -0600 Subject: [PATCH 10/14] Fix padding in settings layout (Fixes #1866) --- app/src/main/res/xml/appearance_settings.xml | 7 +++++++ app/src/main/res/xml/content_settings.xml | 8 ++++++++ app/src/main/res/xml/debug_settings.xml | 3 +++ app/src/main/res/xml/download_settings.xml | 7 +++++++ app/src/main/res/xml/history_settings.xml | 6 ++++++ app/src/main/res/xml/main_settings.xml | 8 ++++++++ app/src/main/res/xml/update_settings.xml | 2 ++ app/src/main/res/xml/video_audio_settings.xml | 19 +++++++++++++++++++ 8 files changed, 60 insertions(+) diff --git a/app/src/main/res/xml/appearance_settings.xml b/app/src/main/res/xml/appearance_settings.xml index 437736ab0..b5f222130 100644 --- a/app/src/main/res/xml/appearance_settings.xml +++ b/app/src/main/res/xml/appearance_settings.xml @@ -1,9 +1,11 @@ diff --git a/app/src/main/res/xml/debug_settings.xml b/app/src/main/res/xml/debug_settings.xml index c0bb1505d..7059ee8ce 100644 --- a/app/src/main/res/xml/debug_settings.xml +++ b/app/src/main/res/xml/debug_settings.xml @@ -1,16 +1,19 @@ diff --git a/app/src/main/res/xml/main_settings.xml b/app/src/main/res/xml/main_settings.xml index 74450f77b..cd9dc3278 100644 --- a/app/src/main/res/xml/main_settings.xml +++ b/app/src/main/res/xml/main_settings.xml @@ -1,41 +1,49 @@ Date: Sat, 9 Feb 2019 12:30:14 +0100 Subject: [PATCH 11/14] added support for youtube-nocookie.com --- app/src/main/AndroidManifest.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 06d621016..db2d5f13c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -183,6 +183,19 @@ + + + + + + + + + + + + + From 9437f057d0e2a5f242cf8aae9ce5376c8b3b4f72 Mon Sep 17 00:00:00 2001 From: Redirion Date: Thu, 14 Feb 2019 09:52:46 +0100 Subject: [PATCH 12/14] Fix delayed ducking of Audio Scenario: listening to a video on NewPipe over Bluetooth and a Notification Sound causes audio focus event AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK. Problem: With the current implementation animateAudio would cause the audio to reach the target volume AFTER the notification sound is played, which is irritating and annoying. Solution: animateAudio should just be used on focusGain where it is sensible to increase audio gradually. On ducking event the reaction should be immediate. This very simple fix does this. Please approve. --- .../java/org/schabi/newpipe/player/helper/AudioReactor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java index 46d20c7e1..f148aed27 100644 --- a/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java +++ b/app/src/main/java/org/schabi/newpipe/player/helper/AudioReactor.java @@ -131,7 +131,7 @@ public class AudioReactor implements AudioManager.OnAudioFocusChangeListener, private void onAudioFocusLossCanDuck() { Log.d(TAG, "onAudioFocusLossCanDuck() called"); // Set the volume to 1/10 on ducking - animateAudio(player.getVolume(), DUCK_AUDIO_TO); + player.setVolume(DUCK_AUDIO_TO); } private void animateAudio(final float from, final float to) { From db9cf9564820fbf1bbd6087d3e6b3189d69d2e13 Mon Sep 17 00:00:00 2001 From: TobiGr Date: Sun, 17 Feb 2019 09:52:05 +0100 Subject: [PATCH 13/14] Remove old player from the manifest See https://github.com/TeamNewPipe/NewPipe/pull/1884 for more info --- app/src/main/AndroidManifest.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 06d621016..af6dda798 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,12 +35,6 @@ - - From 4dd572063ef5b38d9c31e66b306e47727702e106 Mon Sep 17 00:00:00 2001 From: kapodamy Date: Sun, 17 Feb 2019 16:59:35 -0300 Subject: [PATCH 14/14] fix crash while switching from popup to fullscreen player, or closing the popup player. --- .../main/java/org/schabi/newpipe/player/PopupVideoPlayer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java index f5c731ed9..8ea3d509c 100644 --- a/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java +++ b/app/src/main/java/org/schabi/newpipe/player/PopupVideoPlayer.java @@ -626,6 +626,7 @@ public final class PopupVideoPlayer extends Service { @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { super.onLoadingComplete(imageUri, view, loadedImage); + if (playerImpl == null) return; // rebuild notification here since remote view does not release bitmaps, // causing memory leaks resetNotification();