mirror of
https://github.com/TeamNewPipe/NewPipe
synced 2025-10-25 04:17:39 +00:00
Merge branch 'dev' into feature/amazonfiretv-search-support
This commit is contained in:
@@ -57,7 +57,7 @@ dependencies {
|
||||
exclude module: 'support-annotations'
|
||||
})
|
||||
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:f7c7b9df1a'
|
||||
implementation 'com.github.TeamNewPipe:NewPipeExtractor:79b0a19d1af'
|
||||
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'org.mockito:mockito-core:2.23.0'
|
||||
|
||||
@@ -35,12 +35,6 @@
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<activity
|
||||
android:name=".player.old.PlayVideoActivity"
|
||||
android:configChanges="orientation|keyboardHidden|screenSize"
|
||||
android:theme="@style/OldVideoPlayerTheme"
|
||||
tools:ignore="UnusedAttribute"/>
|
||||
|
||||
<service
|
||||
android:name=".player.BackgroundPlayer"
|
||||
android:exported="false">
|
||||
@@ -183,6 +177,19 @@
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.BROWSABLE"/>
|
||||
|
||||
<data android:scheme="http"/>
|
||||
<data android:scheme="https"/>
|
||||
<data android:host="www.youtube-nocookie.com"/>
|
||||
<data android:pathPrefix="/embed/"/>
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH"/>
|
||||
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.BROWSABLE"/>
|
||||
|
||||
<data android:scheme="vnd.youtube"/>
|
||||
<data android:scheme="vnd.youtube.launch"/>
|
||||
</intent-filter>
|
||||
|
||||
@@ -55,6 +55,7 @@ import org.schabi.newpipe.ReCaptchaActivity;
|
||||
import org.schabi.newpipe.download.DownloadDialog;
|
||||
import org.schabi.newpipe.extractor.InfoItem;
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
import org.schabi.newpipe.extractor.ServiceList;
|
||||
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
|
||||
import org.schabi.newpipe.extractor.exceptions.ParsingException;
|
||||
import org.schabi.newpipe.extractor.services.youtube.extractors.YoutubeStreamExtractor;
|
||||
@@ -362,7 +363,8 @@ public class VideoDetailFragment
|
||||
}
|
||||
break;
|
||||
case R.id.detail_controls_download:
|
||||
if (PermissionHelper.checkStoragePermissions(activity, PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) {
|
||||
if (PermissionHelper.checkStoragePermissions(activity,
|
||||
PermissionHelper.DOWNLOAD_DIALOG_REQUEST_CODE)) {
|
||||
this.openDownloadDialog();
|
||||
}
|
||||
break;
|
||||
@@ -446,7 +448,6 @@ public class VideoDetailFragment
|
||||
return;
|
||||
}
|
||||
|
||||
//Log.d(TAG, "toggleExpandRelatedVideos() called with: info = [" + info + "], from = [" + INITIAL_RELATED_VIDEOS + "]");
|
||||
for (int i = INITIAL_RELATED_VIDEOS; i < info.getRelatedStreams().size(); i++) {
|
||||
InfoItem item = info.getRelatedStreams().get(i);
|
||||
//Log.d(TAG, "i = " + i);
|
||||
@@ -519,7 +520,9 @@ public class VideoDetailFragment
|
||||
infoItemBuilder.setOnStreamSelectedListener(new OnClickGesture<StreamInfoItem>() {
|
||||
@Override
|
||||
public void selected(StreamInfoItem selectedItem) {
|
||||
selectAndLoadVideo(selectedItem.getServiceId(), selectedItem.getUrl(), selectedItem.getName());
|
||||
selectAndLoadVideo(selectedItem.getServiceId(),
|
||||
selectedItem.getUrl(),
|
||||
selectedItem.getName());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -699,13 +702,13 @@ public class VideoDetailFragment
|
||||
switch (id) {
|
||||
case R.id.menu_item_share: {
|
||||
if (currentInfo != null) {
|
||||
shareUrl(currentInfo.getName(), currentInfo.getUrl());
|
||||
shareUrl(currentInfo.getName(), currentInfo.getOriginalUrl());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
case R.id.menu_item_openInBrowser: {
|
||||
if (currentInfo != null) {
|
||||
openUrlInBrowser(currentInfo.getUrl());
|
||||
openUrlInBrowser(currentInfo.getOriginalUrl());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -742,10 +745,16 @@ public class VideoDetailFragment
|
||||
boolean isExternalPlayerEnabled = PreferenceManager.getDefaultSharedPreferences(activity)
|
||||
.getBoolean(activity.getString(R.string.use_external_video_player_key), false);
|
||||
|
||||
sortedVideoStreams = ListHelper.getSortedStreamVideosList(activity, info.getVideoStreams(), info.getVideoOnlyStreams(), false);
|
||||
sortedVideoStreams = ListHelper.getSortedStreamVideosList(
|
||||
activity,
|
||||
info.getVideoStreams(),
|
||||
info.getVideoOnlyStreams(),
|
||||
false);
|
||||
selectedVideoStreamIndex = ListHelper.getDefaultResolutionIndex(activity, sortedVideoStreams);
|
||||
|
||||
final StreamItemAdapter<VideoStream, Stream> streamsAdapter = new StreamItemAdapter<>(activity, new StreamSizeWrapper<>(sortedVideoStreams, activity), isExternalPlayerEnabled);
|
||||
final StreamItemAdapter<VideoStream, Stream> streamsAdapter =
|
||||
new StreamItemAdapter<>(activity,
|
||||
new StreamSizeWrapper<>(sortedVideoStreams, activity), isExternalPlayerEnabled);
|
||||
spinnerToolbar.setAdapter(streamsAdapter);
|
||||
spinnerToolbar.setSelection(selectedVideoStreamIndex);
|
||||
spinnerToolbar.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@@ -770,17 +779,17 @@ public class VideoDetailFragment
|
||||
*/
|
||||
protected final LinkedList<StackItem> stack = new LinkedList<>();
|
||||
|
||||
public void clearHistory() {
|
||||
stack.clear();
|
||||
}
|
||||
|
||||
public void pushToStack(int serviceId, String videoUrl, String name) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "pushToStack() called with: serviceId = [" + serviceId + "], videoUrl = [" + videoUrl + "], name = [" + name + "]");
|
||||
Log.d(TAG, "pushToStack() called with: serviceId = ["
|
||||
+ serviceId + "], videoUrl = [" + videoUrl + "], name = [" + name + "]");
|
||||
}
|
||||
|
||||
if (stack.size() > 0 && stack.peek().getServiceId() == serviceId && stack.peek().getUrl().equals(videoUrl)) {
|
||||
Log.d(TAG, "pushToStack() called with: serviceId == peek.serviceId = [" + serviceId + "], videoUrl == peek.getUrl = [" + videoUrl + "]");
|
||||
if (stack.size() > 0
|
||||
&& stack.peek().getServiceId() == serviceId
|
||||
&& stack.peek().getUrl().equals(videoUrl)) {
|
||||
Log.d(TAG, "pushToStack() called with: serviceId == peek.serviceId = ["
|
||||
+ serviceId + "], videoUrl == peek.getUrl = [" + videoUrl + "]");
|
||||
return;
|
||||
} else {
|
||||
Log.d(TAG, "pushToStack() wasn't equal");
|
||||
@@ -811,7 +820,11 @@ public class VideoDetailFragment
|
||||
// Get stack item from the new top
|
||||
StackItem peek = stack.peek();
|
||||
|
||||
selectAndLoadVideo(peek.getServiceId(), peek.getUrl(), !TextUtils.isEmpty(peek.getTitle()) ? peek.getTitle() : "");
|
||||
selectAndLoadVideo(peek.getServiceId(),
|
||||
peek.getUrl(),
|
||||
!TextUtils.isEmpty(peek.getTitle())
|
||||
? peek.getTitle()
|
||||
: "");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -831,9 +844,10 @@ public class VideoDetailFragment
|
||||
}
|
||||
|
||||
public void prepareAndHandleInfo(final StreamInfo info, boolean scrollToTop) {
|
||||
if (DEBUG) Log.d(TAG, "prepareAndHandleInfo() called with: info = [" + info + "], scrollToTop = [" + scrollToTop + "]");
|
||||
if (DEBUG) Log.d(TAG, "prepareAndHandleInfo() called with: info = ["
|
||||
+ info + "], scrollToTop = [" + scrollToTop + "]");
|
||||
|
||||
setInitialData(info.getServiceId(), info.getOriginalUrl(), info.getName());
|
||||
setInitialData(info.getServiceId(), info.getUrl(), info.getName());
|
||||
pushToStack(serviceId, url, name);
|
||||
showLoading();
|
||||
|
||||
@@ -1026,7 +1040,8 @@ public class VideoDetailFragment
|
||||
|
||||
private void showContentWithAnimation(long duration,
|
||||
long delay,
|
||||
@FloatRange(from = 0.0f, to = 1.0f) float translationPercent) {
|
||||
@FloatRange(from = 0.0f, to = 1.0f)
|
||||
float translationPercent) {
|
||||
int translationY = (int) (getResources().getDisplayMetrics().heightPixels *
|
||||
(translationPercent > 0.0f ? translationPercent : .06f));
|
||||
|
||||
@@ -1134,7 +1149,7 @@ public class VideoDetailFragment
|
||||
super.handleResult(info);
|
||||
|
||||
setInitialData(info.getServiceId(), info.getOriginalUrl(), info.getName());
|
||||
pushToStack(serviceId, url, name);
|
||||
//pushToStack(serviceId, url, name);
|
||||
|
||||
animateView(thumbnailPlayButton, true, 200);
|
||||
videoTitleTextView.setText(name);
|
||||
@@ -1185,11 +1200,13 @@ public class VideoDetailFragment
|
||||
|
||||
if (info.getDuration() > 0) {
|
||||
detailDurationView.setText(Localization.getDurationString(info.getDuration()));
|
||||
detailDurationView.setBackgroundColor(ContextCompat.getColor(activity, R.color.duration_background_color));
|
||||
detailDurationView.setBackgroundColor(
|
||||
ContextCompat.getColor(activity, R.color.duration_background_color));
|
||||
animateView(detailDurationView, true, 100);
|
||||
} else if (info.getStreamType() == StreamType.LIVE_STREAM) {
|
||||
detailDurationView.setText(R.string.duration_live);
|
||||
detailDurationView.setBackgroundColor(ContextCompat.getColor(activity, R.color.live_duration_background_color));
|
||||
detailDurationView.setBackgroundColor(
|
||||
ContextCompat.getColor(activity, R.color.live_duration_background_color));
|
||||
animateView(detailDurationView, true, 100);
|
||||
} else {
|
||||
detailDurationView.setVisibility(View.GONE);
|
||||
@@ -1269,10 +1286,18 @@ public class VideoDetailFragment
|
||||
|
||||
downloadDialog.show(activity.getSupportFragmentManager(), "downloadDialog");
|
||||
} catch (Exception e) {
|
||||
Toast.makeText(activity,
|
||||
R.string.could_not_setup_download_menu,
|
||||
Toast.LENGTH_LONG).show();
|
||||
e.printStackTrace();
|
||||
ErrorActivity.ErrorInfo info = ErrorActivity.ErrorInfo.make(UserAction.UI_ERROR,
|
||||
ServiceList.all()
|
||||
.get(currentInfo
|
||||
.getServiceId())
|
||||
.getServiceInfo()
|
||||
.getName(), "",
|
||||
R.string.could_not_setup_download_menu);
|
||||
|
||||
ErrorActivity.reportError(getActivity(),
|
||||
e,
|
||||
getActivity().getClass(),
|
||||
getActivity().findViewById(android.R.id.content), info);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -233,10 +233,10 @@ public class ChannelFragment extends BaseListInfoFragment<ChannelInfo> {
|
||||
openRssFeed();
|
||||
break;
|
||||
case R.id.menu_item_openInBrowser:
|
||||
openUrlInBrowser(url);
|
||||
openUrlInBrowser(currentInfo.getOriginalUrl());
|
||||
break;
|
||||
case R.id.menu_item_share:
|
||||
shareUrl(name, url);
|
||||
shareUrl(name, currentInfo.getOriginalUrl());
|
||||
break;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
|
||||
@@ -105,8 +105,13 @@ public class SearchFragment
|
||||
// this three represet the current search query
|
||||
@State
|
||||
protected String searchString;
|
||||
|
||||
/**
|
||||
* No content filter should add like contentfilter = all
|
||||
* be aware of this when implementing an extractor.
|
||||
*/
|
||||
@State
|
||||
protected String[] contentFilter;
|
||||
protected String[] contentFilter = new String[0];
|
||||
@State
|
||||
protected String sortFilter;
|
||||
|
||||
@@ -336,7 +341,7 @@ public class SearchFragment
|
||||
|| (searchEditText != null && !TextUtils.isEmpty(searchEditText.getText()))) {
|
||||
search(!TextUtils.isEmpty(searchString)
|
||||
? searchString
|
||||
: searchEditText.getText().toString(), new String[0], "");
|
||||
: searchEditText.getText().toString(), this.contentFilter, "");
|
||||
} else {
|
||||
if (searchEditText != null) {
|
||||
searchEditText.setText("");
|
||||
@@ -741,6 +746,7 @@ public class SearchFragment
|
||||
|
||||
@Override
|
||||
protected void loadMoreItems() {
|
||||
if(nextPageUrl == null || nextPageUrl.isEmpty()) return;
|
||||
isLoading.set(true);
|
||||
showListFooter(true);
|
||||
if (searchDisposable != null) searchDisposable.dispose();
|
||||
|
||||
@@ -626,6 +626,7 @@ public final class PopupVideoPlayer extends Service {
|
||||
@Override
|
||||
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
|
||||
super.onLoadingComplete(imageUri, view, loadedImage);
|
||||
if (playerImpl == null) return;
|
||||
// rebuild notification here since remote view does not release bitmaps,
|
||||
// causing memory leaks
|
||||
resetNotification();
|
||||
|
||||
@@ -131,7 +131,7 @@ public class AudioReactor implements AudioManager.OnAudioFocusChangeListener,
|
||||
private void onAudioFocusLossCanDuck() {
|
||||
Log.d(TAG, "onAudioFocusLossCanDuck() called");
|
||||
// Set the volume to 1/10 on ducking
|
||||
animateAudio(player.getVolume(), DUCK_AUDIO_TO);
|
||||
player.setVolume(DUCK_AUDIO_TO);
|
||||
}
|
||||
|
||||
private void animateAudio(final float from, final float to) {
|
||||
|
||||
@@ -93,15 +93,17 @@ public class VideoPlaybackResolver implements PlaybackResolver {
|
||||
// Below are auxiliary media sources
|
||||
|
||||
// Create subtitle sources
|
||||
for (final SubtitlesStream subtitle : info.getSubtitles()) {
|
||||
final String mimeType = PlayerHelper.subtitleMimeTypesOf(subtitle.getFormat());
|
||||
if (mimeType == null) continue;
|
||||
if(info.getSubtitles() != null) {
|
||||
for (final SubtitlesStream subtitle : info.getSubtitles()) {
|
||||
final String mimeType = PlayerHelper.subtitleMimeTypesOf(subtitle.getFormat());
|
||||
if (mimeType == null) continue;
|
||||
|
||||
final Format textFormat = Format.createTextSampleFormat(null, mimeType,
|
||||
SELECTION_FLAG_AUTOSELECT, PlayerHelper.captionLanguageOf(context, subtitle));
|
||||
final MediaSource textSource = dataSource.getSampleMediaSourceFactory()
|
||||
.createMediaSource(Uri.parse(subtitle.getURL()), textFormat, TIME_UNSET);
|
||||
mediaSources.add(textSource);
|
||||
final Format textFormat = Format.createTextSampleFormat(null, mimeType,
|
||||
SELECTION_FLAG_AUTOSELECT, PlayerHelper.captionLanguageOf(context, subtitle));
|
||||
final MediaSource textSource = dataSource.getSampleMediaSourceFactory()
|
||||
.createMediaSource(Uri.parse(subtitle.getURL()), textFormat, TIME_UNSET);
|
||||
mediaSources.add(textSource);
|
||||
}
|
||||
}
|
||||
|
||||
if (mediaSources.size() == 1) {
|
||||
|
||||
@@ -31,6 +31,7 @@ import org.schabi.newpipe.ReCaptchaActivity;
|
||||
import org.schabi.newpipe.extractor.Info;
|
||||
import org.schabi.newpipe.extractor.ListExtractor.InfoItemsPage;
|
||||
import org.schabi.newpipe.extractor.NewPipe;
|
||||
import org.schabi.newpipe.extractor.SuggestionExtractor;
|
||||
import org.schabi.newpipe.extractor.channel.ChannelInfo;
|
||||
import org.schabi.newpipe.extractor.channel.ChannelInfoItem;
|
||||
import org.schabi.newpipe.extractor.exceptions.ContentNotAvailableException;
|
||||
@@ -46,6 +47,7 @@ import org.schabi.newpipe.report.UserAction;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InterruptedIOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import io.reactivex.Maybe;
|
||||
@@ -95,10 +97,13 @@ public final class ExtractorHelper {
|
||||
public static Single<List<String>> suggestionsFor(final int serviceId,
|
||||
final String query) {
|
||||
checkServiceId(serviceId);
|
||||
return Single.fromCallable(() ->
|
||||
NewPipe.getService(serviceId)
|
||||
.getSuggestionExtractor()
|
||||
.suggestionList(query));
|
||||
return Single.fromCallable(() -> {
|
||||
SuggestionExtractor extractor = NewPipe.getService(serviceId)
|
||||
.getSuggestionExtractor();
|
||||
return extractor != null
|
||||
? extractor.suggestionList(query)
|
||||
: Collections.emptyList();
|
||||
});
|
||||
}
|
||||
|
||||
public static Single<StreamInfo> getStreamInfo(final int serviceId,
|
||||
|
||||
@@ -31,6 +31,8 @@ public class KioskTranslator {
|
||||
return c.getString(R.string.top_50);
|
||||
case "New & hot":
|
||||
return c.getString(R.string.new_and_hot);
|
||||
case "conferences":
|
||||
return c.getString(R.string.conferences);
|
||||
default:
|
||||
return kioskId;
|
||||
}
|
||||
@@ -44,6 +46,8 @@ public class KioskTranslator {
|
||||
return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot);
|
||||
case "New & hot":
|
||||
return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot);
|
||||
case "conferences":
|
||||
return ThemeHelper.resolveResourceIdFromAttr(c, R.attr.ic_hot);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -24,9 +24,11 @@ public class ServiceHelper {
|
||||
case 0:
|
||||
return R.drawable.place_holder_youtube;
|
||||
case 1:
|
||||
return R.drawable.place_holder_circle;
|
||||
return R.drawable.place_holder_cloud;
|
||||
case 2:
|
||||
return R.drawable.place_holder_gadse;
|
||||
default:
|
||||
return R.drawable.service;
|
||||
return R.drawable.place_holder_circle;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,6 +40,8 @@ public class ServiceHelper {
|
||||
case "playlists": return c.getString(R.string.playlists);
|
||||
case "tracks": return c.getString(R.string.tracks);
|
||||
case "users": return c.getString(R.string.users);
|
||||
case "conferences" : return c.getString(R.string.conferences);
|
||||
case "events" : return c.getString(R.string.events);
|
||||
default: return filter;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,8 @@ import io.reactivex.schedulers.Schedulers;
|
||||
import us.shandian.giga.util.Utility;
|
||||
|
||||
/**
|
||||
* A list adapter for a list of {@link Stream streams}, currently supporting {@link VideoStream} and {@link AudioStream}.
|
||||
* A list adapter for a list of {@link Stream streams},
|
||||
* currently supporting {@link VideoStream}, {@link AudioStream} and {@link SubtitlesStream}
|
||||
*/
|
||||
public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseAdapter {
|
||||
private final Context context;
|
||||
@@ -110,7 +111,10 @@ public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseA
|
||||
}
|
||||
}
|
||||
} else if (stream instanceof AudioStream) {
|
||||
qualityString = ((AudioStream) stream).getAverageBitrate() + "kbps";
|
||||
AudioStream audioStream = ((AudioStream) stream);
|
||||
qualityString = audioStream.getAverageBitrate() > 0
|
||||
? audioStream.getAverageBitrate() + "kbps"
|
||||
: audioStream.getFormat().getName();
|
||||
} else if (stream instanceof SubtitlesStream) {
|
||||
qualityString = ((SubtitlesStream) stream).getDisplayLanguageName();
|
||||
if (((SubtitlesStream) stream).isAutoGenerated()) {
|
||||
@@ -154,8 +158,10 @@ public class StreamItemAdapter<T extends Stream, U extends Stream> extends BaseA
|
||||
private final long[] streamSizes;
|
||||
private final String unknownSize;
|
||||
|
||||
public StreamSizeWrapper(List<T> streamsList, Context context) {
|
||||
this.streamsList = streamsList;
|
||||
public StreamSizeWrapper(List<T> sL, Context context) {
|
||||
this.streamsList = sL != null
|
||||
? sL
|
||||
: Collections.emptyList();
|
||||
this.streamSizes = new long[streamsList.size()];
|
||||
this.unknownSize = context == null ? "--.-" : context.getString(R.string.unknown_content);
|
||||
|
||||
|
||||
@@ -137,7 +137,9 @@ public class ThemeHelper {
|
||||
else if (selectedTheme.equals(darkTheme)) themeName = "DarkTheme";
|
||||
|
||||
themeName += "." + service.getServiceInfo().getName();
|
||||
int resourceId = context.getResources().getIdentifier(themeName, "style", context.getPackageName());
|
||||
int resourceId = context
|
||||
.getResources()
|
||||
.getIdentifier(themeName, "style", context.getPackageName());
|
||||
|
||||
if (resourceId > 0) {
|
||||
return resourceId;
|
||||
|
||||
BIN
app/src/main/res/drawable-nodpi/place_holder_cloud.png
Normal file
BIN
app/src/main/res/drawable-nodpi/place_holder_cloud.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.8 KiB |
BIN
app/src/main/res/drawable-nodpi/place_holder_gadse.png
Normal file
BIN
app/src/main/res/drawable-nodpi/place_holder_gadse.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
12
app/src/main/res/drawable-v23/splash_background.xml
Normal file
12
app/src/main/res/drawable-v23/splash_background.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:drawable="@color/light_youtube_primary_color"/>
|
||||
|
||||
<item
|
||||
android:width="80dp"
|
||||
android:height="80dp"
|
||||
android:gravity="center"
|
||||
android:drawable="@drawable/splash_forground"/>
|
||||
</layer-list>
|
||||
7
app/src/main/res/drawable/splash_background.xml
Normal file
7
app/src/main/res/drawable/splash_background.xml
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:drawable="@color/dark_background_color"/>
|
||||
|
||||
</layer-list>
|
||||
10
app/src/main/res/drawable/splash_forground.xml
Normal file
10
app/src/main/res/drawable/splash_forground.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="100dp"
|
||||
android:height="100dp"
|
||||
android:viewportWidth="100"
|
||||
android:viewportHeight="100">
|
||||
<path
|
||||
android:pathData="m23.909,10.211v78.869c0,0 7.7,-4.556 12.4,-7.337V67.477,56.739 31.686c0,0 3.707,2.173 8.948,5.24 6.263,3.579 14.57,8.565 21.473,12.655 -9.358,5.483 -16.8,9.876 -22.496,13.234V77.053C57.974,68.927 75.176,58.762 90.762,49.581 75.551,40.634 57.144,29.768 43.467,21.715 31.963,14.94 23.909,10.211 23.909,10.211Z"
|
||||
android:strokeWidth="1.2782383"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
@@ -31,4 +31,22 @@
|
||||
<item name="colorAccent">@color/dark_soundcloud_accent_color</item>
|
||||
</style>
|
||||
|
||||
<!-- Media.ccc -->
|
||||
<style name="LightTheme.MediaCCC" parent="LightTheme.Switchable">
|
||||
<item name="colorPrimary">@color/light_media_ccc_primary_color</item>
|
||||
<item name="colorPrimaryDark">@color/light_media_ccc_statusbar_color</item>
|
||||
<item name="colorAccent">@color/light_media_ccc_accent_color</item>
|
||||
</style>
|
||||
|
||||
<style name="DarkTheme.MediaCCC" parent="DarkTheme.Switchable">
|
||||
<item name="colorPrimary">@color/dark_media_ccc_primary_color</item>
|
||||
<item name="colorPrimaryDark">@color/dark_media_ccc_statusbar_color</item>
|
||||
<item name="colorAccent">@color/dark_media_ccc_accent_color</item>
|
||||
</style>
|
||||
|
||||
<style name="BlackTheme.MediaCCC" parent="BlackTheme.Switchable">
|
||||
<item name="colorPrimary">@color/dark_media_ccc_primary_color</item>
|
||||
<item name="colorPrimaryDark">@color/dark_media_ccc_statusbar_color</item>
|
||||
<item name="colorAccent">@color/dark_media_ccc_accent_color</item>
|
||||
</style>
|
||||
</resources>
|
||||
@@ -22,4 +22,15 @@
|
||||
<color name="dark_soundcloud_accent_color">#FFFFFF</color>
|
||||
<color name="dark_soundcloud_statusbar_color">#ff9100</color>
|
||||
|
||||
<!-- Media.CCC -->
|
||||
<color name="light_media_ccc_primary_color">#9e9e9e</color>
|
||||
<color name="light_media_ccc_dark_color">#616161</color>
|
||||
<color name="light_media_ccc_accent_color">#000000</color>
|
||||
<color name="light_media_ccc_statusbar_color">#afafaf</color>
|
||||
|
||||
<color name="dark_media_ccc_primary_color">#9e9e9e</color>
|
||||
<color name="dark_media_ccc_dark_color">#616161</color>
|
||||
<color name="dark_media_ccc_accent_color">#FFFFFF</color>
|
||||
<color name="dark_media_ccc_statusbar_color">#afafaf</color>
|
||||
|
||||
</resources>
|
||||
@@ -137,6 +137,7 @@
|
||||
<string name="videos">Videos</string>
|
||||
<string name="tracks">Tracks</string>
|
||||
<string name="users">Users</string>
|
||||
<string name="events">Events</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="later">Later</string>
|
||||
<string name="disabled">Disabled</string>
|
||||
@@ -396,6 +397,7 @@
|
||||
<string name="trending">Trending</string>
|
||||
<string name="top_50">Top 50</string>
|
||||
<string name="new_and_hot">New & hot</string>
|
||||
<string name="conferences">Conferences</string>
|
||||
<string name="service_kiosk_string" translatable="false">%1$s/%2$s</string>
|
||||
|
||||
<!-- Play Queue -->
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<item name="colorPrimaryDark">@android:color/transparent</item>
|
||||
<item name="colorAccent">@android:color/transparent</item>
|
||||
|
||||
<item name="android:windowBackground">@color/dark_background_color</item>
|
||||
<item name="android:windowBackground">@drawable/splash_background</item>
|
||||
</style>
|
||||
|
||||
<!-- Base themes -->
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
<style name="BlackTheme.YouTube" parent="BlackTheme.Switchable">
|
||||
</style>
|
||||
|
||||
<!-- SoundCloud -->
|
||||
<style name="LightTheme.SoundCloud" parent="LightTheme.Switchable">
|
||||
<item name="colorPrimary">@color/light_soundcloud_primary_color</item>
|
||||
@@ -28,4 +29,23 @@
|
||||
<item name="colorAccent">@color/dark_soundcloud_accent_color</item>
|
||||
</style>
|
||||
|
||||
<!-- Media.ccc -->
|
||||
<style name="LightTheme.MediaCCC" parent="LightTheme.Switchable">
|
||||
<item name="colorPrimary">@color/light_media_ccc_primary_color</item>
|
||||
<item name="colorPrimaryDark">@color/light_media_ccc_statusbar_color</item>
|
||||
<item name="colorAccent">@color/light_media_ccc_accent_color</item>
|
||||
</style>
|
||||
|
||||
<style name="DarkTheme.MediaCCC" parent="DarkTheme.Switchable">
|
||||
<item name="colorPrimary">@color/dark_media_ccc_primary_color</item>
|
||||
<item name="colorPrimaryDark">@color/dark_media_ccc_statusbar_color</item>
|
||||
<item name="colorAccent">@color/dark_media_ccc_accent_color</item>
|
||||
</style>
|
||||
|
||||
<style name="BlackTheme.MediaCCC" parent="BlackTheme.Switchable">
|
||||
<item name="colorPrimary">@color/dark_media_ccc_primary_color</item>
|
||||
<item name="colorPrimaryDark">@color/dark_media_ccc_statusbar_color</item>
|
||||
<item name="colorAccent">@color/dark_media_ccc_accent_color</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -1,9 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:title="@string/settings_category_appearance_title">
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/default_theme_value"
|
||||
android:entries="@array/theme_description_list"
|
||||
android:entryValues="@array/theme_values_list"
|
||||
@@ -12,17 +14,20 @@
|
||||
android:title="@string/theme_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/show_next_video_key"
|
||||
android:title="@string/show_next_and_similar_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/show_hold_to_append_key"
|
||||
android:title="@string/show_hold_to_append_title"
|
||||
android:summary="@string/show_hold_to_append_summary"/>
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/list_view_mode_value"
|
||||
android:entries="@array/list_view_mode_description"
|
||||
android:entryValues="@array/list_view_mode_values"
|
||||
@@ -31,11 +36,13 @@
|
||||
android:title="@string/list_view_mode"/>
|
||||
|
||||
<Preference
|
||||
app:iconSpaceReserved="false"
|
||||
android:key="@string/caption_settings_key"
|
||||
android:title="@string/caption_setting_title"
|
||||
android:summary="@string/caption_setting_description"/>
|
||||
|
||||
<PreferenceScreen
|
||||
app:iconSpaceReserved="false"
|
||||
android:fragment="org.schabi.newpipe.settings.tabs.ChooseTabsFragment"
|
||||
android:summary="@string/main_page_content_summary"
|
||||
android:key="@string/main_page_content_key"
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:title="@string/content">
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/default_country_value"
|
||||
android:entries="@array/country_names"
|
||||
android:entryValues="@array/country_codes"
|
||||
@@ -11,6 +13,7 @@
|
||||
android:title="@string/default_content_country_title"/>
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/default_language_value"
|
||||
android:entries="@array/language_names"
|
||||
android:entryValues="@array/language_codes"
|
||||
@@ -19,28 +22,33 @@
|
||||
android:title="@string/content_language_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/show_age_restricted_content"
|
||||
android:title="@string/show_age_restricted_content_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/show_search_suggestions_key"
|
||||
android:summary="@string/show_search_suggestions_summary"
|
||||
android:title="@string/show_search_suggestions_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/download_thumbnail_key"
|
||||
android:title="@string/download_thumbnail_title"
|
||||
android:summary="@string/download_thumbnail_summary"/>
|
||||
|
||||
<Preference
|
||||
app:iconSpaceReserved="false"
|
||||
android:summary="@string/import_data_summary"
|
||||
android:key="@string/import_data"
|
||||
android:title="@string/import_data_title"/>
|
||||
|
||||
<Preference
|
||||
app:iconSpaceReserved="false"
|
||||
android:title="@string/export_data_title"
|
||||
android:key="@string/export_data"
|
||||
android:summary="@string/export_data_summary"/>
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:key="general_preferences"
|
||||
android:title="@string/settings_category_debug_title">
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/allow_heap_dumping_key"
|
||||
android:title="@string/enable_leak_canary_title"
|
||||
android:summary="@string/enable_leak_canary_summary"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/allow_disposed_exceptions_key"
|
||||
android:title="@string/enable_disposed_exceptions_title"
|
||||
|
||||
@@ -1,21 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:title="@string/settings_category_downloads_title">
|
||||
|
||||
<Preference
|
||||
app:iconSpaceReserved="false"
|
||||
android:dialogTitle="@string/download_path_dialog_title"
|
||||
android:key="@string/download_path_key"
|
||||
android:summary="@string/download_path_summary"
|
||||
android:title="@string/download_path_title"/>
|
||||
|
||||
<Preference
|
||||
app:iconSpaceReserved="false"
|
||||
android:dialogTitle="@string/download_path_audio_dialog_title"
|
||||
android:key="@string/download_path_audio_key"
|
||||
android:summary="@string/download_path_audio_summary"
|
||||
android:title="@string/download_path_audio_title"/>
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/default_file_charset_value"
|
||||
android:entries="@array/settings_filename_charset_name"
|
||||
android:entryValues="@array/settings_filename_charset"
|
||||
@@ -24,12 +28,14 @@
|
||||
android:title="@string/settings_file_charset_title"/>
|
||||
|
||||
<EditTextPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/settings_file_replacement_character_default_value"
|
||||
android:key="@string/settings_file_replacement_character_key"
|
||||
android:summary="@string/settings_file_replacement_character_summary"
|
||||
android:title="@string/settings_file_replacement_character_title"/>
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/downloads_maximum_retry_default"
|
||||
android:entries="@array/downloads_maximum_retry_list"
|
||||
android:entryValues="@array/downloads_maximum_retry_list"
|
||||
@@ -38,6 +44,7 @@
|
||||
android:title="@string/max_retry_msg" />
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/downloads_cross_network"
|
||||
android:summary="@string/pause_downloads_on_mobile_desc"
|
||||
|
||||
@@ -1,32 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:key="general_preferences"
|
||||
android:title="@string/settings_category_history_title">
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/enable_watch_history_key"
|
||||
android:summary="@string/enable_watch_history_summary"
|
||||
android:title="@string/enable_watch_history_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/enable_search_history_key"
|
||||
android:summary="@string/enable_search_history_summary"
|
||||
android:title="@string/enable_search_history_title"/>
|
||||
|
||||
<Preference
|
||||
app:iconSpaceReserved="false"
|
||||
android:key="@string/metadata_cache_wipe_key"
|
||||
android:summary="@string/metadata_cache_wipe_summary"
|
||||
android:title="@string/metadata_cache_wipe_title"/>
|
||||
|
||||
<Preference
|
||||
app:iconSpaceReserved="false"
|
||||
android:key="@string/clear_views_history_key"
|
||||
android:title="@string/clear_views_history_title"
|
||||
android:summary="@string/clear_views_history_summary"/>
|
||||
|
||||
<Preference
|
||||
app:iconSpaceReserved="false"
|
||||
android:key="@string/clear_search_history_key"
|
||||
android:title="@string/clear_search_history_title"
|
||||
android:summary="@string/clear_search_history_summary"/>
|
||||
|
||||
@@ -1,41 +1,49 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:key="general_preferences"
|
||||
android:title="@string/settings">
|
||||
|
||||
<PreferenceScreen
|
||||
app:iconSpaceReserved="false"
|
||||
android:fragment="org.schabi.newpipe.settings.VideoAudioSettingsFragment"
|
||||
android:icon="?attr/audio"
|
||||
android:title="@string/settings_category_video_audio_title"/>
|
||||
|
||||
<PreferenceScreen
|
||||
app:iconSpaceReserved="false"
|
||||
android:fragment="org.schabi.newpipe.settings.DownloadSettingsFragment"
|
||||
android:icon="?attr/download"
|
||||
android:title="@string/settings_category_downloads_title"/>
|
||||
|
||||
<PreferenceScreen
|
||||
app:iconSpaceReserved="false"
|
||||
android:fragment="org.schabi.newpipe.settings.AppearanceSettingsFragment"
|
||||
android:icon="?attr/palette"
|
||||
android:title="@string/settings_category_appearance_title"/>
|
||||
|
||||
<PreferenceScreen
|
||||
app:iconSpaceReserved="false"
|
||||
android:fragment="org.schabi.newpipe.settings.HistorySettingsFragment"
|
||||
android:icon="?attr/history"
|
||||
android:title="@string/settings_category_history_title"/>
|
||||
|
||||
<PreferenceScreen
|
||||
app:iconSpaceReserved="false"
|
||||
android:fragment="org.schabi.newpipe.settings.ContentSettingsFragment"
|
||||
android:icon="?attr/language"
|
||||
android:title="@string/content"/>
|
||||
|
||||
<PreferenceScreen
|
||||
app:iconSpaceReserved="false"
|
||||
android:fragment="org.schabi.newpipe.settings.UpdateSettingsFragment"
|
||||
android:icon="?attr/ic_settings_update"
|
||||
android:title="@string/settings_category_updates_title"
|
||||
android:key="update_pref_screen_key"/>
|
||||
|
||||
<PreferenceScreen
|
||||
app:iconSpaceReserved="false"
|
||||
android:fragment="org.schabi.newpipe.settings.DebugSettingsFragment"
|
||||
android:icon="?attr/bug"
|
||||
android:title="@string/settings_category_debug_title"
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:key="general_preferences"
|
||||
android:title="@string/settings_category_updates_title">
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/update_app_key"
|
||||
android:title="@string/updates_setting_title"
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:title="@string/settings_category_video_audio_title">
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/default_resolution_value"
|
||||
android:entries="@array/resolution_list_description"
|
||||
android:entryValues="@array/resolution_list_values"
|
||||
@@ -12,6 +14,7 @@
|
||||
android:title="@string/default_resolution_title"/>
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/default_popup_resolution_value"
|
||||
android:entries="@array/resolution_list_description"
|
||||
android:entryValues="@array/resolution_list_values"
|
||||
@@ -20,6 +23,7 @@
|
||||
android:title="@string/default_popup_resolution_title"/>
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/limit_mobile_data_usage_value"
|
||||
android:entries="@array/limit_data_usage_description_list"
|
||||
android:entryValues="@array/limit_data_usage_values_list"
|
||||
@@ -28,12 +32,14 @@
|
||||
android:title="@string/limit_mobile_data_usage_title" />
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/show_higher_resolutions_key"
|
||||
android:summary="@string/show_higher_resolutions_summary"
|
||||
android:title="@string/show_higher_resolutions_title"/>
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/default_video_format_value"
|
||||
android:entries="@array/video_format_description_list"
|
||||
android:entryValues="@array/video_format_values_list"
|
||||
@@ -42,6 +48,7 @@
|
||||
android:title="@string/default_video_format_title"/>
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/default_audio_format_value"
|
||||
android:entries="@array/audio_format_description_list"
|
||||
android:entryValues="@array/audio_format_values_list"
|
||||
@@ -50,21 +57,25 @@
|
||||
android:title="@string/default_audio_format_title" />
|
||||
|
||||
<PreferenceCategory
|
||||
app:iconSpaceReserved="false"
|
||||
android:layout="@layout/settings_category_header_layout"
|
||||
android:title="@string/settings_category_player_title">
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/use_external_video_player_key"
|
||||
android:summary="@string/use_external_video_player_summary"
|
||||
android:title="@string/use_external_video_player_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/use_external_audio_player_key"
|
||||
android:title="@string/use_external_audio_player_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/show_play_with_kodi_key"
|
||||
android:summary="@string/show_play_with_kodi_summary"
|
||||
@@ -77,6 +88,7 @@
|
||||
android:title="@string/settings_category_player_behavior_title">
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/preferred_open_action_default"
|
||||
android:entries="@array/preferred_open_action_description_list"
|
||||
android:entryValues="@array/preferred_open_action_values_list"
|
||||
@@ -85,6 +97,7 @@
|
||||
android:title="@string/preferred_open_action_settings_title"/>
|
||||
|
||||
<ListPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="@string/minimize_on_exit_value"
|
||||
android:entries="@array/minimize_on_exit_action_description"
|
||||
android:entryValues="@array/minimize_on_exit_action_key"
|
||||
@@ -93,36 +106,42 @@
|
||||
android:title="@string/minimize_on_exit_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/auto_queue_key"
|
||||
android:summary="@string/auto_queue_summary"
|
||||
android:title="@string/auto_queue_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/resume_on_audio_focus_gain_key"
|
||||
android:summary="@string/resume_on_audio_focus_gain_summary"
|
||||
android:title="@string/resume_on_audio_focus_gain_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/volume_gesture_control_key"
|
||||
android:summary="@string/volume_gesture_control_summary"
|
||||
android:title="@string/volume_gesture_control_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/brightness_gesture_control_key"
|
||||
android:summary="@string/brightness_gesture_control_summary"
|
||||
android:title="@string/brightness_gesture_control_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="true"
|
||||
android:key="@string/popup_remember_size_pos_key"
|
||||
android:summary="@string/popup_remember_size_pos_summary"
|
||||
android:title="@string/popup_remember_size_pos_title"/>
|
||||
|
||||
<SwitchPreference
|
||||
app:iconSpaceReserved="false"
|
||||
android:defaultValue="false"
|
||||
android:key="@string/use_inexact_seek_key"
|
||||
android:summary="@string/use_inexact_seek_summary"
|
||||
|
||||
Reference in New Issue
Block a user