added themeing for peertube, change peertube instance
|
@ -54,7 +54,7 @@ dependencies {
|
||||||
exclude module: 'support-annotations'
|
exclude module: 'support-annotations'
|
||||||
})
|
})
|
||||||
|
|
||||||
implementation 'com.github.yausername:NewPipeExtractor:df0db84'
|
implementation 'com.github.yausername:NewPipeExtractor:b1a77fa'
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
testImplementation 'org.mockito:mockito-core:2.23.0'
|
testImplementation 'org.mockito:mockito-core:2.23.0'
|
||||||
|
|
|
@ -50,6 +50,7 @@ import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
|
import org.schabi.newpipe.extractor.ServiceList;
|
||||||
import org.schabi.newpipe.extractor.StreamingService;
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
import org.schabi.newpipe.fragments.BackPressable;
|
import org.schabi.newpipe.fragments.BackPressable;
|
||||||
|
@ -95,6 +96,8 @@ public class MainActivity extends AppCompatActivity {
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
|
if (DEBUG) Log.d(TAG, "onCreate() called with: savedInstanceState = [" + savedInstanceState + "]");
|
||||||
|
|
||||||
|
ServiceHelper.initServices(this);
|
||||||
|
|
||||||
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
|
ThemeHelper.setTheme(this, ServiceHelper.getSelectedServiceId(this));
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
|
@ -18,9 +18,11 @@ import com.nostra13.universalimageloader.core.ImageLoader;
|
||||||
|
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
import org.schabi.newpipe.extractor.NewPipe;
|
import org.schabi.newpipe.extractor.NewPipe;
|
||||||
|
import org.schabi.newpipe.extractor.ServiceList;
|
||||||
import org.schabi.newpipe.extractor.utils.Localization;
|
import org.schabi.newpipe.extractor.utils.Localization;
|
||||||
import org.schabi.newpipe.report.ErrorActivity;
|
import org.schabi.newpipe.report.ErrorActivity;
|
||||||
import org.schabi.newpipe.report.UserAction;
|
import org.schabi.newpipe.report.UserAction;
|
||||||
|
import org.schabi.newpipe.util.Constants;
|
||||||
import org.schabi.newpipe.util.FilePickerActivityHelper;
|
import org.schabi.newpipe.util.FilePickerActivityHelper;
|
||||||
import org.schabi.newpipe.util.ZipHelper;
|
import org.schabi.newpipe.util.ZipHelper;
|
||||||
|
|
||||||
|
@ -39,6 +41,9 @@ import java.util.Map;
|
||||||
import java.util.zip.ZipFile;
|
import java.util.zip.ZipFile;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
import io.reactivex.Single;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
|
||||||
public class ContentSettingsFragment extends BasePreferenceFragment {
|
public class ContentSettingsFragment extends BasePreferenceFragment {
|
||||||
|
|
||||||
private static final int REQUEST_IMPORT_PATH = 8945;
|
private static final int REQUEST_IMPORT_PATH = 8945;
|
||||||
|
@ -122,6 +127,40 @@ public class ContentSettingsFragment extends BasePreferenceFragment {
|
||||||
NewPipe.setLocalization(new Localization((String) newCountry, oldLocal.getLanguage()));
|
NewPipe.setLocalization(new Localization((String) newCountry, oldLocal.getLanguage()));
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Preference peerTubeInstance = findPreference(getString(R.string.peertube_instance_url_key));
|
||||||
|
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||||
|
peerTubeInstance.setDefaultValue(sharedPreferences.getString(getString(R.string.peertube_instance_url_key), ServiceList.PeerTube.getBaseUrl()));
|
||||||
|
peerTubeInstance.setSummary(sharedPreferences.getString(getString(R.string.peertube_instance_url_key), ServiceList.PeerTube.getBaseUrl()));
|
||||||
|
|
||||||
|
peerTubeInstance.setOnPreferenceChangeListener((Preference p, Object newInstance) -> {
|
||||||
|
String url = (String) newInstance;
|
||||||
|
if(!url.startsWith("https://")){
|
||||||
|
Toast.makeText(getActivity(), "instance url should start with https://",
|
||||||
|
Toast.LENGTH_SHORT).show();
|
||||||
|
return false;
|
||||||
|
}else{
|
||||||
|
boolean shouldUpdate = Single.fromCallable(() -> {
|
||||||
|
ServiceList.PeerTube.setInstance(url);
|
||||||
|
return true;
|
||||||
|
}).subscribeOn(Schedulers.io())
|
||||||
|
.onErrorReturnItem(false)
|
||||||
|
.blockingGet();
|
||||||
|
|
||||||
|
if (shouldUpdate) {
|
||||||
|
p.setSummary(url);
|
||||||
|
SharedPreferences.Editor editor = sharedPreferences.edit();
|
||||||
|
editor.putString(getString(R.string.peertube_instance_name_key), ServiceList.PeerTube.getServiceInfo().getName()).apply();
|
||||||
|
editor.putString(getString(R.string.current_service_key), ServiceList.PeerTube.getServiceInfo().getName()).apply();
|
||||||
|
editor.putBoolean(Constants.KEY_MAIN_PAGE_CHANGE, true).apply();
|
||||||
|
}else{
|
||||||
|
Toast.makeText(getActivity(), "unable to update instance",
|
||||||
|
Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
return shouldUpdate;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -44,6 +44,10 @@ public class KioskTranslator {
|
||||||
return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot);
|
return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot);
|
||||||
case "New & hot":
|
case "New & hot":
|
||||||
return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot);
|
return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot);
|
||||||
|
case "Local":
|
||||||
|
return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_kiosk_local);
|
||||||
|
case "Recently added":
|
||||||
|
return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_kiosk_recent);
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package org.schabi.newpipe.util;
|
package org.schabi.newpipe.util;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.annotation.DrawableRes;
|
import android.support.annotation.DrawableRes;
|
||||||
import android.support.annotation.StringRes;
|
import android.support.annotation.StringRes;
|
||||||
|
@ -10,7 +11,9 @@ import org.schabi.newpipe.extractor.NewPipe;
|
||||||
import org.schabi.newpipe.extractor.ServiceList;
|
import org.schabi.newpipe.extractor.ServiceList;
|
||||||
import org.schabi.newpipe.extractor.StreamingService;
|
import org.schabi.newpipe.extractor.StreamingService;
|
||||||
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
|
||||||
|
import org.schabi.newpipe.extractor.services.peertube.PeertubeInstance;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
|
import static org.schabi.newpipe.extractor.ServiceList.SoundCloud;
|
||||||
|
@ -24,9 +27,11 @@ public class ServiceHelper {
|
||||||
case 0:
|
case 0:
|
||||||
return R.drawable.place_holder_youtube;
|
return R.drawable.place_holder_youtube;
|
||||||
case 1:
|
case 1:
|
||||||
return R.drawable.place_holder_circle;
|
return R.drawable.place_holder_cloud;
|
||||||
|
case 2:
|
||||||
|
return R.drawable.place_holder_peertube;
|
||||||
default:
|
default:
|
||||||
return R.drawable.service;
|
return R.drawable.place_holder_circle;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,4 +132,19 @@ public class ServiceHelper {
|
||||||
default: return true;
|
default: return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void initService(Context context, int serviceId) {
|
||||||
|
if(serviceId == 2){
|
||||||
|
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
String peerTubeInstanceUrl = sharedPreferences.getString(context.getString(R.string.peertube_instance_url_key), ServiceList.PeerTube.getBaseUrl());
|
||||||
|
String peerTubeInstanceName = sharedPreferences.getString(context.getString(R.string.peertube_instance_name_key), ServiceList.PeerTube.getServiceInfo().getName());
|
||||||
|
ServiceList.PeerTube.setInstance(peerTubeInstanceUrl, peerTubeInstanceName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void initServices(Context context){
|
||||||
|
for(StreamingService s : ServiceList.all()){
|
||||||
|
initService(context, s.getServiceId());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,7 +136,14 @@ public class ThemeHelper {
|
||||||
else if (selectedTheme.equals(blackTheme)) themeName = "BlackTheme";
|
else if (selectedTheme.equals(blackTheme)) themeName = "BlackTheme";
|
||||||
else if (selectedTheme.equals(darkTheme)) themeName = "DarkTheme";
|
else if (selectedTheme.equals(darkTheme)) themeName = "DarkTheme";
|
||||||
|
|
||||||
themeName += "." + service.getServiceInfo().getName();
|
switch (serviceId) {
|
||||||
|
case 2:
|
||||||
|
//service name for peertube depends on the instance
|
||||||
|
themeName += ".PeerTube";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
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) {
|
if (resourceId > 0) {
|
||||||
|
|
After Width: | Height: | Size: 208 B |
After Width: | Height: | Size: 206 B |
After Width: | Height: | Size: 475 B |
After Width: | Height: | Size: 460 B |
After Width: | Height: | Size: 166 B |
After Width: | Height: | Size: 166 B |
After Width: | Height: | Size: 311 B |
After Width: | Height: | Size: 312 B |
After Width: | Height: | Size: 7.8 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 235 B |
After Width: | Height: | Size: 226 B |
After Width: | Height: | Size: 597 B |
After Width: | Height: | Size: 588 B |
After Width: | Height: | Size: 291 B |
After Width: | Height: | Size: 284 B |
After Width: | Height: | Size: 856 B |
After Width: | Height: | Size: 835 B |
After Width: | Height: | Size: 344 B |
After Width: | Height: | Size: 345 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.1 KiB |
|
@ -31,4 +31,23 @@
|
||||||
<item name="colorAccent">@color/dark_soundcloud_accent_color</item>
|
<item name="colorAccent">@color/dark_soundcloud_accent_color</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<!-- PeerTube -->
|
||||||
|
<style name="LightTheme.PeerTube" parent="LightTheme.Switchable">
|
||||||
|
<item name="colorPrimary">@color/light_peertube_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/light_peertube_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/light_peertube_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="DarkTheme.PeerTube" parent="DarkTheme.Switchable">
|
||||||
|
<item name="colorPrimary">@color/dark_peertube_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/dark_peertube_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/dark_peertube_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="BlackTheme.PeerTube" parent="BlackTheme.Switchable">
|
||||||
|
<item name="colorPrimary">@color/dark_peertube_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/dark_peertube_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/dark_peertube_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -28,6 +28,8 @@
|
||||||
<attr name="bug" format="reference"/>
|
<attr name="bug" format="reference"/>
|
||||||
<attr name="settings" format="reference"/>
|
<attr name="settings" format="reference"/>
|
||||||
<attr name="ic_hot" format="reference"/>
|
<attr name="ic_hot" format="reference"/>
|
||||||
|
<attr name="ic_kiosk_local" format="reference"/>
|
||||||
|
<attr name="ic_kiosk_recent" format="reference"/>
|
||||||
<attr name="ic_channel" format="reference"/>
|
<attr name="ic_channel" format="reference"/>
|
||||||
<attr name="ic_bookmark" format="reference"/>
|
<attr name="ic_bookmark" format="reference"/>
|
||||||
<attr name="ic_playlist_add" format="reference"/>
|
<attr name="ic_playlist_add" format="reference"/>
|
||||||
|
|
|
@ -22,4 +22,15 @@
|
||||||
<color name="dark_soundcloud_accent_color">#FFFFFF</color>
|
<color name="dark_soundcloud_accent_color">#FFFFFF</color>
|
||||||
<color name="dark_soundcloud_statusbar_color">#ff9100</color>
|
<color name="dark_soundcloud_statusbar_color">#ff9100</color>
|
||||||
|
|
||||||
|
<!-- PeerTube -->
|
||||||
|
<color name="light_peertube_primary_color">#f97d46</color>
|
||||||
|
<color name="light_peertube_dark_color">#c04e19</color>
|
||||||
|
<color name="light_peertube_accent_color">#000000</color>
|
||||||
|
<color name="light_peertube_statusbar_color">#f97d46</color>
|
||||||
|
|
||||||
|
<color name="dark_peertube_primary_color">#f97d46</color>
|
||||||
|
<color name="dark_peertube_dark_color">#c04e19</color>
|
||||||
|
<color name="dark_peertube_accent_color">#FFFFFF</color>
|
||||||
|
<color name="dark_peertube_statusbar_color">#f97d46</color>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -143,6 +143,8 @@
|
||||||
<string name="default_language_value">en</string>
|
<string name="default_language_value">en</string>
|
||||||
<string name="default_country_value">GB</string>
|
<string name="default_country_value">GB</string>
|
||||||
<string name="content_language_key" translatable="false">content_language</string>
|
<string name="content_language_key" translatable="false">content_language</string>
|
||||||
|
<string name="peertube_instance_url_key" translatable="false">peertube_instance_url</string>
|
||||||
|
<string name="peertube_instance_name_key" translatable="false">peertube_instance_name</string>
|
||||||
<string name="content_country_key" translatable="false">content_country</string>
|
<string name="content_country_key" translatable="false">content_country</string>
|
||||||
<string name="show_age_restricted_content" translatable="false">show_age_restricted_content</string>
|
<string name="show_age_restricted_content" translatable="false">show_age_restricted_content</string>
|
||||||
<string name="use_tor_key" translatable="false">use_tor</string>
|
<string name="use_tor_key" translatable="false">use_tor</string>
|
||||||
|
|
|
@ -107,6 +107,7 @@
|
||||||
<string name="default_content_country_title">Default content country</string>
|
<string name="default_content_country_title">Default content country</string>
|
||||||
<string name="service_title">Service</string>
|
<string name="service_title">Service</string>
|
||||||
<string name="content_language_title">Default content language</string>
|
<string name="content_language_title">Default content language</string>
|
||||||
|
<string name="peertube_instance_url_title">PeerTube instance</string>
|
||||||
<string name="settings_category_player_title">Player</string>
|
<string name="settings_category_player_title">Player</string>
|
||||||
<string name="settings_category_player_behavior_title">Behavior</string>
|
<string name="settings_category_player_behavior_title">Behavior</string>
|
||||||
<string name="settings_category_video_audio_title">Video & audio</string>
|
<string name="settings_category_video_audio_title">Video & audio</string>
|
||||||
|
|
|
@ -44,6 +44,8 @@
|
||||||
<item name="play">@drawable/ic_play_arrow_black_24dp</item>
|
<item name="play">@drawable/ic_play_arrow_black_24dp</item>
|
||||||
<item name="settings">@drawable/ic_settings_black_24dp</item>
|
<item name="settings">@drawable/ic_settings_black_24dp</item>
|
||||||
<item name="ic_hot">@drawable/ic_whatshot_black_24dp</item>
|
<item name="ic_hot">@drawable/ic_whatshot_black_24dp</item>
|
||||||
|
<item name="ic_kiosk_local">@drawable/ic_kiosklocal_black_24dp</item>
|
||||||
|
<item name="ic_kiosk_recent">@drawable/ic_kioskrecent_black_24dp</item>
|
||||||
<item name="ic_channel">@drawable/ic_channel_black_24dp</item>
|
<item name="ic_channel">@drawable/ic_channel_black_24dp</item>
|
||||||
<item name="ic_bookmark">@drawable/ic_bookmark_black_24dp</item>
|
<item name="ic_bookmark">@drawable/ic_bookmark_black_24dp</item>
|
||||||
<item name="ic_playlist_add">@drawable/ic_playlist_add_black_24dp</item>
|
<item name="ic_playlist_add">@drawable/ic_playlist_add_black_24dp</item>
|
||||||
|
@ -104,6 +106,8 @@
|
||||||
<item name="play">@drawable/ic_play_arrow_white_24dp</item>
|
<item name="play">@drawable/ic_play_arrow_white_24dp</item>
|
||||||
<item name="settings">@drawable/ic_settings_white_24dp</item>
|
<item name="settings">@drawable/ic_settings_white_24dp</item>
|
||||||
<item name="ic_hot">@drawable/ic_whatshot_white_24dp</item>
|
<item name="ic_hot">@drawable/ic_whatshot_white_24dp</item>
|
||||||
|
<item name="ic_kiosk_local">@drawable/ic_kiosklocal_white_24dp</item>
|
||||||
|
<item name="ic_kiosk_recent">@drawable/ic_kioskrecent_white_24dp</item>
|
||||||
<item name="ic_channel">@drawable/ic_channel_white_24dp</item>
|
<item name="ic_channel">@drawable/ic_channel_white_24dp</item>
|
||||||
<item name="ic_bookmark">@drawable/ic_bookmark_white_24dp</item>
|
<item name="ic_bookmark">@drawable/ic_bookmark_white_24dp</item>
|
||||||
<item name="ic_playlist_add">@drawable/ic_playlist_add_white_24dp</item>
|
<item name="ic_playlist_add">@drawable/ic_playlist_add_white_24dp</item>
|
||||||
|
|
|
@ -28,4 +28,23 @@
|
||||||
<item name="colorAccent">@color/dark_soundcloud_accent_color</item>
|
<item name="colorAccent">@color/dark_soundcloud_accent_color</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<!-- PeerTube -->
|
||||||
|
<style name="LightTheme.PeerTube" parent="LightTheme.Switchable">
|
||||||
|
<item name="colorPrimary">@color/light_peertube_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/light_peertube_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/light_peertube_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="DarkTheme.PeerTube" parent="DarkTheme.Switchable">
|
||||||
|
<item name="colorPrimary">@color/dark_peertube_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/dark_peertube_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/dark_peertube_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="BlackTheme.PeerTube" parent="BlackTheme.Switchable">
|
||||||
|
<item name="colorPrimary">@color/dark_peertube_primary_color</item>
|
||||||
|
<item name="colorPrimaryDark">@color/dark_peertube_dark_color</item>
|
||||||
|
<item name="colorAccent">@color/dark_peertube_accent_color</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -18,6 +18,11 @@
|
||||||
android:summary="%s"
|
android:summary="%s"
|
||||||
android:title="@string/content_language_title"/>
|
android:title="@string/content_language_title"/>
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:key="@string/peertube_instance_url_key"
|
||||||
|
android:title="@string/peertube_instance_url_title"
|
||||||
|
android:inputType="textUri" />
|
||||||
|
|
||||||
<SwitchPreference
|
<SwitchPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:key="@string/show_age_restricted_content"
|
android:key="@string/show_age_restricted_content"
|
||||||
|
|