1
0
mirror of https://github.com/TeamNewPipe/NewPipe synced 2026-01-15 05:58:02 +00:00

Compare commits

..

35 Commits

Author SHA1 Message Date
Christian Schabesberger
f451f1f65d resolve conflict 2018-01-20 18:06:34 +01:00
Christian Schabesberger
4d12e71fba move on to v0.11.5 2018-01-20 16:00:39 +01:00
Christian Schabesberger
66fde7a212 fix loop in channel 2018-01-20 15:59:34 +01:00
Christian Schabesberger
86eccf219d refactore some more lambda functions 2018-01-20 15:24:45 +01:00
Christian Schabesberger
677865f347 player popup menu icons for white theme 2018-01-20 14:46:10 +01:00
Christian Schabesberger
eb4b3810e9 refactor ExtractionHelper using lambda expression 2018-01-20 13:57:31 +01:00
Christian Schabesberger
5f26501ddf fix triangle play button when returning to app 2018-01-20 13:39:06 +01:00
Emanuele Petriglia
b33a72f864 Translated using Weblate (Italian)
Currently translated at 100.0% (249 of 249 strings)
2018-01-19 20:07:50 +01:00
Freddy Morán Jr
675f43b968 Translated using Weblate (Spanish)
Currently translated at 100.0% (249 of 249 strings)
2018-01-19 01:24:52 +01:00
M2ck
9f117a2e59 Translated using Weblate (French)
Currently translated at 100.0% (249 of 249 strings)
2018-01-19 00:33:40 +01:00
Yann Hodiesne
a0844229a3 Translated using Weblate (French)
Currently translated at 97.9% (244 of 249 strings)
2018-01-19 00:23:06 +01:00
M2ck
114fcc144c Translated using Weblate (French)
Currently translated at 97.9% (244 of 249 strings)
2018-01-19 00:19:11 +01:00
Weblate
43372ff648 Merge remote-tracking branch 'origin/dev' into dev 2018-01-19 00:17:53 +01:00
ScratchBuild
b8ebbc5404 Translated using Weblate (Japanese)
Currently translated at 79.5% (194 of 244 strings)
2018-01-19 00:17:51 +01:00
M2ck
28309f82f3 Translated using Weblate (French)
Currently translated at 100.0% (244 of 244 strings)
2018-01-19 00:17:45 +01:00
Christian Schabesberger
c70fa391b6 fix conflict with weblate 2018-01-18 20:43:30 +01:00
nautilusx
caab589dce Translated using Weblate (German)
Currently translated at 99.5% (243 of 244 strings)
2018-01-18 08:18:08 +01:00
maruyuki
20370054e7 Translated using Weblate (Japanese)
Currently translated at 56.9% (139 of 244 strings)
2018-01-18 08:18:04 +01:00
f1882cb1e1 Translated using Weblate (German)
Currently translated at 97.5% (238 of 244 strings)
2018-01-12 19:37:15 +01:00
Nick Undnick
2ed149852d Translated using Weblate (German)
Currently translated at 97.5% (238 of 244 strings)
2018-01-10 18:22:38 +01:00
Coffeemaker
ac7226a0df Translated using Weblate (German)
Currently translated at 97.5% (238 of 244 strings)
2018-01-10 18:22:00 +01:00
Coffeemaker
5705650ca8 Translated using Weblate (Telugu)
Currently translated at 53.6% (131 of 244 strings)
2018-01-09 17:53:16 +01:00
Coffeemaker
60855ca7c5 Translated using Weblate (Tamil)
Currently translated at 5.7% (14 of 244 strings)
2018-01-09 17:53:16 +01:00
Coffeemaker
b8d8d181f3 Translated using Weblate (Slovak)
Currently translated at 70.0% (171 of 244 strings)
2018-01-09 17:53:16 +01:00
Thomas Lavend'Homme
6309160fc6 Translated using Weblate (French)
Currently translated at 100.0% (244 of 244 strings)
2018-01-09 17:53:14 +01:00
ButterflyOfFire
fc0e6ed273 Translated using Weblate (Arabic)
Currently translated at 100.0% (244 of 244 strings)
2018-01-09 17:53:04 +01:00
wb9688
f5f8371865 Remove setting 2017-11-20 19:31:33 +01:00
wb9688
1191455d37 Show selected service 2017-11-20 16:04:18 +01:00
wb9688
011e151c91 Merge branch 'dev' into multiple-services 2017-11-19 17:41:57 +01:00
wb9688
54aa40eac1 Add simple drawer for selecting service 2017-11-19 17:21:46 +01:00
wb9688
621a1909ec Merge remote-tracking branch 'origin/dev' into multiple-services 2017-11-11 13:18:26 +01:00
wb9688
25db3c2940 Update NewPipeExtractor 2017-09-16 10:25:54 +02:00
wb9688
442290d7f0 Hide spinner 2017-09-14 11:43:30 +02:00
wb9688
a6eb871f5e Change layout for audio-only streams 2017-09-14 10:49:39 +02:00
wb9688
b500c3f526 Add service setting 2017-09-14 09:31:01 +02:00
36 changed files with 488 additions and 272 deletions

View File

@@ -8,8 +8,8 @@ android {
applicationId "org.schabi.newpipe"
minSdkVersion 15
targetSdkVersion 27
versionCode 45
versionName "0.11.4"
versionCode 46
versionName "0.11.5"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
@@ -55,7 +55,7 @@ dependencies {
exclude module: 'support-annotations'
}
implementation 'com.github.TeamNewPipe:NewPipeExtractor:9de63f8c0a170a066'
implementation 'com.github.TeamNewPipe:NewPipeExtractor:1c97da8b51b3610'
testImplementation 'junit:junit:4.12'
testImplementation 'org.mockito:mockito-core:1.10.19'

View File

@@ -28,8 +28,13 @@ import android.os.Looper;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
@@ -45,6 +50,7 @@ import org.schabi.newpipe.database.history.dao.WatchHistoryDAO;
import org.schabi.newpipe.database.history.model.HistoryEntry;
import org.schabi.newpipe.database.history.model.SearchHistoryEntry;
import org.schabi.newpipe.database.history.model.WatchHistoryEntry;
import org.schabi.newpipe.extractor.NewPipe;
import org.schabi.newpipe.extractor.StreamingService;
import org.schabi.newpipe.extractor.stream.AudioStream;
import org.schabi.newpipe.extractor.stream.StreamInfo;
@@ -69,6 +75,7 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
private static final String TAG = "MainActivity";
public static final boolean DEBUG = false;
private SharedPreferences sharedPreferences;
private ActionBarDrawerToggle toggle = null;
/*//////////////////////////////////////////////////////////////////////////
// Activity's LifeCycle
@@ -76,7 +83,8 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
@Override
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 + "]");
ThemeHelper.setTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
@@ -85,8 +93,59 @@ public class MainActivity extends AppCompatActivity implements HistoryListener {
initFragments();
}
Toolbar toolbar = findViewById(R.id.toolbar);
final Toolbar toolbar = findViewById(R.id.toolbar);
final DrawerLayout drawer = findViewById(R.id.drawer_layout);
final NavigationView drawerItems = findViewById(R.id.navigation);
setSupportActionBar(toolbar);
drawerItems.getMenu().getItem(NewPipe.getIdOfService(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("service", "YouTube"))).setChecked(true);
if (!BuildConfig.BUILD_TYPE.equals("release")) {
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close);
toggle.syncState();
drawer.addDrawerListener(toggle);
drawerItems.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
drawerItems.getMenu().getItem(NewPipe.getIdOfService(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("service", "YouTube"))).setChecked(false);
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit();
editor.putString("service", item.getTitle().toString());
editor.apply();
drawer.closeDrawers();
drawerItems.getMenu().getItem(NewPipe.getIdOfService(PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getString("service", "YouTube"))).setChecked(true);
return true;
}
});
} else {
drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
} else {
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
if (toggle != null) {
toggle.syncState();
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawer.openDrawer(GravityCompat.START);
}
});
}
}
}
});
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
initHistory();

View File

@@ -138,7 +138,7 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_search:
NavigationHelper.openSearchFragment(getFragmentManager(), 0, "");
NavigationHelper.openSearchFragment(getFragmentManager(), NewPipe.getIdOfService(PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("service", "YouTube")), "");
return true;
}
return super.onOptionsItemSelected(item);

View File

@@ -342,7 +342,11 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
}
break;
case R.id.detail_thumbnail_root_layout:
openVideoPlayer();
if (currentInfo.video_streams.isEmpty() && currentInfo.video_only_streams.isEmpty()) {
openBackgroundPlayer(false);
} else {
openVideoPlayer();
}
break;
case R.id.detail_title_root_layout:
toggleTitleAndDescription();
@@ -1158,6 +1162,13 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
showSnackBarError(info.getErrors(), UserAction.REQUESTED_STREAM, NewPipe.getNameOfService(info.getServiceId()), info.getUrl(), 0);
}
if (info.video_streams.isEmpty() && info.video_only_streams.isEmpty()) {
detailControlsBackground.setVisibility(View.GONE);
detailControlsPopup.setVisibility(View.GONE);
spinnerToolbar.setVisibility(View.GONE);
thumbnailPlayButton.setImageResource(R.drawable.ic_headset_white_24dp);
}
if (autoPlayEnabled) {
openVideoPlayer();
// Only auto play in the first open
@@ -1201,4 +1212,4 @@ public class VideoDetailFragment extends BaseStateFragment<StreamInfo> implement
showError(getString(R.string.blocked_by_gema), false, R.drawable.gruese_die_gema);
}
}
}

View File

@@ -124,20 +124,12 @@ public abstract class BaseListInfoFragment<I extends ListInfo> extends BaseListF
currentWorker = loadResult(forceLoad)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<I>() {
@Override
public void accept(@NonNull I result) throws Exception {
isLoading.set(false);
currentInfo = result;
currentNextItemsUrl = result.next_streams_url;
handleResult(result);
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
onError(throwable);
}
});
.subscribe((@NonNull I result) -> {
isLoading.set(false);
currentInfo = result;
currentNextItemsUrl = result.next_streams_url;
handleResult(result);
}, (@NonNull Throwable throwable) -> onError(throwable));
}
/**
@@ -153,18 +145,12 @@ public abstract class BaseListInfoFragment<I extends ListInfo> extends BaseListF
currentWorker = loadMoreItemsLogic()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ListExtractor.NextItemsResult>() {
@Override
public void accept(@io.reactivex.annotations.NonNull ListExtractor.NextItemsResult nextItemsResult) throws Exception {
isLoading.set(false);
handleNextItems(nextItemsResult);
}
}, new Consumer<Throwable>() {
@Override
public void accept(@io.reactivex.annotations.NonNull Throwable throwable) throws Exception {
isLoading.set(false);
onError(throwable);
}
.subscribe((@io.reactivex.annotations.NonNull ListExtractor.NextItemsResult nextItemsResult) -> {
isLoading.set(false);
handleNextItems(nextItemsResult);
}, (@io.reactivex.annotations.NonNull Throwable throwable) -> {
isLoading.set(false);
onError(throwable);
});
}

View File

@@ -25,6 +25,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Color;
import android.media.AudioManager;
import android.os.Build;
@@ -37,7 +38,6 @@ import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
@@ -62,6 +62,7 @@ import org.schabi.newpipe.util.AnimationUtils;
import org.schabi.newpipe.util.ListHelper;
import org.schabi.newpipe.util.NavigationHelper;
import org.schabi.newpipe.util.PermissionHelper;
import org.schabi.newpipe.util.PopupMenuIconHacker;
import org.schabi.newpipe.util.ThemeHelper;
import java.lang.reflect.Field;
@@ -326,7 +327,7 @@ public final class MainVideoPlayer extends Activity {
this.playNextButton = rootView.findViewById(R.id.playNextButton);
this.moreOptionsButton = rootView.findViewById(R.id.moreOptionsButton);
this.moreOptionsPopupMenu = new PopupMenu(context, moreOptionsButton);
this.moreOptionsPopupMenu.getMenuInflater().inflate(R.menu.menu_videooptions, moreOptionsPopupMenu.getMenu());
buildMoreOptionsMenu();
titleTextView.setSelected(true);
channelTextView.setSelected(true);
@@ -379,7 +380,7 @@ public final class MainVideoPlayer extends Activity {
titleTextView.setText(getVideoTitle());
channelTextView.setText(getUploaderName());
playPauseButton.setImageResource(R.drawable.ic_pause_white);
//playPauseButton.setImageResource(R.drawable.ic_pause_white);
}
@Override
@@ -499,25 +500,7 @@ public final class MainVideoPlayer extends Activity {
private void onMoreOptionsClicked() {
if (DEBUG) Log.d(TAG, "onMoreOptionsClicked() called");
buildMoreOptionsMenu();
try {
Field[] fields = moreOptionsPopupMenu.getClass().getDeclaredFields();
for (Field field : fields) {
if ("mPopup".equals(field.getName())) {
field.setAccessible(true);
Object menuPopupHelper = field.get(moreOptionsPopupMenu);
Class<?> classPopupHelper = Class.forName(menuPopupHelper
.getClass().getName());
Method setForceIcons = classPopupHelper.getMethod(
"setForceShowIcon", boolean.class);
setForceIcons.invoke(menuPopupHelper, true);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
moreOptionsPopupMenu.show();
isSomePopupMenuVisible = true;
showControls(300);
@@ -659,7 +642,9 @@ public final class MainVideoPlayer extends Activity {
}
private void buildMoreOptionsMenu() {
if (moreOptionsPopupMenu == null) return;
this.moreOptionsPopupMenu.getMenuInflater().inflate(R.menu.menu_videooptions,
moreOptionsPopupMenu.getMenu());
moreOptionsPopupMenu.setOnMenuItemClickListener(menuItem -> {
switch (menuItem.getItemId()) {
case R.id.toggleOrientation:
@@ -674,6 +659,22 @@ public final class MainVideoPlayer extends Activity {
}
return false;
});
try {
PopupMenuIconHacker.setShowPopupIcon(moreOptionsPopupMenu);
} catch (Exception e) {
e.printStackTrace();
}
// fix icon theme
if(ThemeHelper.isLightThemeSelected(MainVideoPlayer.this)) {
moreOptionsPopupMenu.getMenu()
.findItem(R.id.toggleOrientation)
.setIcon(R.drawable.ic_screen_rotation_black_24dp);
moreOptionsPopupMenu.getMenu()
.findItem(R.id.switchPopup)
.setIcon(R.drawable.ic_fullscreen_exit_black_24dp);
}
}
private void buildQueue() {

View File

@@ -57,105 +57,96 @@ public final class ExtractorHelper {
}
}
public static Single<SearchResult> searchFor(final int serviceId, final String query, final int pageNumber, final String contentCountry, final SearchEngine.Filter filter) {
public static Single<SearchResult> searchFor(final int serviceId,
final String query,
final int pageNumber,
final String contentCountry,
final SearchEngine.Filter filter) {
checkServiceId(serviceId);
return Single.fromCallable(new Callable<SearchResult>() {
@Override
public SearchResult call() throws Exception {
return SearchResult.getSearchResult(NewPipe.getService(serviceId).getSearchEngine(),
query, pageNumber, contentCountry, filter);
}
});
return Single.fromCallable(() ->
SearchResult.getSearchResult(NewPipe.getService(serviceId).getSearchEngine(),
query, pageNumber, contentCountry, filter)
);
}
public static Single<NextItemsResult> getMoreSearchItems(final int serviceId, final String query, final int nextPageNumber, final String searchLanguage, final SearchEngine.Filter filter) {
public static Single<NextItemsResult> getMoreSearchItems(final int serviceId,
final String query,
final int nextPageNumber,
final String searchLanguage,
final SearchEngine.Filter filter) {
checkServiceId(serviceId);
return searchFor(serviceId, query, nextPageNumber, searchLanguage, filter)
.map(new Function<SearchResult, NextItemsResult>() {
@Override
public NextItemsResult apply(@NonNull SearchResult searchResult) throws Exception {
return new NextItemsResult(searchResult.resultList, nextPageNumber + "", searchResult.errors);
}
});
.map((@NonNull SearchResult searchResult) ->
new NextItemsResult(searchResult.resultList,
nextPageNumber + "",
searchResult.errors));
}
public static Single<List<String>> suggestionsFor(final int serviceId, final String query, final String contentCountry) {
public static Single<List<String>> suggestionsFor(final int serviceId,
final String query,
final String contentCountry) {
checkServiceId(serviceId);
return Single.fromCallable(new Callable<List<String>>() {
@Override
public List<String> call() throws Exception {
return NewPipe.getService(serviceId).getSuggestionExtractor().suggestionList(query, contentCountry);
}
});
return Single.fromCallable(() ->
NewPipe.getService(serviceId)
.getSuggestionExtractor()
.suggestionList(query, contentCountry));
}
public static Single<StreamInfo> getStreamInfo(final int serviceId, final String url, boolean forceLoad) {
public static Single<StreamInfo> getStreamInfo(final int serviceId,
final String url,
boolean forceLoad) {
checkServiceId(serviceId);
return checkCache(forceLoad, serviceId, url, Single.fromCallable(new Callable<StreamInfo>() {
@Override
public StreamInfo call() throws Exception {
return StreamInfo.getInfo(NewPipe.getService(serviceId), url);
}
}));
return checkCache(forceLoad, serviceId, url, Single.fromCallable(() ->
StreamInfo.getInfo(NewPipe.getService(serviceId), url)));
}
public static Single<ChannelInfo> getChannelInfo(final int serviceId, final String url, boolean forceLoad) {
public static Single<ChannelInfo> getChannelInfo(final int serviceId,
final String url,
boolean forceLoad) {
checkServiceId(serviceId);
return checkCache(forceLoad, serviceId, url, Single.fromCallable(new Callable<ChannelInfo>() {
@Override
public ChannelInfo call() throws Exception {
return ChannelInfo.getInfo(NewPipe.getService(serviceId), url);
}
}));
return checkCache(forceLoad, serviceId, url, Single.fromCallable(() ->
ChannelInfo.getInfo(NewPipe.getService(serviceId), url)));
}
public static Single<NextItemsResult> getMoreChannelItems(final int serviceId, final String url, final String nextStreamsUrl) {
public static Single<NextItemsResult> getMoreChannelItems(final int serviceId,
final String url,
final String nextStreamsUrl) {
checkServiceId(serviceId);
return Single.fromCallable(new Callable<NextItemsResult>() {
@Override
public NextItemsResult call() throws Exception {
return ChannelInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl);
}
});
return Single.fromCallable(() ->
ChannelInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl));
}
public static Single<PlaylistInfo> getPlaylistInfo(final int serviceId, final String url, boolean forceLoad) {
public static Single<PlaylistInfo> getPlaylistInfo(final int serviceId,
final String url,
boolean forceLoad) {
checkServiceId(serviceId);
return checkCache(forceLoad, serviceId, url, Single.fromCallable(new Callable<PlaylistInfo>() {
@Override
public PlaylistInfo call() throws Exception {
return PlaylistInfo.getInfo(NewPipe.getService(serviceId), url);
}
}));
return checkCache(forceLoad, serviceId, url, Single.fromCallable(() ->
PlaylistInfo.getInfo(NewPipe.getService(serviceId), url)));
}
public static Single<NextItemsResult> getMorePlaylistItems(final int serviceId, final String url, final String nextStreamsUrl) {
public static Single<NextItemsResult> getMorePlaylistItems(final int serviceId,
final String url,
final String nextStreamsUrl) {
checkServiceId(serviceId);
return Single.fromCallable(new Callable<NextItemsResult>() {
@Override
public NextItemsResult call() throws Exception {
return PlaylistInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl);
}
});
return Single.fromCallable(() ->
PlaylistInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl));
}
public static Single<KioskInfo> getKioskInfo(final int serviceId, final String url, final String contentCountry, boolean forceLoad) {
return checkCache(forceLoad, serviceId, url, Single.fromCallable(new Callable<KioskInfo>() {
@Override
public KioskInfo call() throws Exception {
Log.e("---------", contentCountry);
return KioskInfo.getInfo(NewPipe.getService(serviceId), url, contentCountry);
}
}));
public static Single<KioskInfo> getKioskInfo(final int serviceId,
final String url,
final String contentCountry,
boolean forceLoad) {
return checkCache(forceLoad, serviceId, url, Single.fromCallable(() ->
KioskInfo.getInfo(NewPipe.getService(serviceId), url, contentCountry)));
}
public static Single<NextItemsResult> getMoreKioskItems(final int serviceId, final String url, final String nextStreamsUrl, final String contentCountry) {
return Single.fromCallable(new Callable<NextItemsResult>() {
@Override
public NextItemsResult call() throws Exception {
return KioskInfo.getMoreItems(NewPipe.getService(serviceId), url, nextStreamsUrl, contentCountry);
}
});
public static Single<NextItemsResult> getMoreKioskItems(final int serviceId,
final String url,
final String nextStreamsUrl,
final String contentCountry) {
return Single.fromCallable(() ->
KioskInfo.getMoreItems(NewPipe.getService(serviceId),
url, nextStreamsUrl, contentCountry));
}
/*//////////////////////////////////////////////////////////////////////////
@@ -163,24 +154,24 @@ public final class ExtractorHelper {
//////////////////////////////////////////////////////////////////////////*/
/**
* Check if we can load it from the cache (forceLoad parameter), if we can't, load from the network (Single loadFromNetwork)
* Check if we can load it from the cache (forceLoad parameter), if we can't,
* load from the network (Single loadFromNetwork)
* and put the results in the cache.
*/
private static <I extends Info> Single<I> checkCache(boolean forceLoad, int serviceId, String url, Single<I> loadFromNetwork) {
private static <I extends Info> Single<I> checkCache(boolean forceLoad,
int serviceId,
String url,
Single<I> loadFromNetwork) {
checkServiceId(serviceId);
loadFromNetwork = loadFromNetwork.doOnSuccess(new Consumer<I>() {
@Override
public void accept(@NonNull I i) throws Exception {
cache.putInfo(i);
}
});
loadFromNetwork = loadFromNetwork.doOnSuccess((@NonNull I i) -> cache.putInfo(i));
Single<I> load;
if (forceLoad) {
cache.removeInfo(serviceId, url);
load = loadFromNetwork;
} else {
load = Maybe.concat(ExtractorHelper.<I>loadFromCache(serviceId, url), loadFromNetwork.toMaybe())
load = Maybe.concat(ExtractorHelper.<I>loadFromCache(serviceId, url),
loadFromNetwork.toMaybe())
.firstElement() //Take the first valid
.toSingle();
}
@@ -193,9 +184,7 @@ public final class ExtractorHelper {
*/
public static <I extends Info> Maybe<I> loadFromCache(final int serviceId, final String url) {
checkServiceId(serviceId);
return Maybe.defer(new Callable<MaybeSource<? extends I>>() {
@Override
public MaybeSource<? extends I> call() throws Exception {
return Maybe.defer(() -> {
//noinspection unchecked
I info = (I) cache.getFromKey(serviceId, url);
if (MainActivity.DEBUG) Log.d(TAG, "loadFromCache() called, info > " + info);
@@ -206,8 +195,7 @@ public final class ExtractorHelper {
}
return Maybe.empty();
}
});
});
}
/**
@@ -215,7 +203,8 @@ public final class ExtractorHelper {
*
* @see Class#isAssignableFrom(Class)
*/
public static boolean hasAssignableCauseThrowable(Throwable throwable, Class<?>... causesToCheck) {
public static boolean hasAssignableCauseThrowable(Throwable throwable,
Class<?>... causesToCheck) {
// Check if getCause is not the same as cause (the getCause is already the root),
// as it will cause a infinite loop if it is
Throwable cause, getCause = throwable;
@@ -270,7 +259,9 @@ public final class ExtractorHelper {
* Check if throwable have Interrupted* exception as one of its causes.
*/
public static boolean isInterruptedCaused(Throwable throwable) {
return ExtractorHelper.hasExactCauseThrowable(throwable, InterruptedIOException.class, InterruptedException.class);
return ExtractorHelper.hasExactCauseThrowable(throwable,
InterruptedIOException.class,
InterruptedException.class);
}
public static String toUpperCase(String value) {

View File

@@ -1,4 +1,4 @@
/*
/**
* Copyright 2017 Mauricio Colli <mauriciocolli@outlook.com>
* InfoCache.java is part of NewPipe
*

View File

@@ -0,0 +1,48 @@
package org.schabi.newpipe.util;
import android.widget.PopupMenu;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* Created by Christian Schabesberger on 20.01.18.
* Copyright 2018 Christian Schabesberger <chris.schabesberger@mailbox.org>
* PopupMenuIconHacker.java is part of NewPipe
*
* License: GPL-3.0+
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
public class PopupMenuIconHacker {
public static void setShowPopupIcon(PopupMenu menu) throws Exception {
try {
Field[] fields = menu.getClass().getDeclaredFields();
for (Field field : fields) {
if ("mPopup".equals(field.getName())) {
field.setAccessible(true);
Object menuPopupHelper = field.get(menu);
Class<?> classPopupHelper = Class.forName(menuPopupHelper
.getClass().getName());
Method setForceIcons = classPopupHelper.getMethod(
"setForceShowIcon", boolean.class);
setForceIcons.invoke(menuPopupHelper, true);
break;
}
}
} catch (Exception e) {
throw new Exception("Could not make Popup menu show Icons", e);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 916 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,18 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<merge
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="org.schabi.newpipe.MainActivity">
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/fragment_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"/>
android:orientation="vertical"
tools:context="org.schabi.newpipe.MainActivity">
<FrameLayout
android:id="@+id/fragment_holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize" />
<include layout="@layout/toolbar_layout"/>
<include layout="@layout/toolbar_layout" />
</FrameLayout>
</merge>
<android.support.design.widget.NavigationView
android:id="@+id/navigation"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/drawer_items" />
</android.support.v4.widget.DrawerLayout>

View File

@@ -244,7 +244,7 @@
android:clickable="true"
android:focusable="true"
android:scaleType="fitXY"
android:src="?attr/options"
android:src="@drawable/ic_more_vert_white_24dp"
tools:ignore="ContentDescription,RtlHardcoded"/>
</RelativeLayout>

View File

@@ -273,7 +273,7 @@
android:paddingBottom="6dp"
android:paddingTop="6dp"
android:text="@string/controls_background_title"
android:textSize="12sp"/>
android:textSize="12sp" />
</RelativeLayout>
<!--UPLOADER-->

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="@string/youtube" />
<item android:title="@string/soundcloud" />
</menu>

View File

@@ -4,17 +4,18 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:icon="@drawable/ic_screen_rotation_white"
android:id="@+id/toggleOrientation"
android:icon="@drawable/ic_screen_rotation_white"
android:title="@string/toggle_orientation"
app:showAsAction="always|withText" />
<item
android:icon="@drawable/ic_fullscreen_exit_white"
android:id="@+id/switchPopup"
android:icon="@drawable/ic_fullscreen_exit_white"
android:title="@string/switch_to_popup"
app:showAsAction="always|withText" />
<item android:icon="?audio"
<item
android:id="@+id/switchBackground"
android:icon="?audio"
android:title="@string/switch_to_background"
app:showAsAction="always|withText" />
</menu>

View File

@@ -22,20 +22,20 @@
<string name="err_dir_create">"لا يمكن إنشاء مجلد للتنزيلات في '%1$s'"</string>
<string name="info_dir_created">"تم إنشاء مجلد تنزيلات في '%1$s'"</string>
<string name="install">تثبيت</string>
<string name="kore_not_found">تطبيق Kore غير موجود. هل تريد تثبيته؟</string>
<string name="kore_not_found">تطبيق Kore غير موجود. هل تريد تثبيته ؟</string>
<string name="light_theme_title">مضيء</string>
<string name="list_thumbnail_view_description">صور معاينة الفيديو</string>
<string name="m4a_description">m4a — جودة أفضل</string>
<string name="m4a_description">M4A — جودة أفضل</string>
<string name="network_error">خطأ في الشبكة</string>
<string name="next_video_title">الفيديو التالي</string>
<string name="no_player_found">لا يوجد مشغل فيديو. هل تريد تثبيت VLC ؟</string>
<string name="open_in_browser">فتح في المتصفح</string>
<string name="open_in_browser">إفتح في متصفح</string>
<string name="play_audio">الصوت</string>
<string name="play_btn_text">تشغيل</string>
<string name="play_with_kodi_title">تشغيل بواسطة Kodi</string>
<string name="screen_rotation">التدوير</string>
<string name="search">بحث</string>
<string name="search_language_title">لغة المحتوى المفضل</string>
<string name="search_language_title">اللغة الإفتراضية للمحتوى</string>
<string name="settings">الإعدادات</string>
<string name="settings_category_appearance_title">المظهر</string>
<string name="settings_category_other_title">أخرئ</string>
@@ -43,23 +43,23 @@
<string name="share">مشاركة</string>
<string name="share_dialog_title">مشاركة بواسطة</string>
<string name="show_next_and_similar_title">عرض التالي والفيديوهات المشابهة</string>
<string name="show_play_with_kodi_summary">عرض خيار لتشغيل الفيديو بواسطة Kodi Media Center.</string>
<string name="show_play_with_kodi_summary">عرض خيار لتشغيل الفيديو بواسطة Kodi Media Center</string>
<string name="show_play_with_kodi_title">عرض خيار التشغيل بواسطة Kodi</string>
<string name="theme_title">السمة</string>
<string name="upload_date_text">تم نشرها في %1$s</string>
<string name="upload_date_text">نُشِرت في %1$s</string>
<string name="url_not_supported_toast">الرابط غير مدعوم</string>
<string name="use_external_audio_player_title">استخدام مشغل صوت خارجي</string>
<string name="use_external_video_player_title">استخدام مشغل فيديو خارجي</string>
<string name="use_tor_summary">(إختبارية) إجراء التنزيلات من خلال استخدام بروكسي Tor لزيادة الخصوصية ( تشغيل الفيديو المباشر غير مدعوم حتى الأن ).</string>
<string name="use_tor_title">استخدام Tor</string>
<string name="view_count_text">%1$s المشاهدات</string>
<string name="view_count_text">%1$s مشاهدات</string>
<string name="webm_description">WebM—صيغة حرة</string>
<string name="blocked_by_gema">تم حجبه بواسطة GEMA</string>
<string name="content_not_available">المحتوى غير متاح.</string>
<string name="content_not_available">المحتوى غير متاح</string>
<string name="could_not_load_thumbnails">لم يتمكن من تحميل كل صور المعاينة</string>
<string name="general_error">خطأ</string>
<string name="parsing_error">لا يمكن تحليل الموقع.</string>
<string name="youtube_signature_decryption_error">لا يمكن فك تشفير توقيع رابط الفيديو.</string>
<string name="parsing_error">تعذرت عملية تحليل الموقع</string>
<string name="youtube_signature_decryption_error">تعذر فك تشفير توقيع رابط الفيديو</string>
<string name="main_bg_subtitle">انقر على البحث للبدء</string>
<string name="subscribe_button_title">إشتراك</string>
<string name="subscribed_button_title">مشترك</string>
@@ -84,7 +84,7 @@
<string name="tab_about">عن التطبيق</string>
<string name="title_activity_history">التأريخ</string>
<string name="action_history">التأريخ</string>
<string name="open_in_popup_mode">فتح في النافذة المنبثقه</string>
<string name="open_in_popup_mode">إفتح في نافذة منبثقه</string>
<string name="use_external_video_player_summary">عند تمكين هذا الخيار لن يكون هنالك صوت في بعض خيارات الجودة</string>
<string name="popup_mode_share_menu_title">وضع النافذة NewPipe المنبثقة</string>
<string name="channel_unsubscribed">تم إلغاء اشتراك القناة</string>
@@ -154,6 +154,7 @@
<string name="error_snackbar_action">تقرير</string>
<string name="what_device_headline">معلومات:</string>
<string name="what_happened_headline">ماذا حدث:</string>
<string name="info_labels">What:\\nRequest:\\nContent Lang:\\nService:\\nGMT Time:\\nPackage:\\nVersion:\\nOS version:\\nGlob. IP range:</string>
<string name="your_comment">تعليقك (باللغة الإنجليزية):</string>
<string name="error_details_headline">تفاصيل:</string>
@@ -291,4 +292,4 @@
<string name="enqueue_on_background">إدراج بقائمة الانتظار على خلفية</string>
<string name="enqueue_on_popup">إدراج بقائمة الانتظار على المنبثقة</string>
<string name="start_here_on_background">ابدأ هنا على خلفية المصدر</string>
</resources>
</resources>

View File

@@ -145,31 +145,30 @@
<string name="disabled">Deaktiviert</string>
<string name="use_old_player_title">Benutze den alten Player</string>
<string name="open_in_popup_mode">Im Popup-Modus öffnen</string>
<string name="open_in_popup_mode">Im Pop-up Modus öffnen</string>
<string name="default_video_format_title">Bevorzugtes Videoformat</string>
<string name="popup_playing_toast">Spiele im Popup-Modus ab</string>
<string name="popup_mode_share_menu_title">NewPipe Popup-Modus</string>
<string name="popup_playing_toast">Spiele im Pop-up Modus ab</string>
<string name="popup_mode_share_menu_title">NewPipe Pop-up Modus</string>
<string name="msg_popup_permission">Diese Berechtigung ist für das
Öffnen im Popup-Modus erforderlich</string>
<string name="msg_popup_permission">Diese Berechtigung ist für das Öffnen im Pop-up Modus erforderlich</string>
<string name="use_old_player_summary">Alter eingebauter Mediaframework-Player</string>
<string name="default_popup_resolution_title">Standardauflösung des Popups</string>
<string name="default_popup_resolution_title">Standardauflösung des Pop-ups</string>
<string name="show_higher_resolutions_title">Zeige höhere Auflösungen an</string>
<string name="show_higher_resolutions_summary">Nur einige Geräte unterstützen das Abspielen von 2K-/4K-Videos</string>
<string name="show_higher_resolutions_summary">Nur manche Geräte unterstützen das Abspielen von 2K-/4K-Videos</string>
<string name="controls_background_title">Hintergrund</string>
<string name="controls_popup_title">Popup</string>
<string name="controls_popup_title">Pop-up</string>
<string name="popup_remember_size_pos_title">Größe und Position des Popups merken</string>
<string name="popup_remember_size_pos_title">Größe und Position des Pop-ups merken</string>
<string name="use_external_video_player_summary">Manche Auflösungen werden KEINE Tonspur haben, wenn diese Option eingeschaltet ist</string>
<string name="popup_remember_size_pos_summary">Letzte Größe und Position des Popups merken</string>
<string name="popup_remember_size_pos_summary">Letzte Größe und Position des Pop-ups merken</string>
<string name="player_gesture_controls_title">Gestensteuerung</string>
<string name="player_gesture_controls_summary">Helligkeit und Lautstärke des Players mit Gesten steuern</string>
<string name="player_gesture_controls_summary">Benutze Gesten um Helligkeit und Lautstärke zu justieren</string>
<string name="show_search_suggestions_title">Durchsuche Vorschläge</string>
<string name="show_search_suggestions_summary">Zeige Vorschläge beim Suchen</string>
<string name="settings_category_popup_title">Popup</string>
<string name="settings_category_popup_title">Pop-up</string>
<string name="filter">Filter</string>
<string name="refresh">Aktualisieren</string>
<string name="clear">Leeren</string>
@@ -224,9 +223,9 @@
<string name="notification_channel_name">NewPipe Benachrichtigung</string>
<string name="notification_channel_description">Benachrichtigungen für NewPipe Hintergrund- und Popup-Player</string>
<string name="notification_channel_description">Benachrichtigungen für NewPipe Hintergrund- und Pop-up Player</string>
<string name="tab_main">Übersicht</string>
<string name="tab_main">Main</string>
<string name="settings_category_player_behavior_title">Verhalten</string>
<string name="settings_category_history_title">Verlauf</string>
<string name="playlist">Playlist</string>
@@ -263,7 +262,7 @@
<string name="select_a_channel">Wähle einen Kanal aus</string>
<string name="no_channel_subscribed_yet">Noch kein Kanal abonniert</string>
<string name="trending">Trends</string>
<string name="popup_playing_append">In der Warteschlange des Popup-Players</string>
<string name="popup_playing_append">In der Warteschlange des Pop-up Players</string>
<string name="play_all">Alles abspielen</string>
<string name="play_queue_remove">Entfernen</string>
@@ -274,7 +273,7 @@
<string name="feed_page_summary">Feed-Seite</string>
<string name="channel_page_summary">Kanal-Seite</string>
<string name="title_activity_background_player">Hintergrund-Player</string>
<string name="title_activity_popup_player">Popup-Player</string>
<string name="title_activity_popup_player">Pop-up Player</string>
<string name="play_queue_stream_detail">Details</string>
<string name="top_50">Top 50</string>
<string name="player_unrecoverable_failure">Nicht behebbarer Wiedergabefehler aufgetreten</string>
@@ -284,7 +283,7 @@
<string name="select_a_kiosk">Kiosk auswählen</string>
<string name="kiosk">Kiosk</string>
<string name="show_hold_to_append_summary">Tipp anzeigen, wenn der Hintergrundwiedergabe- oder Pop-up-Button auf der Videodetailseite gedrücktgehalten wird</string>
<string name="show_hold_to_append_summary">Tipp anzeigen, wenn der Hintergrundwiedergabe- oder Pop-up-Button auf der Videodetailseite gedrückt gehalten wird</string>
<string name="background_player_append">In der Warteschlange der Hintergrundwiedergabe</string>
<string name="new_and_hot">Neu und brandheiß</string>
<string name="hold_to_append">Halten zum Hinzufügen zur Warteschleife</string>

View File

@@ -302,4 +302,10 @@ abrir en modo popup</string>
<string name="give_back">Donar</string>
<string name="website_title">Página web</string>
<string name="website_encouragement">Para obtener más información y las últimas noticias sobre NewPipe, visita nuestra web.</string>
<string name="default_content_country_title">País del contenido por defecto</string>
<string name="toggle_orientation">Alternar orientación</string>
<string name="switch_to_background">Cambiar a segundo plano</string>
<string name="switch_to_popup">Cambiar a popup</string>
<string name="switch_to_main">Cambiar a principal</string>
</resources>

View File

@@ -53,7 +53,7 @@
<string name="settings_category_appearance_title">Apparence</string>
<string name="network_error">Erreur réseau</string>
<string name="download_path_audio_title">Chemin de téléchargement de l\'audio</string>
<string name="download_path_audio_title">Chemin de téléchargement</string>
<string name="download_path_audio_summary">Chemin de stockage des fichiers audio téléchargés</string>
<string name="download_path_audio_dialog_title">Entrez le chemin de téléchargement des fichiers audio</string>
@@ -66,12 +66,12 @@
<string name="error_snackbar_message">Désolé, des erreurs se sont produites.</string>
<string name="content">Contenu</string>
<string name="show_age_restricted_content_title">Afficher le contenu soumis à une restriction d\'âge</string>
<string name="duration_live">En direct</string>
<string name="show_age_restricted_content_title">Afficher le contenu avec restriction d\'âge</string>
<string name="duration_live">Direct</string>
<string name="could_not_load_thumbnails">Impossible de charger toutes les miniatures</string>
<string name="youtube_signature_decryption_error">Erreur lors du décryptage du lien</string>
<string name="light_parsing_error">Impossible d\'analyser le site complètement</string>
<string name="light_parsing_error">Impossible d\'analyser complètement le site web</string>
<string name="live_streams_not_supported">Il s\'agit d\'un direct, non supporté pour le moment.</string>
<string name="sorry_string">Désolé, une erreur inattendue s\'est produite.</string>
<string name="autoplay_by_calling_app_summary">Lire automatiquement la vidéo lorsque NewPipe est appelée par une autre application</string>
@@ -93,7 +93,7 @@
<string name="user_report">Rapport utilisateur</string>
<string name="error_snackbar_action">SIGNALER</string>
<string name="could_not_setup_download_menu">Impossible de mettre en place le menu de téléchargement</string>
<string name="could_not_setup_download_menu">Impossible de configurer le menu de téléchargement</string>
<string name="could_not_get_stream">Impossible d\'obtenir un flux</string>
<string name="downloads">Téléchargements</string>
<string name="downloads_title">Téléchargements</string>
@@ -109,19 +109,19 @@
<string name="finish">OK</string>
<string name="msg_name">Nom du fichier</string>
<string name="msg_threads">Threads</string>
<string name="msg_threads">Discussions</string>
<string name="msg_error">Erreur</string>
<string name="msg_server_unsupported">Serveur non supporté</string>
<string name="msg_exists">Fichier déjà existant</string>
<string name="msg_url_malform">URL malformée ou internet indisponible</string>
<string name="msg_running">Téléchargement NewPipe</string>
<string name="msg_running_detail">Toucher pour plus de détails</string>
<string name="msg_running_detail">Appuyer pour plus de détails</string>
<string name="msg_wait">Veuillez patienter…</string>
<string name="msg_copied">Copié dans le presse-papier</string>
<string name="no_available_dir">Sélectionner un dossier de téléchargement disponible</string>
<string name="could_not_load_image">Limage ne peut pas être chargée</string>
<string name="app_ui_crash">Lappli/linterface utilisateur a crashé</string>
<string name="could_not_load_image">Impossible de charger l\'image</string>
<string name="app_ui_crash">Lappli/linterface a crashé</string>
<string name="reCaptchaActivity">reCAPTCHA</string>
<string name="black_theme_title">Noir</string>
@@ -130,13 +130,13 @@
<string name="channel">Chaîne</string>
<string name="reCaptcha_title">Test reCAPTCHA</string>
<string name="recaptcha_request_toast">Test reCAPTCHA demandé</string>
<string name="reCaptcha_title">Défi reCAPTCHA</string>
<string name="recaptcha_request_toast">Défi reCAPTCHA demandé</string>
<string name="open_in_popup_mode">Ouvrir dans le lecteur pop-up</string>
<string name="popup_mode_share_menu_title">Lecteur pop-up de NewPipe</string>
<string name="open_in_popup_mode">Ouvrir en mode fenêtré</string>
<string name="popup_mode_share_menu_title">Mode fenêtré NewPipe</string>
<string name="popup_playing_toast">Lire dans le lecteur pop-up</string>
<string name="popup_playing_toast">Lire en mode fenêtré</string>
<string name="yes">Oui</string>
<string name="later">Plus tard</string>
<string name="disabled">Désactivé</string>
@@ -147,38 +147,38 @@
<string name="short_thousand">K</string>
<string name="short_million">M</string>
<string name="msg_popup_permission">Cette permission est nécessaire pour
\nutiliser le mode pop-up</string>
<string name="msg_popup_permission">Cette autorisation est nécessaire pour
\nutiliser le mode fenêtré</string>
<string name="controls_background_title">Arrière-plan</string>
<string name="controls_popup_title">Pop-up</string>
<string name="controls_popup_title">Fenêtre</string>
<string name="default_popup_resolution_title">Taille du lecteur pop-up</string>
<string name="default_popup_resolution_title">Résolution par défaut de la fenêtre</string>
<string name="show_higher_resolutions_title">Afficher des résolutions plus élevées</string>
<string name="show_higher_resolutions_summary">Seulement certains périphériques supportent la lecture 2K/4K</string>
<string name="show_higher_resolutions_summary">Certains appareils uniquement supportent la lecture 2K/4K</string>
<string name="default_video_format_title">Format vidéo par défaut</string>
<string name="popup_remember_size_pos_title">Mémoriser la taille et la position du lecteur pop-up</string>
<string name="popup_remember_size_pos_summary">Mémoriser le dernier emplacement et la taille du lecteur pop-up</string>
<string name="popup_remember_size_pos_title">Mémoriser la taille et la position de la fenêtre</string>
<string name="popup_remember_size_pos_summary">Mémoriser la dernière taille et position de la fenêtre</string>
<string name="settings_category_popup_title">Pop-up</string>
<string name="settings_category_popup_title">Fenêtre</string>
<string name="filter">Filtre</string>
<string name="refresh">Actualiser</string>
<string name="clear">Effacer</string>
<string name="popup_resizing_indicator_title">Redimensionner</string>
<string name="short_billion">Md</string>
<string name="short_billion">B</string>
<string name="use_external_video_player_summary">Certaines résolutions n\'auront PAS de son si cette option est activée</string>
<string name="player_gesture_controls_summary">Utilisez les gestes pour contrôler la luminosité et le volume du lecteur</string>
<string name="show_search_suggestions_title">Chercher des suggestions</string>
<string name="show_search_suggestions_summary">Montrer les suggestions pendant la recherche</string>
<string name="player_gesture_controls_summary">Utiliser les gestes pour contrôler la luminosité et le volume du lecteur</string>
<string name="show_search_suggestions_title">Suggestions de recherche</string>
<string name="show_search_suggestions_summary">Afficher les suggestions lors d\'une recherche</string>
<string name="player_gesture_controls_title">Gestes pour contrôler la lecture</string>
<string name="best_resolution">Meilleure résolution</string>
<string name="subscribe_button_title">S\'abonner</string>
<string name="subscribed_button_title">Abonné</string>
<string name="channel_unsubscribed">Désabonner de la chaîne</string>
<string name="channel_unsubscribed">Désabonné de la chaîne</string>
<string name="tab_main">Principal</string>
<string name="tab_subscriptions">Abonnements</string>
@@ -202,8 +202,8 @@
<string name="title_activity_about">À propos de NewPipe</string>
<string name="copyright" formatted="true">© %1$s par %2$s sous %3$s</string>
<string name="contribution_encouragement">Que ce soit pour des idées, traductions, changements de design, nettoyage ou gros changements de code, l\'aide est toujours la bienvenue. Plus on contribue, meilleur il devient !</string>
<string name="subscription_change_failed">Incapable de changer l\'abonnement</string>
<string name="subscription_update_failed">Incapable de mettre à jour l\'abonnement</string>
<string name="subscription_change_failed">Impossible de modifier l\'abonnement</string>
<string name="subscription_update_failed">Impossible d\'actualiser l\'abonnement</string>
<string name="resume_on_audio_focus_gain_summary">Continuer la lecture après les interruptions (ex : appels)</string>
@@ -216,7 +216,7 @@
<string name="enable_watch_history_title">Historique</string>
<string name="title_activity_history">Historique</string>
<string name="title_history_search">Recherché</string>
<string name="title_history_view">Vue</string>
<string name="title_history_view">Regardé</string>
<string name="history_disabled">L\'historique est désactivé</string>
<string name="action_history">Historique</string>
<string name="history_empty">L\'historique est vide</string>
@@ -231,10 +231,10 @@
<string name="settings_category_player_behavior_title">Comportement</string>
<string name="settings_category_history_title">Historique</string>
<string name="playlist">Liste de lecture</string>
<string name="notification_channel_description">Notifications pour les lecteurs \"Arrière-plan\" et \"Pop-up\" de NewPipe</string>
<string name="notification_channel_description">Notifications pour les lecteurs \"Arrière-plan\" et \"Fenêtre\" de NewPipe</string>
<string name="search_no_results">Aucun résultat</string>
<string name="empty_subscription_feed_subtitle">Rien à voir ici</string>
<string name="empty_subscription_feed_subtitle">Aucun contenu</string>
<string name="no_subscribers">Aucun abonné</string>
<plurals name="subscribers">
@@ -242,10 +242,10 @@
<item quantity="other">%s abonnés</item>
</plurals>
<string name="no_views">Aucun visionnage</string>
<string name="no_views">Aucune vue</string>
<plurals name="views">
<item quantity="one">%s visionnage</item>
<item quantity="other">%s visionnages</item>
<item quantity="one">%s vue</item>
<item quantity="other">%s vues</item>
</plurals>
<string name="no_videos">Aucune vidéo</string>
@@ -256,31 +256,31 @@
<string name="charset_most_special_characters">Caractères spéciaux</string>
<string name="item_deleted">Objet effacé</string>
<string name="item_deleted">Élément effacé</string>
<string name="delete_item_search_history">Voulez-vous supprimer cet élément de l\'historique de recherche ?</string>
<string name="main_page_content">Contenu de la page principale</string>
<string name="blank_page_summary">Page vide</string>
<string name="subscription_page_summary">Abonnements</string>
<string name="feed_page_summary">Page de Flux</string>
<string name="channel_page_summary">Page de la chaîne</string>
<string name="select_a_channel">Sélectionnez une chaîne</string>
<string name="select_a_channel">Sélectionner une chaîne</string>
<string name="trending">Populaires</string>
<string name="top_50">Top 50</string>
<string name="new_and_hot">Nouveau &amp; populaire</string>
<string name="background_player_append">Mettre en file d\'attente du lecteur en arrière plan</string>
<string name="popup_playing_append">Mettre en file d\'attente du lecteur pop-up</string>
<string name="play_all">Lire tout</string>
<string name="background_player_append">Mis en file d\'attente du lecteur en arrière-plan</string>
<string name="popup_playing_append">Mis en file d\'attente du lecteur fenêtré</string>
<string name="play_all">Tout lire</string>
<string name="player_stream_failure">Échec de la lecture de cette vidéo</string>
<string name="player_stream_failure">Échec de la lecture de ce flux</string>
<string name="player_unrecoverable_failure">Une erreur irrécupérable du lecteur s\'est produite</string>
<string name="no_channel_subscribed_yet">Encore aucune chaîne souscrite</string>
<string name="title_activity_background_player">Lecteur en arrière plan</string>
<string name="title_activity_popup_player">Lecteur pop-up</string>
<string name="title_activity_background_player">Lecteur en arrière-plan</string>
<string name="title_activity_popup_player">Lecteur fenêtré</string>
<string name="play_queue_remove">Retirer</string>
<string name="play_queue_stream_detail">Détails</string>
<string name="play_queue_audio_settings">Réglages audio</string>
<string name="show_hold_to_append_title">Afficher l\'aide \"Appui long pour mettre en file d\'attente\"</string>
<string name="show_hold_to_append_summary">Afficher l\'aide en restant appuyé sur les boutons \"Arrière-plan\" et \"Pop-up\" sur la page de détails d\'une vidéo</string>
<string name="show_hold_to_append_summary">Afficher l\'aide en appuyant sur les boutons \"Arrière-plan\" et \"Fenêtre\" sur la page de détails d\'une vidéo</string>
<string name="unknown_content">[Inconnu]</string>
<string name="player_recoverable_failure">Récupération de l\'erreur du lecteur</string>
@@ -290,14 +290,20 @@
<string name="kiosk">Kiosque</string>
<string name="hold_to_append">Appui long pour mettre en file d\'attente</string>
<string name="enqueue_on_background">Mettre en file d\'attente en fond</string>
<string name="enqueue_on_popup">Mettre en file d\'attente du lecteur pop-up</string>
<string name="enqueue_on_background">Mettre en file d\'attente en arrière-plan</string>
<string name="enqueue_on_popup">Mettre en file d\'attente du lecteur fenêtré</string>
<string name="start_here_on_main">Démarrer ici</string>
<string name="start_here_on_background">Démarrer ici en fond</string>
<string name="start_here_on_popup">Démarrer dans le lecteur pop-up</string>
<string name="start_here_on_background">Démarrer ici en arrière-plan</string>
<string name="start_here_on_popup">Démarrer ici en fenêtré</string>
<string name="donation_title">Donner</string>
<string name="donation_encouragement">NewPipe est développé par des volontaires sur leur temps libre afin de vous proposer la meilleur expérience. Maintenant il est temps de leurs offrir un café pour les soutenir dans leurs efforts et rendre NewPipe encore meilleur !</string>
<string name="website_title">Site</string>
<string name="website_encouragement">Pour obtenir plus d\'informations et les dernières nouvelles à propos de NewPipe, visitez notre site Internet.</string>
<string name="give_back">Donner en retour</string>
<string name="default_content_country_title">Pays du contenu par défaut</string>
<string name="toggle_orientation">Orientation</string>
<string name="switch_to_background">Basculer en arrière-plan</string>
<string name="switch_to_popup">Basculer en fenêtré</string>
<string name="switch_to_main">Basculer en normal</string>
</resources>

View File

@@ -307,4 +307,10 @@
<string name="website_encouragement">Per ricevere maggiori informazioni e le ultime novità su NewPipe visita il nostro sito web.</string>
<string name="donation_encouragement">NewPipe è sviluppato da volontari che spendono il loro tempo libero per regalarti la migliore esperienza. È tempo di restituire il favore permettendo ai nostri sviluppatori di migliorare ulteriormente NewPipe mentre gustano una tazza di Giava!</string>
<string name="give_back">Restituisci</string>
<string name="default_content_country_title">Paese predefinito per i contenuti</string>
<string name="toggle_orientation">Cambia orientamento</string>
<string name="switch_to_background">Cambia in background</string>
<string name="switch_to_popup">Cambia in visualizzazione a comparsa</string>
<string name="switch_to_main">Cambia al menù principale</string>
</resources>

View File

@@ -14,12 +14,12 @@
<string name="choose_browser">ブラウザーを選択</string>
<string name="screen_rotation">回転</string>
<string name="download_path_title">動画を保存する場所</string>
<string name="download_path_summary">動画を保存する位置</string>
<string name="download_path_summary">動画を保存する場所</string>
<string name="download_path_dialog_title">動画を保存する場所を入力して下さい</string>
<string name="default_resolution_title">基本解像度</string>
<string name="default_resolution_title">デフォルトの解像度</string>
<string name="play_with_kodi_title">Kodi で再生</string>
<string name="kore_not_found">Koreが見つかりません。Kore を入手しますか</string>
<string name="show_play_with_kodi_title">\"Kodi で再生\" 設定を表示</string>
<string name="kore_not_found">Koreが見つかりません。Kore を入手しますか</string>
<string name="show_play_with_kodi_title">\"Kodi で再生\" オプションを表示</string>
<string name="show_play_with_kodi_summary">Kodi メディアセンター経由で動画を再生するための設定を表示します</string>
<string name="play_audio">音楽</string>
<string name="default_audio_format_title">基本の音楽形式</string>
@@ -31,7 +31,7 @@
<string name="url_not_supported_toast">URLは使用できません</string>
<string name="search_language_title">優先言語</string>
<string name="settings_category_video_audio_title">動画と音楽</string>
<string name="view_count_text">%1$s ビュー</string>
<string name="view_count_text">%1$s ビュー</string>
<string name="list_thumbnail_view_description">動画 プレビュー サムネイル</string>
<string name="detail_thumbnail_view_description">動画 プレビュー サムネイル</string>
<string name="detail_uploader_thumbnail_view_description">アップローダー サムネイル</string>
@@ -39,7 +39,7 @@
<string name="detail_likes_img_view_description">好ましい</string>
<string name="use_external_video_player_title">外部プレイヤーを使用する</string>
<string name="use_external_audio_player_title">外部プレイヤーを使用する</string>
<string name="background_player_playing_toast">背後で再生しています</string>
<string name="background_player_playing_toast">バックグラウンドで再生中</string>
<string name="play_btn_text">再生</string>
@@ -51,11 +51,11 @@
<string name="settings_category_appearance_title">外観</string>
<string name="settings_category_other_title">その他</string>
<string name="network_error">通信に異常</string>
<string name="network_error">ネットワークエラー</string>
<string name="download_path_audio_title">音楽を保存する場所</string>
<string name="download_path_audio_summary">音楽を保存する位置</string>
<string name="download_path_audio_dialog_title">音楽ファイルをダウンロードする位置を入力して下さい。</string>
<string name="download_path_audio_summary">音楽を保存する場所</string>
<string name="download_path_audio_dialog_title">音楽ファイルをダウンロードする場所を入力して下さい。</string>
<string name="err_dir_create">保存場所 \'%1$s\' を作成できません</string>
<string name="info_dir_created">保存場所 \'%1$s\' を作成しました</string>
@@ -73,7 +73,7 @@
<string name="content">内容</string>
<string name="show_age_restricted_content_title">年齢制限解除</string>
<string name="show_age_restricted_content_title">年齢制限のあるコンテンツを表示する</string>
<string name="video_is_age_restricted">この動画には、年齢制限があります。設定から制限を解除して下さい。</string>
<string name="light_parsing_error">Webサイトを完全には解析できませんでした</string>
@@ -91,34 +91,34 @@
<string name="video">動画</string>
<string name="audio">音楽</string>
<string name="retry">再試行</string>
<string name="storage_permission_denied">記録領域への接続要求が拒否されました</string>
<string name="autoplay_by_calling_app_title">呼び出し</string>
<string name="storage_permission_denied">ストレージへのアクセスが拒否されました</string>
<string name="autoplay_by_calling_app_title">自動再生</string>
<string name="autoplay_by_calling_app_summary">NewPipeが他のアプリケーションから呼び出された際に、自動的に動画を再生します。</string>
<string name="report_error">不具合を報告</string>
<string name="user_report">利用者報告</string>
<string name="duration_live">生放送</string>
<string name="main_bg_subtitle">検索を選択して開始</string>
<string name="main_bg_subtitle">開始するには検索をタップ</string>
<string name="start">開始</string>
<string name="pause">一時停止</string>
<string name="view">表示</string>
<string name="delete">削除</string>
<string name="checksum">整合性検査</string>
<string name="checksum">チェックサム</string>
<string name="add">新しいミッション</string>
<string name="finish">OK</string>
<string name="msg_name">ファイル名</string>
<string name="msg_threads">同時接続数</string>
<string name="msg_error">異常</string>
<string name="msg_error">エラー</string>
<string name="msg_server_unsupported">サーバーが対応していません</string>
<string name="msg_exists">ファイルが既に存在します</string>
<string name="msg_url_malform">URL の形式が正しくないか、通信が利用できません</string>
<string name="msg_running">NewPipeの保存中</string>
<string name="msg_running_detail">詳細はタップ</string>
<string name="msg_wait">暫くお待ちさい</string>
<string name="msg_copied">クリップボードに複製しました</string>
<string name="msg_wait">お待ちください</string>
<string name="msg_copied">クリップボードにコピーしました</string>
<string name="no_available_dir">利用可能な保存場所を選択して下さい</string>
<string name="downloads">保存</string>
@@ -136,13 +136,13 @@
<string name="black_theme_title"></string>
<string name="all"></string>
<string name="channel">チャンネル</string>
<string name="all">すべ</string>
<string name="channel">チャンネル</string>
<string name="short_thousand">K</string>
<string name="short_million">000000</string>
<string name="short_billion">000000000</string>
<string name="short_million">M</string>
<string name="short_billion">B</string>
<string name="yes">はい</string>
<string name="later">後で</string>
@@ -156,10 +156,10 @@
<string name="popup_playing_toast">ポップアップモードで再生中</string>
<string name="use_old_player_title">古いプレーヤーを使用する</string>
<string name="use_old_player_summary">Mediaframework プレーヤーの古いビルド。</string>
<string name="use_old_player_summary">古い内蔵のMediaframeworkプレーヤー</string>
<string name="disabled">無効</string>
<string name="default_video_format_title">お好みのビデオ フォーマット</string>
<string name="default_video_format_title">デフォルトの動画形式</string>
<string name="default_popup_resolution_title">デフォルトのポップアップ解像度</string>
<string name="show_higher_resolutions_title">高い解像度で表示</string>
@@ -172,14 +172,14 @@
<string name="clear">クリア</string>
<string name="popup_remember_size_pos_title">ポップアップのサイズと位置を記憶する</string>
<string name="popup_remember_size_pos_summary">最後のサイズと位置を記憶してポップアップを設定します</string>
<string name="popup_remember_size_pos_summary">前回のポップアップしたサイズと位置を記憶する</string>
<string name="settings_category_popup_title">ポップアップ</string>
<string name="popup_resizing_indicator_title">サイズを変更</string>
<string name="use_external_video_player_summary">このオプションが有効になっているとき、一部の解像度ではオーディオがありません</string>
<string name="player_gesture_controls_title">プレーヤーのジェスチャー コントロール</string>
<string name="player_gesture_controls_summary">プレーヤーの明るさと音量をコントロールするのにジェスチャーを使用します</string>
<string name="player_gesture_controls_summary">ジェスチャーを使用してプレーヤーの明るさと音量をコントロールする</string>
<string name="show_search_suggestions_title">検索候補</string>
<string name="show_search_suggestions_summary">検索時に候補を表示します</string>
@@ -187,18 +187,90 @@
<string name="title_activity_about">NewPipe について</string>
<string name="action_settings">設定</string>
<string name="action_about">アプリについて</string>
<string name="action_about">このアプリについて</string>
<string name="title_licenses">サードパーティー ライセンス</string>
<string name="copyright" formatted="true">© %1$s 作者 %2$s ライセンス %3$s</string>
<string name="error_unable_to_load_license">ライセンスをロードできません</string>
<string name="error_unable_to_load_license">ライセンスを読み込めません</string>
<string name="action_open_website">Web サイトを開く</string>
<string name="tab_about">アプリについて</string>
<string name="tab_about">このアプリについて</string>
<string name="tab_contributors">貢献者</string>
<string name="tab_licenses">ライセンス</string>
<string name="app_description">Androidの無料で軽量な Youtube フロントエンド。</string>
<string name="app_description">Android向けの無料で軽量なYouTubeフロントエンド。</string>
<string name="view_on_github">Github で表示</string>
<string name="app_license_title">NewPipe のライセンス</string>
<string name="contribution_encouragement">アイデア、翻訳、デザインの変更、コードのクリーニング、または本当に重いコードの変更がありますか。ヘルプは常に歓迎します。さらに良いものになりますように!</string>
<string name="contribution_encouragement">翻訳、デザインの変更、コードの整理、動作の重いコードの変更など、アイデアをお持ちではありませんか?ヘルプはいつでも歓迎します。より良いものを一緒に作り上げましょう!</string>
<string name="read_full_license">ライセンスを読む</string>
<string name="contribution_title">貢献</string>
</resources>
<string name="subscribe_button_title">チャンネル登録</string>
<string name="subscribed_button_title">チャンネル登録しました</string>
<string name="channel_unsubscribed">チャンネル登録を解除しました</string>
<string name="subscription_change_failed">チャンネル登録を変更できません</string>
<string name="subscription_update_failed">チャンネル登録を更新できません</string>
<string name="tab_main">メイン</string>
<string name="tab_subscriptions">登録リスト</string>
<string name="fragment_whats_new">新着</string>
<string name="enable_search_history_title">検索履歴</string>
<string name="enable_search_history_summary">検索履歴をローカルに保存します</string>
<string name="enable_watch_history_title">再生履歴</string>
<string name="enable_watch_history_summary">再生した動画を記録します</string>
<string name="resume_on_audio_focus_gain_title">フォーカスで再開</string>
<string name="resume_on_audio_focus_gain_summary">電話などによる中断の後、再生を再開します</string>
<string name="settings_category_player_title">プレーヤー</string>
<string name="show_hold_to_append_summary">動画の詳細ページで背景、またはポップアップボタンが押されたときにヒントを表示する</string>
<string name="settings_category_player_behavior_title">動作</string>
<string name="settings_category_history_title">履歴</string>
<string name="playlist">再生リスト</string>
<string name="undo">元に戻す</string>
<string name="play_all">すべて再生</string>
<string name="notification_channel_name">NewPipeの通知</string>
<string name="unknown_content">[不明]</string>
<string name="player_stream_failure">ストリームの再生に失敗しました</string>
<string name="player_unrecoverable_failure">回復不能な再生エラーが発生しました</string>
<string name="search_no_results">何も見つかりませんでした</string>
<string name="no_subscribers">チャンネル登録なし</string>
<string name="no_videos">動画がありません</string>
<string name="settings_category_downloads_title">保存</string>
<string name="settings_file_charset_title">ファイル名に使用可能な文字</string>
<string name="settings_file_replacement_character_summary">無効な文字は次の値で置き換えられます</string>
<string name="settings_file_replacement_character_title">置換文字</string>
<string name="charset_letters_and_digits">文字と数字</string>
<string name="charset_most_special_characters">ほとんどの特殊文字</string>
<string name="donation_title">寄付</string>
<string name="donation_encouragement">NewPipeはあなたに最高の経験をもたらすため、自由時間を費やしたボランティアによって開発されています。カップのコーヒー(Java)を楽しんでいる間に、開発者がNewPipeをより良いものにすることが出来るよう、今度はお返しをする時間です</string>
<string name="website_title">Webサイト</string>
<string name="website_encouragement">NewPipeに関する詳しい情報や最新のニュースについては、我々のWebサイトをご覧ください。</string>
<string name="title_activity_history">履歴</string>
<string name="title_history_search">検索履歴</string>
<string name="title_history_view">再生履歴</string>
<string name="history_disabled">履歴は無効です</string>
<string name="action_history">履歴</string>
<string name="history_empty">履歴に何もありません</string>
<string name="history_cleared">履歴を消去しました</string>
<string name="item_deleted">アイテムを削除しました</string>
<string name="delete_item_search_history">このアイテムを検索履歴から削除しますか?</string>
<string name="main_page_content">メインページのコンテンツ</string>
<string name="blank_page_summary">空白ページ</string>
<string name="kiosk_page_summary">キオスクページ</string>
<string name="subscription_page_summary">チャンネル登録ページ</string>
<string name="feed_page_summary">フィードページ</string>
<string name="channel_page_summary">チャンネルページ</string>
<string name="select_a_channel">選択したチャンネル</string>
<string name="no_channel_subscribed_yet">購読しているチャンネルはありません</string>
<string name="select_a_kiosk">選択したキオスク</string>
<string name="kiosk">キオスク</string>
<string name="trending">人気</string>
<string name="top_50">トップ50</string>
<string name="title_activity_popup_player">ポップアップ再生</string>
<string name="play_queue_remove">削除</string>
<string name="play_queue_stream_detail">詳細</string>
<string name="play_queue_audio_settings">音声の設定</string>
</resources>

View File

@@ -33,7 +33,7 @@
<string name="play_audio">Zvuk</string>
<string name="default_audio_format_title">Predvolený zvukový formát</string>
<string name="webm_description">WebM — voľný formát</string>
<string name="m4a_description">m4a — lepšia kvalita</string>
<string name="m4a_description">M4A — lepšia kvalita</string>
<string name="theme_title">Téma</string>
<string name="dark_theme_title">Tmavá</string>
<string name="light_theme_title">Svetlá</string>
@@ -128,7 +128,7 @@
<string name="reCaptchaActivity">reCAPTCHA</string>
<string name="reCaptcha_title">Výzva reCAPTCHA</string>
<string name="black_theme_title">Tmavá</string>
<string name="black_theme_title">Čierna</string>
<string name="all">Všetko</string>
<string name="channel">Kanály</string>

View File

@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="main_bg_subtitle">தொடங்குவதற்கு தேடல் பொத்தானை அழுத்தவும்</string>
<string name="view_count_text">"%1$ பார்வைகள்"</string>
<string name="view_count_text">"%1$s பார்வைகள்"</string>
<string name="upload_date_text">"%1$s அன்று வெளியிடப்பட்டது"</string>
<string name="no_player_found">ஸ்டீரீம் பிளேயர் கண்டறியப்படவில்லை. வில்சி நிருவ வேண்டுமா?</string>
<string name="install">நிறுவ</string>

View File

@@ -2,7 +2,7 @@
<resources>
<string name="main_bg_subtitle">ప్రారంభించడానికి శోధనను క్లిక్</string>
<string name="view_count_text">%1$s వీక్షణలు</string>
<string name="upload_date_text">%1$\ts ప్రచురించబడింది</string>
<string name="upload_date_text">%1$s ప్రచురించబడింది</string>
<string name="install">ఇన్స్టాల్</string>
<string name="cancel">రద్దు చేయి</string>
<string name="open_in_browser">బ్రౌజర్ తెరవండి</string>

View File

@@ -46,6 +46,13 @@
<item>144p</item>
</string-array>
<string-array name="service_list" translatable="false">
<item>@string/youtube</item>
<item>@string/soundcloud</item>
</string-array>
<string name="service_key" translatable="false">service</string>
<string name="default_service_value" translatable="false">@string/youtube</string>
<string name="video_mp4_key" translatable="false">video_mp4</string>
<string name="video_webm_key" translatable="false">video_webm</string>
<string name="video_3gp_key" translatable="false">video_3gp</string>

View File

@@ -84,6 +84,7 @@
<string name="show_hold_to_append_summary">Show tip when background or popup button is pressed on video details page</string>
<string name="url_not_supported_toast">URL not supported</string>
<string name="default_content_country_title">Default content country</string>
<string name="service_title">Service</string>
<string name="search_language_title">Default content language</string>
<string name="settings_category_player_title">Player</string>
<string name="settings_category_player_behavior_title">Behavior</string>
@@ -329,4 +330,10 @@
<string name="start_here_on_main">Start Playing Here</string>
<string name="start_here_on_background">Start Here on Background</string>
<string name="start_here_on_popup">Start Here on Popup</string>
<!-- Drawer -->
<string name="drawer_open">Open Drawer</string>
<string name="drawer_close">Close Drawer</string>
<string name="youtube" translatable="false">YouTube</string>
<string name="soundcloud" translatable="false">SoundCloud</string>
</resources>

View File

@@ -2,7 +2,6 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/content">
<ListPreference
android:defaultValue="@string/default_country_value"
android:entries="@array/country_names"
@@ -38,5 +37,4 @@
android:key="@string/main_page_content_key"
android:title="@string/main_page_content"
android:summary="%s"/>
</PreferenceScreen>