-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
diff --git a/app/src/main/assets/mpl2.html b/app/src/main/assets/mpl2.html
index 5009391a0..5e988a70c 100644
--- a/app/src/main/assets/mpl2.html
+++ b/app/src/main/assets/mpl2.html
@@ -4,6 +4,7 @@
Mozilla Public License, version 2.0
+
Mozilla Public License Version 2.0
1. Definitions
diff --git a/app/src/main/java/org/schabi/newpipe/about/License.java b/app/src/main/java/org/schabi/newpipe/about/License.java
index 312ad5087..e51e1d0f1 100644
--- a/app/src/main/java/org/schabi/newpipe/about/License.java
+++ b/app/src/main/java/org/schabi/newpipe/about/License.java
@@ -50,6 +50,10 @@ public class License implements Parcelable {
public String getAbbreviation() {
return abbreviation;
}
+
+ public String getFilename() {
+ return filename;
+ }
@Override
public int describeContents() {
diff --git a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java
index 8b0e67d18..42e886d30 100644
--- a/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/about/LicenseFragment.java
@@ -8,17 +8,15 @@ import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
-import android.view.ContextMenu;
-import android.view.LayoutInflater;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
+import android.view.*;
import android.webkit.WebView;
import android.widget.TextView;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.util.ThemeHelper;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
@@ -58,7 +56,26 @@ public class LicenseFragment extends Fragment {
alert.setTitle(license.getName());
WebView wv = new WebView(context);
- wv.loadUrl(license.getContentUri().toString());
+ String licenseContent = "";
+ String webViewData;
+ try {
+ BufferedReader in = new BufferedReader(new InputStreamReader(context.getAssets().open(license.getFilename()), "UTF-8"));
+ String str;
+ while ((str = in.readLine()) != null) {
+ licenseContent += str;
+ }
+ in.close();
+
+ // split the HTML file and insert the stylesheet into the HEAD of the file
+ String[] insert = licenseContent.split("");
+ webViewData = insert[0] + ""
+ + insert[1];
+ } catch (Exception e) {
+ throw new NullPointerException("could not get license file:" + getLicenseStylesheet(context));
+ }
+ wv.loadData(webViewData, "text/html", "utf-8");
+
alert.setView(wv);
alert.setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
@@ -69,6 +86,32 @@ public class LicenseFragment extends Fragment {
alert.show();
}
+ public static String getLicenseStylesheet(Context context) {
+ return "body{padding:12px 15px;margin:0;background:#"
+ + getHexRGBColor(context,(ThemeHelper.isLightThemeSelected(context))
+ ? R.color.light_license_background_color
+ : R.color.dark_license_background_color)
+ + ";color:#"
+ + getHexRGBColor(context,(ThemeHelper.isLightThemeSelected(context))
+ ? R.color.light_license_text_color
+ : R.color.dark_license_text_color) + ";}"
+ + "a[href]{color:#"
+ + getHexRGBColor(context,(ThemeHelper.isLightThemeSelected(context))
+ ? R.color.light_youtube_primary_color
+ : R.color.dark_youtube_primary_color) + ";}"
+ + "pre{white-space: pre-wrap;}";
+ }
+
+ /**
+ * Cast R.color to a hexadecimal color value
+ * @param context the context to use
+ * @param color the color number from R.color
+ * @return a six characters long String with hexadecimal RGB values
+ */
+ public static String getHexRGBColor(Context context, int color) {
+ return context.getResources().getString(color).substring(3);
+ }
+
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 9f8a41bc5..3008f68ee 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -10,6 +10,8 @@
#48868686#1fa6a6a6#5a000000
+ #ffffff
+ #212121#222222
@@ -20,6 +22,8 @@
#48ffffff#1f717171#82000000
+ #424242
+ #ffffff#000
@@ -37,8 +41,8 @@
#e53935#fff
- #d6d6d6d
- #717171d
+ #d6d6d6
+ #717171#607D8B
From 0d2296917a791d26845ffdd7c4040480c867a901 Mon Sep 17 00:00:00 2001
From: Christian Schabesberger
Date: Sat, 23 Sep 2017 17:39:04 +0200
Subject: [PATCH 002/154] creating first prototype of kiosk page
---
app/build.gradle | 2 +-
.../newpipe/fragments/MainFragment.java | 17 +-
.../fragments/list/kisok/KioskFragment.java | 148 ++++++++++++++++++
.../schabi/newpipe/util/ExtractorHelper.java | 19 +++
app/src/main/res/layout/fragment_kiosk.xml | 64 ++++++++
app/src/main/res/layout/kiosk_header.xml | 23 +++
app/src/main/res/values/dimens.xml | 2 +
7 files changed, 273 insertions(+), 2 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/fragments/list/kisok/KioskFragment.java
create mode 100644 app/src/main/res/layout/fragment_kiosk.xml
create mode 100644 app/src/main/res/layout/kiosk_header.xml
diff --git a/app/build.gradle b/app/build.gradle
index 941dc72d7..742b00d4b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -45,7 +45,7 @@ dependencies {
exclude module: 'support-annotations'
}
- compile 'com.github.TeamNewPipe:NewPipeExtractor:7ae274b'
+ compile 'com.github.TeamNewPipe:NewPipeExtractor:7fffef5'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.10.19'
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
index 236f95968..6f313aee0 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -18,11 +18,16 @@ import android.view.ViewGroup;
import org.schabi.newpipe.BaseFragment;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.fragments.list.kisok.KioskFragment;
import org.schabi.newpipe.fragments.subscription.SubscriptionFragment;
import org.schabi.newpipe.util.NavigationHelper;
public class MainFragment extends BaseFragment implements TabLayout.OnTabSelectedListener {
private ViewPager viewPager;
+ private boolean showBlankTab = false;
+
+ //todo: FIX THIS URGENTLY
+ public int currentServiceId = 0; //for youtube
/*//////////////////////////////////////////////////////////////////////////
// Fragment's LifeCycle
@@ -115,7 +120,17 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
case 1:
return new SubscriptionFragment();
default:
- return new BlankFragment();
+ if(showBlankTab) {
+ return new BlankFragment();
+ } else {
+ try {
+ return KioskFragment.getInstance(currentServiceId);
+ } catch (Exception e) {
+ //todo: replace this with propper error reporting
+ e.printStackTrace();
+ return new BlankFragment();
+ }
+ }
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/kisok/KioskFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/kisok/KioskFragment.java
new file mode 100644
index 000000000..a1e5a960f
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/kisok/KioskFragment.java
@@ -0,0 +1,148 @@
+package org.schabi.newpipe.fragments.list.kisok;
+
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import org.schabi.newpipe.R;
+import org.schabi.newpipe.extractor.ListExtractor;
+import org.schabi.newpipe.extractor.NewPipe;
+import org.schabi.newpipe.extractor.StreamingService;
+import org.schabi.newpipe.extractor.UrlIdHandler;
+import org.schabi.newpipe.extractor.exceptions.ExtractionException;
+import org.schabi.newpipe.extractor.kiosk.KioskInfo;
+import org.schabi.newpipe.extractor.kiosk.KioskList;
+import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
+import org.schabi.newpipe.fragments.list.BaseListInfoFragment;
+import org.schabi.newpipe.fragments.list.channel.ChannelFragment;
+import org.schabi.newpipe.report.UserAction;
+import org.schabi.newpipe.util.ExtractorHelper;
+import org.schabi.newpipe.util.NavigationHelper;
+
+import io.reactivex.Single;
+
+import static org.schabi.newpipe.util.AnimationUtils.animateView;
+
+/**
+ * Created by Christian Schabesberger on 23.09.17.
+ *
+ * Copyright (C) Christian Schabesberger 2017
+ * KioskFragment.java is part of NewPipe.
+ *
+ * NewPipe is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * NewPipe is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with OpenHitboxStreams. If not, see .
+ */
+
+public class KioskFragment extends BaseListInfoFragment {
+
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Views
+ //////////////////////////////////////////////////////////////////////////*/
+
+ private View headerRootLayout;
+ private TextView headerTitleView;
+
+ public static KioskFragment getInstance(int serviceId)
+ throws ExtractionException {
+ KioskFragment instance = new KioskFragment();
+ StreamingService service = NewPipe.getService(serviceId);
+ String defaultKioskType = service.getKioskList().getDefaultKioskType();
+ UrlIdHandler defaultKioskTypeUrlIdHandler = service.getKioskList()
+ .getUrlIdHandlerByType(defaultKioskType);
+ instance.setInitialData(serviceId,
+ defaultKioskTypeUrlIdHandler.getUrl(defaultKioskType),
+ defaultKioskType);
+ return instance;
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // LifeCycle
+ //////////////////////////////////////////////////////////////////////////*/
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.fragment_kiosk, container, false);
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Init
+ //////////////////////////////////////////////////////////////////////////*/
+
+ protected View getListHeader() {
+ headerRootLayout = activity.getLayoutInflater().inflate(R.layout.kiosk_header, itemsList, false);
+ headerTitleView = headerRootLayout.findViewById(R.id.kiosk_title_view);
+
+ return headerRootLayout;
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Load and handle
+ //////////////////////////////////////////////////////////////////////////*/
+
+ @Override
+ public Single loadResult(boolean forceReload) {
+ String contentCountry = PreferenceManager
+ .getDefaultSharedPreferences(activity)
+ .getString(getString(R.string.search_language_key),
+ getString(R.string.default_language_value));
+ return ExtractorHelper.getKioskInfo(serviceId, url, contentCountry, forceReload);
+ }
+
+ @Override
+ public Single loadMoreItemsLogic() {
+ return ExtractorHelper.getMoreKisokItems(serviceId, url, currentNextItemsUrl);
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Contract
+ //////////////////////////////////////////////////////////////////////////*/
+
+ @Override
+ public void showLoading() {
+ super.showLoading();
+ animateView(headerRootLayout, false, 200);
+ animateView(itemsList, false, 100);
+ }
+
+ @Override
+ public void handleResult(@NonNull final KioskInfo result) {
+ super.handleResult(result);
+
+ animateView(headerRootLayout, true, 100);
+ headerTitleView.setText(result.type);
+
+ if (!result.errors.isEmpty()) {
+ showSnackBarError(result.errors,
+ UserAction.REQUESTED_PLAYLIST,
+ NewPipe.getNameOfService(result.service_id), result.url, 0);
+ }
+ }
+
+ @Override
+ public void handleNextItems(ListExtractor.NextItemsResult result) {
+ super.handleNextItems(result);
+
+ if (!result.errors.isEmpty()) {
+ showSnackBarError(result.errors,
+ UserAction.REQUESTED_PLAYLIST, NewPipe.getNameOfService(serviceId)
+ , "Get next page of: " + url, 0);
+ }
+ }
+}
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 5cf9f057e..856769da8 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
@@ -26,6 +26,7 @@ import org.schabi.newpipe.extractor.Info;
import org.schabi.newpipe.extractor.ListExtractor.NextItemsResult;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.channel.ChannelInfo;
+import org.schabi.newpipe.extractor.kiosk.KioskInfo;
import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
import org.schabi.newpipe.extractor.search.SearchEngine;
import org.schabi.newpipe.extractor.search.SearchResult;
@@ -124,6 +125,24 @@ public final class ExtractorHelper {
});
}
+ public static Single getKioskInfo(final int serviceId, final String url, final String contentCountry, boolean forceLoad) {
+ return checkCache(forceLoad, serviceId, url, Single.fromCallable(new Callable() {
+ @Override
+ public KioskInfo call() throws Exception {
+ return KioskInfo.getInfo(NewPipe.getService(serviceId), url, contentCountry);
+ }
+ }));
+ }
+
+ public static Single getMoreKisokItems(final int serviceId, final String url, final String nextStreamsUrl) {
+ return Single.fromCallable(new Callable() {
+ @Override
+ public NextItemsResult call() throws Exception {
+ return KioskInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl);
+ }
+ });
+ }
+
/*//////////////////////////////////////////////////////////////////////////
// Utils
//////////////////////////////////////////////////////////////////////////*/
diff --git a/app/src/main/res/layout/fragment_kiosk.xml b/app/src/main/res/layout/fragment_kiosk.xml
new file mode 100644
index 000000000..a85c30cb1
--- /dev/null
+++ b/app/src/main/res/layout/fragment_kiosk.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/kiosk_header.xml b/app/src/main/res/layout/kiosk_header.xml
new file mode 100644
index 000000000..c161ca83d
--- /dev/null
+++ b/app/src/main/res/layout/kiosk_header.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 32e300ca1..1c5265b8b 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -67,4 +67,6 @@
24dp28dp
+
+ 30sp
From f6c624b59a56904ddbeba1bad2a19bfa5d024c49 Mon Sep 17 00:00:00 2001
From: Christian Schabesberger
Date: Mon, 25 Sep 2017 12:49:14 +0200
Subject: [PATCH 003/154] make name translatable, fix tab on items, remove back
button
s/kisok/kiosk/g
---
app/build.gradle | 2 +-
.../newpipe/fragments/MainFragment.java | 2 +-
.../list/{kisok => kiosk}/KioskFragment.java | 52 +++++++++++++++----
.../schabi/newpipe/util/ExtractorHelper.java | 2 +-
4 files changed, 44 insertions(+), 14 deletions(-)
rename app/src/main/java/org/schabi/newpipe/fragments/list/{kisok => kiosk}/KioskFragment.java (73%)
diff --git a/app/build.gradle b/app/build.gradle
index 8bb0d19b2..a3ad71b5c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -48,7 +48,7 @@ dependencies {
exclude module: 'support-annotations'
}
- compile 'com.github.TeamNewPipe:NewPipeExtractor:7fffef5'
+ compile 'com.github.TeamNewPipe:NewPipeExtractor:466d87c'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.10.19'
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
index 6f313aee0..3ca14f552 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -18,7 +18,7 @@ import android.view.ViewGroup;
import org.schabi.newpipe.BaseFragment;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.fragments.list.kisok.KioskFragment;
+import org.schabi.newpipe.fragments.list.kiosk.KioskFragment;
import org.schabi.newpipe.fragments.subscription.SubscriptionFragment;
import org.schabi.newpipe.util.NavigationHelper;
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/kisok/KioskFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
similarity index 73%
rename from app/src/main/java/org/schabi/newpipe/fragments/list/kisok/KioskFragment.java
rename to app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
index a1e5a960f..932cf2a44 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/kisok/KioskFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
@@ -1,11 +1,13 @@
-package org.schabi.newpipe.fragments.list.kisok;
+package org.schabi.newpipe.fragments.list.kiosk;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.text.TextUtils;
+import android.support.v7.app.ActionBar;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -17,10 +19,9 @@ import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.UrlIdHandler;
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.kiosk.KioskInfo;
-import org.schabi.newpipe.extractor.kiosk.KioskList;
-import org.schabi.newpipe.extractor.playlist.PlaylistInfo;
+import org.schabi.newpipe.extractor.stream.StreamInfoItem;
import org.schabi.newpipe.fragments.list.BaseListInfoFragment;
-import org.schabi.newpipe.fragments.list.channel.ChannelFragment;
+import org.schabi.newpipe.info_list.InfoItemBuilder;
import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.ExtractorHelper;
import org.schabi.newpipe.util.NavigationHelper;
@@ -63,12 +64,12 @@ public class KioskFragment extends BaseListInfoFragment {
throws ExtractionException {
KioskFragment instance = new KioskFragment();
StreamingService service = NewPipe.getService(serviceId);
- String defaultKioskType = service.getKioskList().getDefaultKioskType();
+ String defaultKioskId = service.getKioskList().getDefaultKioskId();
UrlIdHandler defaultKioskTypeUrlIdHandler = service.getKioskList()
- .getUrlIdHandlerByType(defaultKioskType);
+ .getUrlIdHandlerByType(defaultKioskId);
instance.setInitialData(serviceId,
- defaultKioskTypeUrlIdHandler.getUrl(defaultKioskType),
- defaultKioskType);
+ defaultKioskTypeUrlIdHandler.getUrl(defaultKioskId),
+ defaultKioskId);
return instance;
}
@@ -81,6 +82,20 @@ public class KioskFragment extends BaseListInfoFragment {
return inflater.inflate(R.layout.fragment_kiosk, container, false);
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // Menu
+ //////////////////////////////////////////////////////////////////////////*/
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ super.onCreateOptionsMenu(menu, inflater);
+ ActionBar supportActionBar = activity.getSupportActionBar();
+ if (supportActionBar != null) {
+ supportActionBar.setDisplayShowTitleEnabled(false);
+ supportActionBar.setDisplayHomeAsUpEnabled(false);
+ }
+ }
+
/*//////////////////////////////////////////////////////////////////////////
// Init
//////////////////////////////////////////////////////////////////////////*/
@@ -92,6 +107,21 @@ public class KioskFragment extends BaseListInfoFragment {
return headerRootLayout;
}
+ @Override
+ public void initListeners() {
+ // We have to override this because the default implementation of this function calls
+ // openVideoDetailFragment on getFragmentManager() but what we want here is
+ // getParentFragment().getFragmentManager()
+ infoListAdapter.setOnStreamSelectedListener(new InfoItemBuilder.OnInfoItemSelectedListener() {
+ @Override
+ public void selected(StreamInfoItem selectedItem) {
+ onItemSelected(selectedItem);
+ NavigationHelper.openVideoDetailFragment(getParentFragment().getFragmentManager(),
+ selectedItem.service_id, selectedItem.url, selectedItem.name);
+ }
+ });
+ }
+
/*//////////////////////////////////////////////////////////////////////////
// Load and handle
//////////////////////////////////////////////////////////////////////////*/
@@ -107,7 +137,7 @@ public class KioskFragment extends BaseListInfoFragment {
@Override
public Single loadMoreItemsLogic() {
- return ExtractorHelper.getMoreKisokItems(serviceId, url, currentNextItemsUrl);
+ return ExtractorHelper.getMoreKioskItems(serviceId, url, currentNextItemsUrl);
}
/*//////////////////////////////////////////////////////////////////////////
@@ -126,7 +156,7 @@ public class KioskFragment extends BaseListInfoFragment {
super.handleResult(result);
animateView(headerRootLayout, true, 100);
- headerTitleView.setText(result.type);
+ headerTitleView.setText("★★ " +result.name+ " ★★");
if (!result.errors.isEmpty()) {
showSnackBarError(result.errors,
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 856769da8..b1ed2e901 100644
--- a/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/ExtractorHelper.java
@@ -134,7 +134,7 @@ public final class ExtractorHelper {
}));
}
- public static Single getMoreKisokItems(final int serviceId, final String url, final String nextStreamsUrl) {
+ public static Single getMoreKioskItems(final int serviceId, final String url, final String nextStreamsUrl) {
return Single.fromCallable(new Callable() {
@Override
public NextItemsResult call() throws Exception {
From 5ebde97352c28fd540ce6ee1577bb2e0e2bc7145 Mon Sep 17 00:00:00 2001
From: Christian Schabesberger
Date: Mon, 25 Sep 2017 13:05:54 +0200
Subject: [PATCH 004/154] fix error report and add setting for current_service
---
.../schabi/newpipe/fragments/MainFragment.java | 15 +++++++++++----
app/src/main/res/values/settings_keys.xml | 3 +++
2 files changed, 14 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
index 3ca14f552..a92287089 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -8,6 +8,7 @@ import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
+import android.support.v7.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -20,14 +21,15 @@ import org.schabi.newpipe.BaseFragment;
import org.schabi.newpipe.R;
import org.schabi.newpipe.fragments.list.kiosk.KioskFragment;
import org.schabi.newpipe.fragments.subscription.SubscriptionFragment;
+import org.schabi.newpipe.report.ErrorActivity;
+import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.NavigationHelper;
public class MainFragment extends BaseFragment implements TabLayout.OnTabSelectedListener {
private ViewPager viewPager;
private boolean showBlankTab = false;
- //todo: FIX THIS URGENTLY
- public int currentServiceId = 0; //for youtube
+ public int currentServiceId = -1;
/*//////////////////////////////////////////////////////////////////////////
// Fragment's LifeCycle
@@ -41,6 +43,8 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
+ currentServiceId = Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(getActivity())
+ .getString(getString(R.string.current_service_key), "0"));
return inflater.inflate(R.layout.fragment_main, container, false);
}
@@ -126,8 +130,11 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
try {
return KioskFragment.getInstance(currentServiceId);
} catch (Exception e) {
- //todo: replace this with propper error reporting
- e.printStackTrace();
+ ErrorActivity.reportError(activity, e,
+ activity.getClass(),
+ null,
+ ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
+ "none", "", R.string.app_ui_crash));
return new BlankFragment();
}
}
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 76cd10681..f5cef09a0 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -1,5 +1,8 @@
+
+ current_service
+
download_pathdownload_path_audio
From 65c8b6e66a14144c59173cc085108526feda12d5 Mon Sep 17 00:00:00 2001
From: Christian Schabesberger
Date: Tue, 26 Sep 2017 17:29:38 +0200
Subject: [PATCH 005/154] add selection for front page
---
.../org/schabi/newpipe/RouterActivity.java | 10 +-
.../newpipe/fragments/MainFragment.java | 49 +++--
.../settings/ContentSettingsFragment.java | 49 +++++
.../settings/SelectChannelFragment.java | 184 ++++++++++++++++++
.../res/layout/select_channel_fragment.xml | 42 ++++
.../main/res/layout/select_channel_item.xml | 38 ++++
app/src/main/res/values/settings_keys.xml | 16 ++
app/src/main/res/values/strings.xml | 11 ++
app/src/main/res/xml/content_settings.xml | 7 +
9 files changed, 387 insertions(+), 19 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
create mode 100644 app/src/main/res/layout/select_channel_fragment.xml
create mode 100644 app/src/main/res/layout/select_channel_item.xml
diff --git a/app/src/main/java/org/schabi/newpipe/RouterActivity.java b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
index ce9c3802f..41e557b52 100644
--- a/app/src/main/java/org/schabi/newpipe/RouterActivity.java
+++ b/app/src/main/java/org/schabi/newpipe/RouterActivity.java
@@ -10,22 +10,22 @@ import org.schabi.newpipe.util.NavigationHelper;
import java.util.Collection;
import java.util.HashSet;
-/*
+/**
* Copyright (C) Christian Schabesberger 2017
- * RouterActivity .java is part of NewPipe.
+ * RouterActivity.java is part of NewPipe.
*
- * OpenHitboxStreams is free software: you can redistribute it and/or modify
+ * NewPipe is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
- * OpenHitboxStreams is distributed in the hope that it will be useful,
+ * NewPipe is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with OpenHitboxStreams. If not, see .
+ * along with NewPipe. If not, see .
*/
/**
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
index a92287089..0a8e9b655 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -25,6 +25,8 @@ import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.NavigationHelper;
+import java.util.concurrent.ExecutionException;
+
public class MainFragment extends BaseFragment implements TabLayout.OnTabSelectedListener {
private ViewPager viewPager;
private boolean showBlankTab = false;
@@ -124,20 +126,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
case 1:
return new SubscriptionFragment();
default:
- if(showBlankTab) {
- return new BlankFragment();
- } else {
- try {
- return KioskFragment.getInstance(currentServiceId);
- } catch (Exception e) {
- ErrorActivity.reportError(activity, e,
- activity.getClass(),
- null,
- ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
- "none", "", R.string.app_ui_crash));
- return new BlankFragment();
- }
- }
+ return getMainPageFramgent();
}
}
@@ -151,4 +140,36 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
return this.tabTitles.length;
}
}
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Main page content
+ //////////////////////////////////////////////////////////////////////////*/
+
+ private Fragment getMainPageFramgent() {
+ try {
+ final String set_main_page = PreferenceManager.getDefaultSharedPreferences(getActivity())
+ .getString(getString(R.string.main_page_content_key),
+ getString(R.string.main_page_selectd_kiosk_id));
+ if(set_main_page.equals(getString(R.string.blank_page_key))) {
+ return new BlankFragment();
+ } else if(set_main_page.equals(getString(R.string.kiosk_page_key))) {
+ return KioskFragment.getInstance(currentServiceId);
+ } else if(set_main_page.equals(getString(R.string.feed_page_key))) {
+ return new BlankFragment();
+ } else if(set_main_page.equals(getString(R.string.channel_page_key))) {
+ return new BlankFragment();
+ } else {
+ return new BlankFragment();
+ }
+
+
+ } catch (Exception e) {
+ ErrorActivity.reportError(activity, e,
+ activity.getClass(),
+ null,
+ ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
+ "none", "", R.string.app_ui_crash));
+ return new BlankFragment();
+ }
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
index 6021b40fd..0164f584e 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
@@ -1,6 +1,9 @@
package org.schabi.newpipe.settings;
import android.os.Bundle;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.util.Log;
import org.schabi.newpipe.R;
@@ -8,5 +11,51 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.content_settings);
+
+ findPreference(getString(R.string.main_page_content_key))
+ .setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValueO) {
+ final String newValue = newValueO.toString();
+
+ if(newValue.equals(getString(R.string.kiosk_page_key))) {
+ //todo on multyservice support show a kiosk an service selector here
+ } else if(newValue.equals(getString(R.string.channel_page_key))) {
+ SelectChannelFragment selectChannelFragment = new SelectChannelFragment();
+ selectChannelFragment.setOnSelectedLisener(new SelectChannelFragment.OnSelectedLisener() {
+ @Override
+ public void onChannelSelected(String url, String name, int service) {
+ defaultPreferences.edit()
+ .putInt(getString(R.string.main_page_selected_service), service).apply();
+ defaultPreferences.edit()
+ .putString(getString(R.string.main_page_selected_channel_url), url).apply();
+ defaultPreferences.edit()
+ .putString(getString(R.string.main_page_selected_channel_name), name).apply();
+
+ //change summery
+ Preference pref = findPreference(getString(R.string.main_page_content_key));
+ pref.setSummary(name);
+
+ }
+ });
+ selectChannelFragment.show(getFragmentManager(), "select_channel");
+ }
+
+ return true;
+ }
+ });
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ final String mainPageContentKey = getString(R.string.main_page_content_key);
+ if(defaultPreferences.getString(mainPageContentKey,
+ getString(R.string.blank_page_key))
+ .equals(getString(R.string.channel_page_key))) {
+ Preference pref = findPreference(getString(R.string.main_page_content_key));
+ pref.setSummary(defaultPreferences.getString(getString(R.string.main_page_selected_channel_name), "error"));
+ }
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
new file mode 100644
index 000000000..5cc7070f9
--- /dev/null
+++ b/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
@@ -0,0 +1,184 @@
+package org.schabi.newpipe.settings;
+
+import android.app.Activity;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.v4.app.DialogFragment;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+import org.schabi.newpipe.R;
+import org.schabi.newpipe.database.subscription.SubscriptionEntity;
+import org.schabi.newpipe.fragments.subscription.SubscriptionService;
+import org.schabi.newpipe.report.ErrorActivity;
+import org.schabi.newpipe.report.UserAction;
+
+import java.util.List;
+import java.util.Vector;
+
+import de.hdodenhof.circleimageview.CircleImageView;
+import io.reactivex.Observer;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
+
+
+/**
+ * Created by Christian Schabesberger on 26.09.17.
+ * SelectChannelFragment.java is part of NewPipe.
+ *
+ * NewPipe is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * NewPipe is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with NewPipe. If not, see .
+ */
+
+public class SelectChannelFragment extends DialogFragment {
+ private SelectChannelAdapter channelAdapter;
+ private SubscriptionService subscriptionService;
+
+ private ProgressBar progressBar;
+ private TextView emptyView;
+ private RecyclerView recyclerView;
+
+ private List subscriptions = new Vector<>();
+
+ public interface OnSelectedLisener {
+ public void onChannelSelected(String url, String name, int service);
+ }
+
+ OnSelectedLisener onSelectedLisener;
+ public void setOnSelectedLisener(OnSelectedLisener listener) {
+ onSelectedLisener = listener;
+ }
+
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ View v = inflater.inflate(R.layout.select_channel_fragment, container, false);
+ recyclerView = (RecyclerView) v.findViewById(R.id.items_list);
+ recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
+ channelAdapter = new SelectChannelAdapter();
+ recyclerView.setAdapter(channelAdapter);
+
+ progressBar = v.findViewById(R.id.progressBar);
+ emptyView = v.findViewById(R.id.empty_state_view);
+ progressBar.setVisibility(View.VISIBLE);
+ recyclerView.setVisibility(View.GONE);
+ emptyView.setVisibility(View.GONE);
+
+
+ subscriptionService = SubscriptionService.getInstance();
+ subscriptionService.getSubscription().toObservable()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(getSubscriptionObserver());
+
+ return v;
+ }
+
+ private void displayChannels(List subscriptions) {
+ this.subscriptions = subscriptions;
+ progressBar.setVisibility(View.GONE);
+ if(subscriptions.isEmpty()) {
+ emptyView.setVisibility(View.VISIBLE);
+ return;
+ }
+ recyclerView.setVisibility(View.VISIBLE);
+
+ }
+
+ private void clickedItem(int position) {
+ if(onSelectedLisener != null) {
+ SubscriptionEntity entry = subscriptions.get(position);
+ onSelectedLisener.onChannelSelected(entry.getUrl(), entry.getName(), entry.getServiceId());
+ }
+ dismiss();
+ }
+
+ private Observer> getSubscriptionObserver() {
+ return new Observer>() {
+ @Override
+ public void onSubscribe(Disposable d) {
+ }
+
+ @Override
+ public void onNext(List subscriptions) {
+ displayChannels(subscriptions);
+ }
+
+ @Override
+ public void onError(Throwable exception) {
+ onError(exception);
+ }
+
+ @Override
+ public void onComplete() {
+ }
+ };
+ }
+
+ private class SelectChannelAdapter extends
+ RecyclerView.Adapter {
+
+ @Override
+ public SelectChannelItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View item = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.select_channel_item, parent, false);
+ return new SelectChannelItemHolder(item);
+ }
+
+ @Override
+ public void onBindViewHolder(SelectChannelItemHolder holder, final int position) {
+ SubscriptionEntity entry = subscriptions.get(position);
+ holder.titleView.setText(entry.getName());
+ holder.view.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ clickedItem(position);
+ }
+ });
+ }
+
+ @Override
+ public int getItemCount() {
+ return subscriptions.size();
+ }
+
+ public class SelectChannelItemHolder extends RecyclerView.ViewHolder {
+ public SelectChannelItemHolder(View v) {
+ super(v);
+ this.view = v;
+ thumbnailView = v.findViewById(R.id.itemThumbnailView);
+ titleView = v.findViewById(R.id.itemTitleView);
+ }
+ public View view;
+ public CircleImageView thumbnailView;
+ public TextView titleView;
+ }
+ }
+
+ protected boolean onError(Throwable e) {
+ final Activity activity = getActivity();
+ ErrorActivity.reportError(activity, e,
+ activity.getClass(),
+ null,
+ ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
+ "none", "", R.string.app_ui_crash));
+ return true;
+ }
+}
diff --git a/app/src/main/res/layout/select_channel_fragment.xml b/app/src/main/res/layout/select_channel_fragment.xml
new file mode 100644
index 000000000..9c8e79779
--- /dev/null
+++ b/app/src/main/res/layout/select_channel_fragment.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/select_channel_item.xml b/app/src/main/res/layout/select_channel_item.xml
new file mode 100644
index 000000000..903894aeb
--- /dev/null
+++ b/app/src/main/res/layout/select_channel_item.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index f5cef09a0..878d51741 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -92,6 +92,7 @@
@string/black_theme_title
+
show_search_suggestionsshow_play_with_kodishow_next_video
@@ -101,6 +102,21 @@
use_torenable_search_historyenable_watch_history
+ main_page_content
+ blank_page
+ feed_page
+ kiosk_page
+ channel_page
+
+ @string/blank_page_key
+ @string/kiosk_page_key
+ @string/feed_page_key
+ @string/channel_page_key
+
+ main_page_selected_service
+ main_page_selected_channel_name
+ main_page_selected_channel_url
+ main_page_selectd_kiosk_idfile_rename
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a5b3993d8..e16bfca16 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -265,4 +265,15 @@
The history is emptyHistory clearedItem deleted
+
+
+ Content of main page
+
+ Blank Page
+ Trending Page
+ Feed Page
+ Channel Page
+
+ Select a channel
+ No channel subscribed yet
diff --git a/app/src/main/res/xml/content_settings.xml b/app/src/main/res/xml/content_settings.xml
index 63cd3cd01..11672671e 100644
--- a/app/src/main/res/xml/content_settings.xml
+++ b/app/src/main/res/xml/content_settings.xml
@@ -21,5 +21,12 @@
android:key="@string/show_search_suggestions_key"
android:summary="@string/show_search_suggestions_summary"
android:title="@string/show_search_suggestions_title"/>
+
From 3490273b498156ccd56ee29b63d0db09fa2cb169 Mon Sep 17 00:00:00 2001
From: Christian Schabesberger
Date: Tue, 26 Sep 2017 18:16:39 +0200
Subject: [PATCH 006/154] made fragments frontpagable
---
.../newpipe/fragments/BaseStateFragment.java | 6 +++++
.../newpipe/fragments/MainFragment.java | 22 +++++++++++++++----
.../fragments/list/BaseListFragment.java | 12 +++++++---
.../list/channel/ChannelFragment.java | 19 +++++++++++-----
.../fragments/list/feed/FeedFragment.java | 7 ++++--
.../fragments/list/kiosk/KioskFragment.java | 18 +--------------
.../settings/ContentSettingsFragment.java | 2 ++
.../settings/SelectChannelFragment.java | 1 -
8 files changed, 54 insertions(+), 33 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java
index 5a8d8dd52..80f05585b 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/BaseStateFragment.java
@@ -50,6 +50,8 @@ public abstract class BaseStateFragment extends BaseFragment implements ViewC
protected Button errorButtonRetry;
protected TextView errorTextView;
+ protected boolean useAsFrontPage = false;
+
@Override
public void onViewCreated(View rootView, Bundle savedInstanceState) {
super.onViewCreated(rootView, savedInstanceState);
@@ -62,6 +64,10 @@ public abstract class BaseStateFragment extends BaseFragment implements ViewC
wasLoading.set(isLoading.get());
}
+ public void useAsFrontPage(boolean value) {
+ useAsFrontPage = value;
+ }
+
/*//////////////////////////////////////////////////////////////////////////
// Init
//////////////////////////////////////////////////////////////////////////*/
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
index 0a8e9b655..aa28c54fb 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -1,5 +1,6 @@
package org.schabi.newpipe.fragments;
+import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
@@ -19,6 +20,8 @@ import android.view.ViewGroup;
import org.schabi.newpipe.BaseFragment;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.fragments.list.channel.ChannelFragment;
+import org.schabi.newpipe.fragments.list.feed.FeedFragment;
import org.schabi.newpipe.fragments.list.kiosk.KioskFragment;
import org.schabi.newpipe.fragments.subscription.SubscriptionFragment;
import org.schabi.newpipe.report.ErrorActivity;
@@ -153,16 +156,27 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
if(set_main_page.equals(getString(R.string.blank_page_key))) {
return new BlankFragment();
} else if(set_main_page.equals(getString(R.string.kiosk_page_key))) {
- return KioskFragment.getInstance(currentServiceId);
+ KioskFragment fragment = KioskFragment.getInstance(currentServiceId);
+ fragment.useAsFrontPage(true);
+ return fragment;
} else if(set_main_page.equals(getString(R.string.feed_page_key))) {
- return new BlankFragment();
+ FeedFragment fragment = new FeedFragment();
+ fragment.useAsFrontPage(true);
+ return fragment;
} else if(set_main_page.equals(getString(R.string.channel_page_key))) {
- return new BlankFragment();
+ SharedPreferences preferences =
+ PreferenceManager.getDefaultSharedPreferences(getActivity());
+ int serviceId = preferences.getInt(getString(R.string.main_page_selected_service), 0);
+ String url = preferences.getString(getString(R.string.main_page_selected_channel_url),
+ "https://www.youtube.com/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ");
+ String name = preferences.getString(getString(R.string.main_page_selected_channel_name), "Music");
+ ChannelFragment fragment = ChannelFragment.getInstance(serviceId, url, name);
+ fragment.useAsFrontPage(true);
+ return fragment;
} else {
return new BlankFragment();
}
-
} catch (Exception e) {
ErrorActivity.reportError(activity, e,
activity.getClass(),
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
index 4501ab859..48661969f 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/BaseListFragment.java
@@ -135,7 +135,9 @@ public abstract class BaseListFragment extends BaseStateFragment implem
@Override
public void selected(StreamInfoItem selectedItem) {
onItemSelected(selectedItem);
- NavigationHelper.openVideoDetailFragment(getFragmentManager(), selectedItem.service_id, selectedItem.url, selectedItem.name);
+ NavigationHelper.openVideoDetailFragment(
+ useAsFrontPage?getParentFragment().getFragmentManager():getFragmentManager(),
+ selectedItem.service_id, selectedItem.url, selectedItem.name);
}
});
@@ -143,7 +145,9 @@ public abstract class BaseListFragment extends BaseStateFragment implem
@Override
public void selected(ChannelInfoItem selectedItem) {
onItemSelected(selectedItem);
- NavigationHelper.openChannelFragment(getFragmentManager(), selectedItem.service_id, selectedItem.url, selectedItem.name);
+ NavigationHelper.openChannelFragment(
+ useAsFrontPage?getParentFragment().getFragmentManager():getFragmentManager(),
+ selectedItem.service_id, selectedItem.url, selectedItem.name);
}
});
@@ -151,7 +155,9 @@ public abstract class BaseListFragment extends BaseStateFragment implem
@Override
public void selected(PlaylistInfoItem selectedItem) {
onItemSelected(selectedItem);
- NavigationHelper.openPlaylistFragment(getFragmentManager(), selectedItem.service_id, selectedItem.url, selectedItem.name);
+ NavigationHelper.openPlaylistFragment(
+ useAsFrontPage?getParentFragment().getFragmentManager():getFragmentManager(),
+ selectedItem.service_id, selectedItem.url, selectedItem.name);
}
});
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 b7148fe63..5a722ec4c 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
@@ -7,6 +7,7 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
+import android.support.v7.app.ActionBar;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
@@ -118,15 +119,21 @@ public class ChannelFragment extends BaseListInfoFragment {
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- if (DEBUG) Log.d(TAG, "onCreateOptionsMenu() called with: menu = [" + menu + "], inflater = [" + inflater + "]");
super.onCreateOptionsMenu(menu, inflater);
- inflater.inflate(R.menu.menu_channel, menu);
+ ActionBar supportActionBar = activity.getSupportActionBar();
+ if(useAsFrontPage) {
+ supportActionBar.setDisplayHomeAsUpEnabled(false);
+ supportActionBar.setDisplayShowTitleEnabled(false);
+ } else {
+ inflater.inflate(R.menu.menu_channel, menu);
+
+ if (DEBUG) Log.d(TAG, "onCreateOptionsMenu() called with: menu = [" + menu + "], inflater = [" + inflater + "]");
+ menuRssButton = menu.findItem(R.id.menu_item_rss);
+ if (currentInfo != null) {
+ menuRssButton.setVisible(!TextUtils.isEmpty(currentInfo.feed_url));
+ }
- menuRssButton = menu.findItem(R.id.menu_item_rss);
- if (currentInfo != null) {
- menuRssButton.setVisible(!TextUtils.isEmpty(currentInfo.feed_url));
}
-
}
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java
index 2af9a9270..1a8f8e625 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java
@@ -36,10 +36,8 @@ import io.reactivex.MaybeObserver;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
-import io.reactivex.functions.Action;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Predicate;
-import io.reactivex.schedulers.Schedulers;
public class FeedFragment extends BaseListFragment, Void> {
@@ -121,6 +119,11 @@ public class FeedFragment extends BaseListFragment, Voi
if (supportActionBar != null) {
supportActionBar.setTitle(R.string.fragment_whats_new);
}
+
+ if(useAsFrontPage) {
+ supportActionBar.setDisplayHomeAsUpEnabled(false);
+ supportActionBar.setDisplayShowTitleEnabled(false);
+ }
}
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
index 932cf2a44..3d019e6cb 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
@@ -52,7 +52,6 @@ import static org.schabi.newpipe.util.AnimationUtils.animateView;
public class KioskFragment extends BaseListInfoFragment {
-
/*//////////////////////////////////////////////////////////////////////////
// Views
//////////////////////////////////////////////////////////////////////////*/
@@ -90,7 +89,7 @@ public class KioskFragment extends BaseListInfoFragment {
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
ActionBar supportActionBar = activity.getSupportActionBar();
- if (supportActionBar != null) {
+ if (supportActionBar != null && useAsFrontPage) {
supportActionBar.setDisplayShowTitleEnabled(false);
supportActionBar.setDisplayHomeAsUpEnabled(false);
}
@@ -107,21 +106,6 @@ public class KioskFragment extends BaseListInfoFragment {
return headerRootLayout;
}
- @Override
- public void initListeners() {
- // We have to override this because the default implementation of this function calls
- // openVideoDetailFragment on getFragmentManager() but what we want here is
- // getParentFragment().getFragmentManager()
- infoListAdapter.setOnStreamSelectedListener(new InfoItemBuilder.OnInfoItemSelectedListener() {
- @Override
- public void selected(StreamInfoItem selectedItem) {
- onItemSelected(selectedItem);
- NavigationHelper.openVideoDetailFragment(getParentFragment().getFragmentManager(),
- selectedItem.service_id, selectedItem.url, selectedItem.name);
- }
- });
- }
-
/*//////////////////////////////////////////////////////////////////////////
// Load and handle
//////////////////////////////////////////////////////////////////////////*/
diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
index 0164f584e..9b3ffb5ae 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
@@ -6,6 +6,7 @@ import android.support.v7.preference.Preference;
import android.util.Log;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.util.Constants;
public class ContentSettingsFragment extends BasePreferenceFragment {
@Override
@@ -36,6 +37,7 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
Preference pref = findPreference(getString(R.string.main_page_content_key));
pref.setSummary(name);
+
}
});
selectChannelFragment.show(getFragmentManager(), "select_channel");
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
index 5cc7070f9..16b68196a 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
@@ -66,7 +66,6 @@ public class SelectChannelFragment extends DialogFragment {
onSelectedLisener = listener;
}
-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.select_channel_fragment, container, false);
From 29fee28d1d2f7e83ecacade996912a129151acfc Mon Sep 17 00:00:00 2001
From: Christian Schabesberger
Date: Thu, 28 Sep 2017 15:36:15 +0200
Subject: [PATCH 007/154] fix channel selection
---
.../settings/BasePreferenceFragment.java | 2 +-
.../settings/ContentSettingsFragment.java | 55 +++++++++++--
.../settings/SelectChannelFragment.java | 79 ++++++++++++++++---
app/src/main/res/values/strings.xml | 12 ++-
4 files changed, 123 insertions(+), 25 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/settings/BasePreferenceFragment.java b/app/src/main/java/org/schabi/newpipe/settings/BasePreferenceFragment.java
index a16f7dd79..e3c52cdad 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/BasePreferenceFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/BasePreferenceFragment.java
@@ -19,8 +19,8 @@ public abstract class BasePreferenceFragment extends PreferenceFragmentCompat {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
defaultPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
+ super.onCreate(savedInstanceState);
}
@Override
diff --git a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
index 9b3ffb5ae..02038f9fa 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/ContentSettingsFragment.java
@@ -3,22 +3,27 @@ package org.schabi.newpipe.settings;
import android.os.Bundle;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.Preference;
-import android.util.Log;
import org.schabi.newpipe.R;
-import org.schabi.newpipe.util.Constants;
public class ContentSettingsFragment extends BasePreferenceFragment {
+
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+
addPreferencesFromResource(R.xml.content_settings);
- findPreference(getString(R.string.main_page_content_key))
- .setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ final ListPreference mainPageContentPref = (ListPreference) findPreference(getString(R.string.main_page_content_key));
+
+ mainPageContentPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValueO) {
final String newValue = newValueO.toString();
+ final String mainPrefOldValue =
+ defaultPreferences.getString(getString(R.string.main_page_content_key), "blank_page");
+ final String mainPrefOldSummary = getMainPagePrefSummery(mainPrefOldValue, mainPageContentPref);
+
if(newValue.equals(getString(R.string.kiosk_page_key))) {
//todo on multyservice support show a kiosk an service selector here
} else if(newValue.equals(getString(R.string.channel_page_key))) {
@@ -34,15 +39,25 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
.putString(getString(R.string.main_page_selected_channel_name), name).apply();
//change summery
- Preference pref = findPreference(getString(R.string.main_page_content_key));
- pref.setSummary(name);
-
-
+ mainPageContentPref.setSummary(name);
+ }
+ });
+ selectChannelFragment.setOnCancelListener(new SelectChannelFragment.OnCancelListener() {
+ @Override
+ public void onCancel() {
+ //defaultPreferences.edit()
+ // .putString(getString(R.string.main_page_content_key), mainPrefOldValue).apply();
+ mainPageContentPref.setSummary(mainPrefOldSummary);
+ mainPageContentPref.setValue(mainPrefOldValue);
}
});
selectChannelFragment.show(getFragmentManager(), "select_channel");
}
+ if(!newValue.equals(getString(R.string.channel_page_key))) {
+ mainPageContentPref.setSummary(getMainPageSummeryByKey(newValue));
+ }
+
return true;
}
});
@@ -60,4 +75,28 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
pref.setSummary(defaultPreferences.getString(getString(R.string.main_page_selected_channel_name), "error"));
}
}
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Utils
+ //////////////////////////////////////////////////////////////////////////*/
+ private String getMainPagePrefSummery(final String mainPrefOldValue, final ListPreference mainPageContentPref) {
+ if(mainPrefOldValue.equals(getString(R.string.channel_page_key))) {
+ return defaultPreferences.getString(getString(R.string.main_page_selected_channel_name), "error");
+ } else {
+ return mainPageContentPref.getSummary().toString();
+ }
+ }
+
+ private int getMainPageSummeryByKey(final String key) {
+ if(key.equals(getString(R.string.blank_page_key))) {
+ return R.string.blank_page_summary;
+ } else if(key.equals(getString(R.string.kiosk_page_key))) {
+ return R.string.kiosk_page_summary;
+ } else if(key.equals(getString(R.string.feed_page_key))) {
+ return R.string.feed_page_summary;
+ } else if(key.equals(getString(R.string.channel_page_key))) {
+ return R.string.channel_page_summary;
+ }
+ return R.string.blank_page_summary;
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java b/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
index 16b68196a..97af11f1b 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/SelectChannelFragment.java
@@ -13,6 +13,9 @@ import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
+import com.nostra13.universalimageloader.core.DisplayImageOptions;
+import com.nostra13.universalimageloader.core.ImageLoader;
+
import org.schabi.newpipe.R;
import org.schabi.newpipe.database.subscription.SubscriptionEntity;
import org.schabi.newpipe.fragments.subscription.SubscriptionService;
@@ -50,6 +53,7 @@ import io.reactivex.schedulers.Schedulers;
public class SelectChannelFragment extends DialogFragment {
private SelectChannelAdapter channelAdapter;
private SubscriptionService subscriptionService;
+ private ImageLoader imageLoader = ImageLoader.getInstance();
private ProgressBar progressBar;
private TextView emptyView;
@@ -57,15 +61,31 @@ public class SelectChannelFragment extends DialogFragment {
private List subscriptions = new Vector<>();
- public interface OnSelectedLisener {
- public void onChannelSelected(String url, String name, int service);
- }
+ /*//////////////////////////////////////////////////////////////////////////
+ // Interfaces
+ //////////////////////////////////////////////////////////////////////////*/
- OnSelectedLisener onSelectedLisener;
+ public interface OnSelectedLisener {
+ void onChannelSelected(String url, String name, int service);
+ }
+ OnSelectedLisener onSelectedLisener = null;
public void setOnSelectedLisener(OnSelectedLisener listener) {
onSelectedLisener = listener;
}
+ public interface OnCancelListener {
+ void onCancel();
+ }
+ OnCancelListener onCancelListener = null;
+ public void setOnCancelListener(OnCancelListener listener) {
+ onCancelListener = listener;
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Init
+ //////////////////////////////////////////////////////////////////////////*/
+
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.select_channel_fragment, container, false);
@@ -90,6 +110,31 @@ public class SelectChannelFragment extends DialogFragment {
return v;
}
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Handle actions
+ //////////////////////////////////////////////////////////////////////////*/
+
+ @Override
+ public void onCancel(final DialogInterface dialogInterface) {
+ super.onCancel(dialogInterface);
+ if(onCancelListener != null) {
+ onCancelListener.onCancel();
+ }
+ }
+
+ private void clickedItem(int position) {
+ if(onSelectedLisener != null) {
+ SubscriptionEntity entry = subscriptions.get(position);
+ onSelectedLisener.onChannelSelected(entry.getUrl(), entry.getName(), entry.getServiceId());
+ }
+ dismiss();
+ }
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Item handling
+ //////////////////////////////////////////////////////////////////////////*/
+
private void displayChannels(List subscriptions) {
this.subscriptions = subscriptions;
progressBar.setVisibility(View.GONE);
@@ -101,14 +146,6 @@ public class SelectChannelFragment extends DialogFragment {
}
- private void clickedItem(int position) {
- if(onSelectedLisener != null) {
- SubscriptionEntity entry = subscriptions.get(position);
- onSelectedLisener.onChannelSelected(entry.getUrl(), entry.getName(), entry.getServiceId());
- }
- dismiss();
- }
-
private Observer> getSubscriptionObserver() {
return new Observer>() {
@Override
@@ -151,6 +188,7 @@ public class SelectChannelFragment extends DialogFragment {
clickedItem(position);
}
});
+ imageLoader.displayImage(entry.getAvatarUrl(), holder.thumbnailView, DISPLAY_IMAGE_OPTIONS);
}
@Override
@@ -171,6 +209,10 @@ public class SelectChannelFragment extends DialogFragment {
}
}
+ /*//////////////////////////////////////////////////////////////////////////
+ // Error
+ //////////////////////////////////////////////////////////////////////////*/
+
protected boolean onError(Throwable e) {
final Activity activity = getActivity();
ErrorActivity.reportError(activity, e,
@@ -180,4 +222,17 @@ public class SelectChannelFragment extends DialogFragment {
"none", "", R.string.app_ui_crash));
return true;
}
+
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // ImageLoaderOptions
+ //////////////////////////////////////////////////////////////////////////*/
+
+ /**
+ * Base display options
+ */
+ public static final DisplayImageOptions DISPLAY_IMAGE_OPTIONS =
+ new DisplayImageOptions.Builder()
+ .cacheInMemory(true)
+ .build();
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e16bfca16..b71bfa7db 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -268,11 +268,15 @@
Content of main page
+ Blank Page
+ Kiosk Page
+ Feed Page
+ Channel Page
- Blank Page
- Trending Page
- Feed Page
- Channel Page
+ @string/blank_page_summary
+ @string/kiosk_page_summary
+ @string/feed_page_summary
+ @string/channel_page_summarySelect a channelNo channel subscribed yet
From 46fa9a9366cf74e6381384f794027ee6c1034a54 Mon Sep 17 00:00:00 2001
From: Christian Schabesberger
Date: Thu, 28 Sep 2017 16:15:09 +0200
Subject: [PATCH 008/154] translate kiosk name using resources
fix CDATA fuu
---
.../newpipe/fragments/MainFragment.java | 24 +++++++++++-
.../list/channel/ChannelFragment.java | 6 ++-
.../fragments/list/feed/FeedFragment.java | 2 +-
.../fragments/list/kiosk/KioskFragment.java | 5 ++-
.../subscription/SubscriptionFragment.java | 2 +
.../settings/ContentSettingsFragment.java | 2 +
.../schabi/newpipe/util/KioskTranslator.java | 38 +++++++++++++++++++
app/src/main/res/menu/main_menu.xml | 2 +-
app/src/main/res/values/settings_keys.xml | 2 +
app/src/main/res/values/strings.xml | 7 ++++
10 files changed, 82 insertions(+), 8 deletions(-)
create mode 100644 app/src/main/java/org/schabi/newpipe/util/KioskTranslator.java
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
index aa28c54fb..c6d3f07f9 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -126,10 +126,18 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
@Override
public Fragment getItem(int position) {
switch (position) {
+ case 0:
+ if(PreferenceManager.getDefaultSharedPreferences(getActivity())
+ .getString(getString(R.string.main_page_content_key), getString(R.string.blank_page_key))
+ .equals(getString(R.string.subscription_page_key))) {
+ return new SubscriptionFragment();
+ } else {
+ return getMainPageFramgent();
+ }
case 1:
return new SubscriptionFragment();
default:
- return getMainPageFramgent();
+ return new BlankFragment();
}
}
@@ -140,7 +148,13 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
@Override
public int getCount() {
- return this.tabTitles.length;
+ if(PreferenceManager.getDefaultSharedPreferences(getActivity())
+ .getString(getString(R.string.main_page_content_key), getString(R.string.blank_page_key))
+ .equals(getString(R.string.subscription_page_key))) {
+ return 1;
+ } else {
+ return 2;
+ }
}
}
@@ -186,4 +200,10 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
return new BlankFragment();
}
}
+
+ /*//////////////////////////////////////////////////////////////////////////
+ // Main page content
+ //////////////////////////////////////////////////////////////////////////*/
+
+
}
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 5a722ec4c..daa1b62ed 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
@@ -89,7 +89,8 @@ public class ChannelFragment extends BaseListInfoFragment {
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- return inflater.inflate(R.layout.fragment_channel, container, false);
+ View v = inflater.inflate(R.layout.fragment_channel, container, false);
+ return v;
}
@Override
@@ -110,6 +111,7 @@ public class ChannelFragment extends BaseListInfoFragment {
headerTitleView = headerRootLayout.findViewById(R.id.channel_title_view);
headerSubscribersTextView = headerRootLayout.findViewById(R.id.channel_subscriber_view);
headerSubscribeButton = headerRootLayout.findViewById(R.id.channel_subscribe_button);
+
return headerRootLayout;
}
@@ -123,7 +125,7 @@ public class ChannelFragment extends BaseListInfoFragment {
ActionBar supportActionBar = activity.getSupportActionBar();
if(useAsFrontPage) {
supportActionBar.setDisplayHomeAsUpEnabled(false);
- supportActionBar.setDisplayShowTitleEnabled(false);
+ //supportActionBar.setDisplayShowTitleEnabled(false);
} else {
inflater.inflate(R.menu.menu_channel, menu);
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java
index 1a8f8e625..379ec591a 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/feed/FeedFragment.java
@@ -122,7 +122,7 @@ public class FeedFragment extends BaseListFragment, Voi
if(useAsFrontPage) {
supportActionBar.setDisplayHomeAsUpEnabled(false);
- supportActionBar.setDisplayShowTitleEnabled(false);
+ //supportActionBar.setDisplayShowTitleEnabled(false);
}
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
index 3d019e6cb..451ade674 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
@@ -24,6 +24,7 @@ import org.schabi.newpipe.fragments.list.BaseListInfoFragment;
import org.schabi.newpipe.info_list.InfoItemBuilder;
import org.schabi.newpipe.report.UserAction;
import org.schabi.newpipe.util.ExtractorHelper;
+import org.schabi.newpipe.util.KioskTranslator;
import org.schabi.newpipe.util.NavigationHelper;
import io.reactivex.Single;
@@ -90,7 +91,7 @@ public class KioskFragment extends BaseListInfoFragment {
super.onCreateOptionsMenu(menu, inflater);
ActionBar supportActionBar = activity.getSupportActionBar();
if (supportActionBar != null && useAsFrontPage) {
- supportActionBar.setDisplayShowTitleEnabled(false);
+ //supportActionBar.setDisplayShowTitleEnabled(false);
supportActionBar.setDisplayHomeAsUpEnabled(false);
}
}
@@ -140,7 +141,7 @@ public class KioskFragment extends BaseListInfoFragment {
super.handleResult(result);
animateView(headerRootLayout, true, 100);
- headerTitleView.setText("★★ " +result.name+ " ★★");
+ headerTitleView.setText("★★ " + KioskTranslator.getTranslatedKioskName(result.id, getActivity())+ " ★★");
if (!result.errors.isEmpty()) {
showSnackBarError(result.errors,
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/subscription/SubscriptionFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/subscription/SubscriptionFragment.java
index 646fe597e..afb2f078e 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/subscription/SubscriptionFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/subscription/SubscriptionFragment.java
@@ -62,6 +62,8 @@ public class SubscriptionFragment extends BaseStateFragment.
+ */
+
+public class KioskTranslator {
+ public static String getTranslatedKioskName(String kioskId, Context c) {
+ switch(kioskId) {
+ case "Trending":
+ return c.getString(R.string.trending);
+ case "Top 50":
+ return c.getString(R.string.top_50);
+ case "New & hot":
+ return c.getString(R.string.new_and_hot);
+ default:
+ return kioskId;
+ }
+ }
+}
diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml
index be3548532..02402e2e8 100644
--- a/app/src/main/res/menu/main_menu.xml
+++ b/app/src/main/res/menu/main_menu.xml
@@ -20,6 +20,6 @@
+ android:title="@string/action_about"/>
\ No newline at end of file
diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml
index 878d51741..dabbfb40d 100644
--- a/app/src/main/res/values/settings_keys.xml
+++ b/app/src/main/res/values/settings_keys.xml
@@ -105,12 +105,14 @@
main_page_contentblank_pagefeed_page
+ subscription_page_keykiosk_pagechannel_page@string/blank_page_key@string/kiosk_page_key@string/feed_page_key
+ @string/subscription_page_key@string/channel_page_keymain_page_selected_service
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b71bfa7db..bd8bdc048 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -270,14 +270,21 @@
Content of main pageBlank PageKiosk Page
+ Subscription PageFeed PageChannel Page@string/blank_page_summary@string/kiosk_page_summary@string/feed_page_summary
+ @string/subscription_page_summary@string/channel_page_summarySelect a channelNo channel subscribed yet
+
+
+ Trending
+ Top 50
+ New & hot
From 6d8a361c9af75938ed6480f30c6fd3265aa538bb Mon Sep 17 00:00:00 2001
From: Christian Schabesberger
Date: Thu, 5 Oct 2017 14:57:19 +0200
Subject: [PATCH 009/154] add menu to select kiosk of current service
---
.../newpipe/fragments/MainFragment.java | 50 ++++++++++++++++++-
.../fragments/list/kiosk/KioskFragment.java | 16 ++++--
.../schabi/newpipe/util/NavigationHelper.java | 10 ++++
app/src/main/res/values/strings.xml | 1 +
4 files changed, 70 insertions(+), 7 deletions(-)
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
index c6d3f07f9..4ba648402 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/MainFragment.java
@@ -15,17 +15,22 @@ import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.SubMenu;
import android.view.View;
import android.view.ViewGroup;
import org.schabi.newpipe.BaseFragment;
import org.schabi.newpipe.R;
+import org.schabi.newpipe.extractor.NewPipe;
+import org.schabi.newpipe.extractor.StreamingService;
+import org.schabi.newpipe.extractor.kiosk.KioskList;
import org.schabi.newpipe.fragments.list.channel.ChannelFragment;
import org.schabi.newpipe.fragments.list.feed.FeedFragment;
import org.schabi.newpipe.fragments.list.kiosk.KioskFragment;
import org.schabi.newpipe.fragments.subscription.SubscriptionFragment;
import org.schabi.newpipe.report.ErrorActivity;
import org.schabi.newpipe.report.UserAction;
+import org.schabi.newpipe.util.KioskTranslator;
import org.schabi.newpipe.util.NavigationHelper;
import java.util.concurrent.ExecutionException;
@@ -36,6 +41,12 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
public int currentServiceId = -1;
+ /*//////////////////////////////////////////////////////////////////////////
+ // Konst
+ //////////////////////////////////////////////////////////////////////////*/
+
+ private static final int KIOSK_MENU_OFFSETT = 2000;
+
/*//////////////////////////////////////////////////////////////////////////
// Fragment's LifeCycle
//////////////////////////////////////////////////////////////////////////*/
@@ -77,6 +88,16 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
super.onCreateOptionsMenu(menu, inflater);
if (DEBUG) Log.d(TAG, "onCreateOptionsMenu() called with: menu = [" + menu + "], inflater = [" + inflater + "]");
inflater.inflate(R.menu.main_fragment_menu, menu);
+ SubMenu kioskMenu = menu.addSubMenu(getString(R.string.kiosk));
+ try {
+ createKioskMenu(kioskMenu, inflater);
+ } catch (Exception e) {
+ ErrorActivity.reportError(activity, e,
+ activity.getClass(),
+ null,
+ ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
+ "none", "", R.string.app_ui_crash));
+ }
ActionBar supportActionBar = activity.getSupportActionBar();
if (supportActionBar != null) {
@@ -202,8 +223,33 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
}
/*//////////////////////////////////////////////////////////////////////////
- // Main page content
+ // Select Kiosk
//////////////////////////////////////////////////////////////////////////*/
-
+ private void createKioskMenu(Menu menu, MenuInflater menuInflater)
+ throws Exception {
+ StreamingService service = NewPipe.getService(currentServiceId);
+ KioskList kl = service.getKioskList();
+ int i = 0;
+ for(final String ks : kl.getAvailableKisoks()) {
+ menu.add(0, KIOSK_MENU_OFFSETT + i, Menu.NONE,
+ KioskTranslator.getTranslatedKioskName(ks, getContext()))
+ .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
+ @Override
+ public boolean onMenuItemClick(MenuItem menuItem) {
+ try {
+ NavigationHelper.openKioskFragment(getFragmentManager(), currentServiceId, ks);
+ } catch (Exception e) {
+ ErrorActivity.reportError(activity, e,
+ activity.getClass(),
+ null,
+ ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
+ "none", "", R.string.app_ui_crash));
+ }
+ return true;
+ }
+ });
+ i++;
+ }
+ }
}
diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java b/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
index 451ade674..8e1acb572 100644
--- a/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/fragments/list/kiosk/KioskFragment.java
@@ -62,14 +62,20 @@ public class KioskFragment extends BaseListInfoFragment {
public static KioskFragment getInstance(int serviceId)
throws ExtractionException {
+ return getInstance(serviceId, NewPipe.getService(serviceId)
+ .getKioskList()
+ .getDefaultKioskId());
+ }
+
+ public static KioskFragment getInstance(int serviceId, String kioskId)
+ throws ExtractionException {
KioskFragment instance = new KioskFragment();
StreamingService service = NewPipe.getService(serviceId);
- String defaultKioskId = service.getKioskList().getDefaultKioskId();
- UrlIdHandler defaultKioskTypeUrlIdHandler = service.getKioskList()
- .getUrlIdHandlerByType(defaultKioskId);
+ UrlIdHandler kioskTypeUrlIdHandler = service.getKioskList()
+ .getUrlIdHandlerByType(kioskId);
instance.setInitialData(serviceId,
- defaultKioskTypeUrlIdHandler.getUrl(defaultKioskId),
- defaultKioskId);
+ kioskTypeUrlIdHandler.getUrl(kioskId),
+ kioskId);
return instance;
}
diff --git a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
index 538675685..b30407315 100644
--- a/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
+++ b/app/src/main/java/org/schabi/newpipe/util/NavigationHelper.java
@@ -23,6 +23,7 @@ import org.schabi.newpipe.fragments.MainFragment;
import org.schabi.newpipe.fragments.detail.VideoDetailFragment;
import org.schabi.newpipe.fragments.list.channel.ChannelFragment;
import org.schabi.newpipe.fragments.list.feed.FeedFragment;
+import org.schabi.newpipe.fragments.list.kiosk.KioskFragment;
import org.schabi.newpipe.fragments.list.playlist.PlaylistFragment;
import org.schabi.newpipe.fragments.list.search.SearchFragment;
import org.schabi.newpipe.history.HistoryActivity;
@@ -163,6 +164,15 @@ public class NavigationHelper {
.commit();
}
+ public static void openKioskFragment(FragmentManager fragmentManager, int serviceId, String kioskId)
+ throws ExtractionException {
+ fragmentManager.beginTransaction()
+ .setCustomAnimations(R.animator.custom_fade_in, R.animator.custom_fade_out, R.animator.custom_fade_in, R.animator.custom_fade_out)
+ .replace(R.id.fragment_holder, KioskFragment.getInstance(serviceId, kioskId))
+ .addToBackStack(null)
+ .commit();
+ }
+
/*//////////////////////////////////////////////////////////////////////////
// Through Intents
//////////////////////////////////////////////////////////////////////////*/
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index bd8bdc048..e11483ac0 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -284,6 +284,7 @@
No channel subscribed yet
+ KisokTrendingTop 50New & hot
From cbfc359a99c18e37b45c86c98fbeadba20fdb821 Mon Sep 17 00:00:00 2001
From: Christian Schabesberger
Date: Mon, 9 Oct 2017 12:22:01 +0200
Subject: [PATCH 010/154] add service icons
---
app/src/main/res/drawable-nodpi/soud_cloud.png | Bin 0 -> 12259 bytes
app/src/main/res/drawable-nodpi/youtube.png | Bin 0 -> 6182 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 app/src/main/res/drawable-nodpi/soud_cloud.png
create mode 100644 app/src/main/res/drawable-nodpi/youtube.png
diff --git a/app/src/main/res/drawable-nodpi/soud_cloud.png b/app/src/main/res/drawable-nodpi/soud_cloud.png
new file mode 100644
index 0000000000000000000000000000000000000000..0fa6045d5e89b438b5b2b15eb61a44bd878797ad
GIT binary patch
literal 12259
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