Merge branch 'develop' into 'master'
Release v1.0.53 See merge request sschueller/peertube!13
This commit is contained in:
commit
a937a51db8
|
@ -1,3 +1,12 @@
|
|||
### Version 1.0.53 Tag: v1.0.53 (2021-01-24)
|
||||
- Making X in pip mode stop background audio properly (@dhk2)
|
||||
- Adding clear search history option to settings menu (@dhk2)
|
||||
- Fix no language selected defaults to all video languages
|
||||
- Updated icon library
|
||||
- Added buffering indicator to video playback
|
||||
- Fixed blank video issues on servers offering 0p video.
|
||||
- Updated translations
|
||||
|
||||
### Version 1.0.52 Tag: v1.0.52 (2021-01-17)
|
||||
- Implemented edit server in server book (@kosharskiy)
|
||||
- Updated translations
|
||||
|
|
|
@ -109,11 +109,11 @@ dependencies {
|
|||
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
|
||||
implementation "androidx.fragment:fragment-ktx:$fragment_version"
|
||||
|
||||
implementation 'de.hdodenhof:circleimageview:3.0.0'
|
||||
implementation 'de.hdodenhof:circleimageview:3.1.0'
|
||||
|
||||
// font awesome
|
||||
implementation "com.mikepenz:iconics-core:3.1.0"
|
||||
implementation 'com.mikepenz:fontawesome-typeface:5.3.1.1@aar'
|
||||
implementation 'com.mikepenz:iconics-core:5.2.4'
|
||||
implementation 'com.mikepenz:fontawesome-typeface:5.9.0.2-kotlin@aar'
|
||||
|
||||
// http client / REST
|
||||
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
|
||||
|
@ -141,10 +141,10 @@ dependencies {
|
|||
implementation "com.google.android.exoplayer:extension-okhttp:$exoplayer"
|
||||
|
||||
// date formatter
|
||||
implementation 'org.ocpsoft.prettytime:prettytime:4.0.4.Final'
|
||||
implementation 'org.ocpsoft.prettytime:prettytime:5.0.0.Final'
|
||||
|
||||
// Version comparison
|
||||
implementation 'org.apache.maven:maven-artifact:3.5.0'
|
||||
implementation 'org.apache.maven:maven-artifact:3.6.3'
|
||||
|
||||
// database lib
|
||||
implementation "androidx.room:room-runtime:$room_version"
|
||||
|
@ -162,7 +162,7 @@ dependencies {
|
|||
implementation 'androidx.preference:preference-ktx:1.1.1'
|
||||
|
||||
// testing
|
||||
testImplementation 'junit:junit:4.13'
|
||||
testImplementation 'junit:junit:4.13.1'
|
||||
androidTestImplementation 'androidx.test:runner:1.3.0'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
|
||||
androidTestImplementation "androidx.room:room-testing:$room_version"
|
||||
|
|
|
@ -67,6 +67,13 @@
|
|||
android:exported="false" />
|
||||
|
||||
<service android:name=".service.VideoPlayerService" />
|
||||
|
||||
<receiver android:name="androidx.media.session.MediaButtonReceiver" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MEDIA_BUTTON" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
|
@ -24,12 +24,11 @@ import android.view.Menu;
|
|||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
||||
import com.google.android.material.bottomnavigation.LabelVisibilityMode;
|
||||
import com.mikepenz.fontawesome_typeface_library.FontAwesome;
|
||||
import com.mikepenz.iconics.IconicsDrawable;
|
||||
import com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome;
|
||||
import com.squareup.picasso.Picasso;
|
||||
|
||||
import net.schueller.peertube.R;
|
||||
|
|
|
@ -20,6 +20,7 @@ import android.content.SharedPreferences;
|
|||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import android.provider.SearchRecentSuggestions;
|
||||
import android.util.Log;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AlertDialog.Builder;
|
||||
|
@ -30,6 +31,7 @@ import androidx.preference.PreferenceFragmentCompat;
|
|||
import androidx.preference.SwitchPreference;
|
||||
import net.schueller.peertube.BuildConfig;
|
||||
import net.schueller.peertube.R;
|
||||
import net.schueller.peertube.provider.SearchSuggestionsProvider;
|
||||
|
||||
public class SettingsActivity extends CommonActivity {
|
||||
|
||||
|
@ -108,6 +110,28 @@ public class SettingsActivity extends CommonActivity {
|
|||
return true;
|
||||
});
|
||||
}
|
||||
//clear search history buttonish
|
||||
Preference button = findPreference(getString(R.string.pref_clear_history_key));
|
||||
button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
new Builder(preference.getContext())
|
||||
.setTitle(R.string.clear_search_history)
|
||||
.setMessage(R.string.clear_search_history_prompt)
|
||||
.setIcon(R.drawable.ic_info_black_24dp)
|
||||
.setNegativeButton(R.string.pref_insecure_confirm_no, (dialog, whichButton) -> {
|
||||
// do nothing
|
||||
})
|
||||
.setPositiveButton(R.string.pref_insecure_confirm_yes, (dialog, whichButton) -> {
|
||||
// OK has been pressed
|
||||
SearchRecentSuggestions suggestions = new SearchRecentSuggestions(getContext(),
|
||||
SearchSuggestionsProvider.AUTHORITY,
|
||||
SearchSuggestionsProvider.MODE);
|
||||
suggestions.clearHistory();
|
||||
}).create().show();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
|
@ -50,11 +50,10 @@ import android.view.MenuInflater;
|
|||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.mikepenz.fontawesome_typeface_library.FontAwesome;
|
||||
import com.mikepenz.iconics.IconicsDrawable;
|
||||
|
||||
import com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome;
|
||||
import net.schueller.peertube.R;
|
||||
import net.schueller.peertube.adapter.VideoAdapter;
|
||||
import net.schueller.peertube.helper.APIUrlHelper;
|
||||
|
@ -130,15 +129,15 @@ public class VideoListActivity extends CommonActivity {
|
|||
|
||||
// Set an icon in the ActionBar
|
||||
menu.findItem(R.id.action_account).setIcon(
|
||||
new IconicsDrawable(this, FontAwesome.Icon.faw_user_circle).actionBar());
|
||||
new IconicsDrawable(this, FontAwesome.Icon.faw_user_circle));
|
||||
|
||||
menu.findItem(R.id.action_server_address_book).setIcon(
|
||||
new IconicsDrawable(this, FontAwesome.Icon.faw_server).actionBar());
|
||||
new IconicsDrawable(this, FontAwesome.Icon.faw_server));
|
||||
|
||||
MenuItem searchMenuItem = menu.findItem(R.id.action_search);
|
||||
|
||||
searchMenuItem.setIcon(
|
||||
new IconicsDrawable(this, FontAwesome.Icon.faw_search).actionBar());
|
||||
new IconicsDrawable(this, FontAwesome.Icon.faw_search));
|
||||
|
||||
// Get the SearchView and set the searchable configuration
|
||||
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
|
||||
|
@ -324,13 +323,16 @@ public class VideoListActivity extends CommonActivity {
|
|||
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
String nsfw = sharedPref.getBoolean(getString(R.string.pref_show_nsfw_key), false) ? "both" : "false";
|
||||
|
||||
Locale locale = getResources().getConfiguration().locale;
|
||||
String country = locale.getLanguage();
|
||||
//
|
||||
// Locale locale = getResources().getConfiguration().locale;
|
||||
// String country = locale.getLanguage();
|
||||
//
|
||||
// HashSet<String> countries = new HashSet<>(1);
|
||||
// countries.add(country);
|
||||
|
||||
HashSet<String> countries = new HashSet<>(1);
|
||||
countries.add(country);
|
||||
// We set this to default to null so that on initial start there are videos listed.
|
||||
Set<String> languages = sharedPref.getStringSet(getString(R.string.pref_video_language_key), null);
|
||||
|
||||
Set<String> languages = sharedPref.getStringSet(getString(R.string.pref_video_language_key), countries);
|
||||
String apiBaseURL = APIUrlHelper.getUrlWithVersion(this);
|
||||
|
||||
GetVideoDataService service = RetrofitInstance.getRetrofitInstance(apiBaseURL, APIUrlHelper.useInsecureConnection(this)).create(GetVideoDataService.class);
|
||||
|
|
|
@ -115,7 +115,7 @@ public class ChannelAdapter extends RecyclerView.Adapter<ChannelAdapter.AccountV
|
|||
});
|
||||
|
||||
holder.moreButton.setText(R.string.video_more_icon);
|
||||
new Iconics.IconicsBuilder().ctx(context).on(holder.moreButton).build();
|
||||
new Iconics.Builder().on(holder.moreButton).build();
|
||||
|
||||
holder.moreButton.setOnClickListener(v -> {
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ public class ServerSearchAdapter extends RecyclerView.Adapter<ServerSearchAdapte
|
|||
//
|
||||
//
|
||||
// holder.moreButton.setText(R.string.video_more_icon);
|
||||
// new Iconics.IconicsBuilder().ctx(context).on(holder.moreButton).build();
|
||||
// new Iconics.Builder().on(holder.moreButton).build();
|
||||
//
|
||||
// holder.moreButton.setOnClickListener(v -> {
|
||||
//
|
||||
|
|
|
@ -131,7 +131,7 @@ public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.VideoViewHol
|
|||
});
|
||||
|
||||
holder.moreButton.setText(R.string.video_more_icon);
|
||||
new Iconics.IconicsBuilder().ctx(context).on(holder.moreButton).build();
|
||||
new Iconics.Builder().on(holder.moreButton).build();
|
||||
|
||||
holder.moreButton.setOnClickListener(v -> {
|
||||
|
||||
|
|
|
@ -52,9 +52,9 @@ public class VideoMenuQualityFragment extends BottomSheetDialogFragment {
|
|||
if (autoQualityFile == null) {
|
||||
autoQualityFile = new File();
|
||||
Resolution autoQualityResolution = new Resolution();
|
||||
autoQualityResolution.setId(0);
|
||||
autoQualityResolution.setId(999999);
|
||||
autoQualityResolution.setLabel(context.getString(R.string.menu_video_options_quality_automated));
|
||||
autoQualityFile.setId(0);
|
||||
autoQualityFile.setId(999999);
|
||||
autoQualityFile.setResolution(autoQualityResolution);
|
||||
}
|
||||
if (!mFiles.contains(autoQualityFile)) {
|
||||
|
@ -74,7 +74,7 @@ public class VideoMenuQualityFragment extends BottomSheetDialogFragment {
|
|||
false);
|
||||
|
||||
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
Integer videoQuality = sharedPref.getInt(getString(R.string.pref_quality_key), 0);
|
||||
Integer videoQuality = sharedPref.getInt(getString(R.string.pref_quality_key), 999999);
|
||||
|
||||
for (File file : mFiles) {
|
||||
|
||||
|
@ -95,11 +95,13 @@ public class VideoMenuQualityFragment extends BottomSheetDialogFragment {
|
|||
|
||||
for (File fileV : mFiles) {
|
||||
TextView iconViewV = view.findViewById(fileV.getResolution().getId());
|
||||
iconViewV.setText("");
|
||||
if (iconViewV != null) {
|
||||
iconViewV.setText("");
|
||||
}
|
||||
}
|
||||
|
||||
iconView.setText(R.string.video_quality_active_icon);
|
||||
new Iconics.IconicsBuilder().ctx(getContext()).on(iconView).build();
|
||||
new Iconics.Builder().on(iconView).build();
|
||||
|
||||
//TODO: set new video quality on running video
|
||||
|
||||
|
@ -112,7 +114,7 @@ public class VideoMenuQualityFragment extends BottomSheetDialogFragment {
|
|||
// Set current
|
||||
if (videoQuality.equals(file.getResolution().getId())) {
|
||||
iconView.setText(R.string.video_quality_active_icon);
|
||||
new Iconics.IconicsBuilder().ctx(getContext()).on(iconView).build();
|
||||
new Iconics.Builder().on(iconView).build();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -100,7 +100,7 @@ public class VideoMenuSpeedFragment extends BottomSheetDialogFragment {
|
|||
videoPlayerService.setPlayBackSpeed(speed);
|
||||
|
||||
icon.setText(R.string.video_speed_active_icon);
|
||||
new Iconics.IconicsBuilder().ctx(getContext()).on(icon).build();
|
||||
new Iconics.Builder().on(icon).build();
|
||||
}
|
||||
|
||||
}
|
|
@ -105,7 +105,7 @@ public class VideoMetaDataFragment extends Fragment {
|
|||
Button thumbsUpButton = activity.findViewById(R.id.video_thumbs_up);
|
||||
defaultTextColor = thumbsUpButton.getTextColors();
|
||||
thumbsUpButton.setText(R.string.video_thumbs_up_icon);
|
||||
new Iconics.IconicsBuilder().ctx(context).on(thumbsUpButton).build();
|
||||
new Iconics.Builder().on(thumbsUpButton).build();
|
||||
thumbsUpButton.setOnClickListener(v -> {
|
||||
rateVideo(true, video);
|
||||
});
|
||||
|
@ -113,7 +113,7 @@ public class VideoMetaDataFragment extends Fragment {
|
|||
// Thumbs Down
|
||||
Button thumbsDownButton = activity.findViewById(R.id.video_thumbs_down);
|
||||
thumbsDownButton.setText(R.string.video_thumbs_down_icon);
|
||||
new Iconics.IconicsBuilder().ctx(context).on(thumbsDownButton).build();
|
||||
new Iconics.Builder().on(thumbsDownButton).build();
|
||||
thumbsDownButton.setOnClickListener(v -> {
|
||||
rateVideo(false, video);
|
||||
});
|
||||
|
@ -145,7 +145,7 @@ public class VideoMetaDataFragment extends Fragment {
|
|||
// Share
|
||||
Button videoShareButton = activity.findViewById(R.id.video_share);
|
||||
videoShareButton.setText(R.string.video_share_icon);
|
||||
new Iconics.IconicsBuilder().ctx(context).on(videoShareButton).build();
|
||||
new Iconics.Builder().on(videoShareButton).build();
|
||||
videoShareButton.setOnClickListener(v ->
|
||||
{
|
||||
leaveAppExpected = true;
|
||||
|
@ -155,7 +155,7 @@ public class VideoMetaDataFragment extends Fragment {
|
|||
// Download
|
||||
Button videoDownloadButton = activity.findViewById(R.id.video_download);
|
||||
videoDownloadButton.setText(R.string.video_download_icon);
|
||||
new Iconics.IconicsBuilder().ctx(context).on(videoDownloadButton).build();
|
||||
new Iconics.Builder().on(videoDownloadButton).build();
|
||||
videoDownloadButton.setOnClickListener(v -> {
|
||||
// get permission to store file
|
||||
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
|
@ -235,7 +235,7 @@ public class VideoMetaDataFragment extends Fragment {
|
|||
// more button
|
||||
TextView moreButton = activity.findViewById(R.id.moreButton);
|
||||
moreButton.setText(R.string.video_more_icon);
|
||||
new Iconics.IconicsBuilder().ctx(context).on(moreButton).build();
|
||||
new Iconics.Builder().on(moreButton).build();
|
||||
|
||||
moreButton.setOnClickListener(v -> {
|
||||
PopupMenu popup = new PopupMenu(context, v);
|
||||
|
@ -260,7 +260,7 @@ public class VideoMetaDataFragment extends Fragment {
|
|||
// video player options
|
||||
TextView videoOptions = activity.findViewById(R.id.exo_more);
|
||||
videoOptions.setText(R.string.video_more_icon);
|
||||
new Iconics.IconicsBuilder().ctx(context).on(videoOptions).build();
|
||||
new Iconics.Builder().on(videoOptions).build();
|
||||
|
||||
videoOptions.setOnClickListener(v -> {
|
||||
VideoOptionsFragment videoOptionsFragment =
|
||||
|
|
|
@ -77,7 +77,7 @@ public class VideoOptionsFragment extends BottomSheetDialogFragment {
|
|||
|
||||
|
||||
iconView.setText(R.string.video_option_speed_icon);
|
||||
new Iconics.IconicsBuilder().ctx(getContext()).on(iconView).build();
|
||||
new Iconics.Builder().on(iconView).build();
|
||||
textView.setOnClickListener(view1 -> {
|
||||
VideoMenuSpeedFragment videoMenuSpeedFragment =
|
||||
VideoMenuSpeedFragment.newInstance(videoPlayerService);
|
||||
|
@ -92,7 +92,7 @@ public class VideoOptionsFragment extends BottomSheetDialogFragment {
|
|||
TextView textView2 = menuRow2.findViewById(R.id.video_quality_text);
|
||||
textView2.setText(String.format(getString(R.string.menu_video_options_quality), getCurrentVideoQuality(files)));
|
||||
iconView2.setText(R.string.video_option_quality_icon);
|
||||
new Iconics.IconicsBuilder().ctx(getContext()).on(iconView2).build();
|
||||
new Iconics.Builder().on(iconView2).build();
|
||||
textView2.setOnClickListener(view1 -> {
|
||||
VideoMenuQualityFragment videoMenuQualityFragment =
|
||||
VideoMenuQualityFragment.newInstance(getContext(), files);
|
||||
|
@ -107,7 +107,7 @@ public class VideoOptionsFragment extends BottomSheetDialogFragment {
|
|||
|
||||
private String getCurrentVideoQuality(ArrayList<File> files) {
|
||||
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
Integer videoQuality = sharedPref.getInt(getString(R.string.pref_quality_key), 0);
|
||||
Integer videoQuality = sharedPref.getInt(getString(R.string.pref_quality_key), 999999);
|
||||
|
||||
for (File file : files) {
|
||||
if (videoQuality.equals(file.getResolution().getId())) {
|
||||
|
|
|
@ -162,7 +162,7 @@ public class VideoPlayerFragment extends Fragment implements VideoRendererEventL
|
|||
FrameLayout fullscreenButton = activity.findViewById(R.id.exo_fullscreen_button);
|
||||
|
||||
fullscreenText.setText(R.string.video_expand_icon);
|
||||
new Iconics.IconicsBuilder().ctx(context).on(fullscreenText).build();
|
||||
new Iconics.Builder().on(fullscreenText).build();
|
||||
|
||||
fullscreenButton.setOnClickListener(view -> {
|
||||
Log.d(TAG, "Fullscreen");
|
||||
|
@ -239,12 +239,12 @@ public class VideoPlayerFragment extends Fragment implements VideoRendererEventL
|
|||
torrentStream.startStream(stream);
|
||||
} else {
|
||||
|
||||
Integer videoQuality = sharedPref.getInt(getString(R.string.pref_quality_key), 0);
|
||||
Integer videoQuality = sharedPref.getInt(getString(R.string.pref_quality_key), 999999);
|
||||
|
||||
//get video qualities
|
||||
/// #
|
||||
// get video qualities
|
||||
// TODO: if auto is set all versions except 0p should be added to a track and have exoplayer auto select optimal bitrate
|
||||
if (video.getFiles().size() > 0) {
|
||||
String urlToPlay = video.getFiles().get( 0 ).getFileUrl();
|
||||
String urlToPlay = video.getFiles().get( 0 ).getFileUrl(); // default, take first found, usually highest res
|
||||
for ( File file : video.getFiles() ) {
|
||||
// Set quality if it matches
|
||||
if ( file.getResolution().getId().equals( videoQuality ) ) {
|
||||
|
@ -321,7 +321,7 @@ public class VideoPlayerFragment extends Fragment implements VideoRendererEventL
|
|||
} else {
|
||||
fullscreenButton.setText(R.string.video_expand_icon);
|
||||
}
|
||||
new Iconics.IconicsBuilder().ctx(getContext()).on(fullscreenButton).build();
|
||||
new Iconics.Builder().on(fullscreenButton).build();
|
||||
}
|
||||
|
||||
public Boolean getIsFullscreen() {
|
||||
|
|
|
@ -44,6 +44,7 @@ import android.widget.Toast;
|
|||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.ExoPlayer;
|
||||
import com.google.android.exoplayer2.ExoPlayerFactory;
|
||||
import com.google.android.exoplayer2.MediaItem;
|
||||
import com.google.android.exoplayer2.PlaybackParameters;
|
||||
import com.google.android.exoplayer2.Player;
|
||||
import com.google.android.exoplayer2.SimpleExoPlayer;
|
||||
|
@ -53,6 +54,8 @@ import com.google.android.exoplayer2.ext.mediasession.TimelineQueueNavigator;
|
|||
import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSource;
|
||||
import com.google.android.exoplayer2.ext.okhttp.OkHttpDataSourceFactory;
|
||||
import com.google.android.exoplayer2.source.ExtractorMediaSource;
|
||||
import com.google.android.exoplayer2.source.MediaSource;
|
||||
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
|
||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
||||
import com.google.android.exoplayer2.ui.PlayerNotificationManager;
|
||||
import com.google.android.exoplayer2.upstream.DataSource;
|
||||
|
@ -102,7 +105,9 @@ public class VideoPlayerService extends Service {
|
|||
|
||||
super.onCreate();
|
||||
|
||||
player = ExoPlayerFactory.newSimpleInstance(getApplicationContext(), new DefaultTrackSelector());
|
||||
player = new SimpleExoPlayer.Builder(getApplicationContext())
|
||||
.setTrackSelector(new DefaultTrackSelector(getApplicationContext()))
|
||||
.build();
|
||||
|
||||
// Stop player if audio device changes, e.g. headphones unplugged
|
||||
player.addListener(new Player.EventListener() {
|
||||
|
@ -224,14 +229,18 @@ public class VideoPlayerService extends Service {
|
|||
okhttpClientBuilder = getUnsafeOkHttpClientBuilder();
|
||||
}
|
||||
|
||||
// Create a data source factory.
|
||||
DataSource.Factory dataSourceFactory = new OkHttpDataSourceFactory(okhttpClientBuilder.build(), Util.getUserAgent(getApplicationContext(), "PeerTube"));
|
||||
|
||||
// This is the MediaSource representing the media to be played.
|
||||
ExtractorMediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory)
|
||||
.createMediaSource(Uri.parse(currentStreamUrl));
|
||||
// Create a progressive media source pointing to a stream uri.
|
||||
MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
|
||||
.createMediaSource(MediaItem.fromUri(Uri.parse(currentStreamUrl)));
|
||||
|
||||
// Prepare the player with the source.
|
||||
player.prepare(videoSource);
|
||||
// Set the media source to be played.
|
||||
player.setMediaSource(mediaSource);
|
||||
|
||||
// Prepare the player.
|
||||
player.prepare();
|
||||
|
||||
// Auto play
|
||||
player.setPlayWhenReady(true);
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
android:background="@color/videoBackgroundColor"
|
||||
app:controller_layout_id="@layout/video_playback_controls"
|
||||
app:resize_mode="fixed_width"
|
||||
|
||||
app:show_buffering="always"
|
||||
/>
|
||||
|
||||
|
||||
|
|
|
@ -40,4 +40,9 @@
|
|||
<string name="video_speed_20">2×</string>
|
||||
<string name="video_speed_15">1,5×</string>
|
||||
<string name="video_speed_05">0,5×</string>
|
||||
<string name="pref_title_background_play">Αναπαραγωγή στο παρασκήνιο</string>
|
||||
<string name="pref_title_peertube_server">Εξυπηρετητής PeerTube</string>
|
||||
<string name="pref_description_language">Επιλογή γλώσσας βίντεο, αντί να εμφανίζονται όλα τα βίντεο σε όλες τις γλώσσες.</string>
|
||||
<string name="pref_title_version">Έκδοση</string>
|
||||
<string name="pref_title_license">Άδεια χρήσης</string>
|
||||
</resources>
|
|
@ -174,4 +174,21 @@
|
|||
<string name="pref_background_audio">Continuar como audio en segundo plano</string>
|
||||
<string name="pref_description_language_app">Selecciona el idioma de la interfaz de la aplicación. Reinicia para que los cambios se apliquen.</string>
|
||||
<string name="pref_title_back_pause">Pausar con el botón de retroceso</string>
|
||||
<string name="bzs">Portugués Brasileño (Lenguaje de Señas)</string>
|
||||
<string name="csl">Chino (Lenguaje de señas)</string>
|
||||
<string name="zh">Chino</string>
|
||||
<string name="ce">Checheno</string>
|
||||
<string name="ch">Chamorro</string>
|
||||
<string name="ca">Catalán</string>
|
||||
<string name="my">Birmano</string>
|
||||
<string name="bg">Búlgaro</string>
|
||||
<string name="bfi">Idioma de Señas Británico</string>
|
||||
<string name="br">Bretón</string>
|
||||
<string name="bs">Bosnio</string>
|
||||
<string name="bi">Bislama</string>
|
||||
<string name="bn_rBD">Bengalí (Bangladés)</string>
|
||||
<string name="pref_title_accept_insecure">Inhabilitar certificación SSL</string>
|
||||
<string name="pref_description_accept_insecure">Ignorar conexiones inseguras. Usa esta opción únicamente si conoces el servidor al que te vas a conectar. Requiere reiniciar la aplicación.</string>
|
||||
<string name="pref_background_behavior_summary">La manera en que un vídeo responde al ser enviado al fondo</string>
|
||||
<string name="pref_description_back_pause">Pausa la reproducción de fondo al presionar atrás durante la reproducción de vídeo.</string>
|
||||
</resources>
|
|
@ -347,4 +347,12 @@
|
|||
<string name="title_activity_settings">Configurações</string>
|
||||
<string name="network_error">Erro de acesso à rede, verifique sua conectividade</string>
|
||||
<string name="server_selection_filter_hint">Filtrar a lista</string>
|
||||
<string name="settings_activity_advanced_category_title">Avançado</string>
|
||||
<string name="pref_insecure_confirm_message">Você está prestes a desativar toda a validação de certificação SSL no Thorium. Desativar isso pode ser muito perigoso se o servidor peertube não estiver sob seu controle, pois um ataque man-in-the-middle pode direcionar tráfego para outro servidor sem seu conhecimento. Um atacador pode gravar senhas e outros dados pessoais.</string>
|
||||
<string name="pref_insecure_confirm_yes">Sim</string>
|
||||
<string name="pref_insecure_confirm_no">Não</string>
|
||||
<string name="pref_insecure_confirm_title">Aviso!</string>
|
||||
<string name="server_book_add_save_button">Salvar</string>
|
||||
<string name="pref_title_accept_insecure">Desativar check do certificado SSL</string>
|
||||
<string name="pref_description_accept_insecure">Ignorar conexões não seguras. Use isto apenas se você conhece o servidor ao qual está se conectando. Requer o reinício do app.</string>
|
||||
</resources>
|
|
@ -360,4 +360,5 @@
|
|||
<string name="pref_insecure_confirm_title">Внимание!</string>
|
||||
<string name="pref_description_accept_insecure">Игнорировать незащищенные соединения. Используйте только если знаете сервер к которому подключаетесь. Требуется перезапуск приложения.</string>
|
||||
<string name="pref_insecure_confirm_message">"Вы собираетесь отключить валидацию всех SSL сертификатов в Thorium. Это может быть очень опасно если peertube сервер вами не контролируется, потому что \"атака посредника\" может направить трафик на другой сервер. Злоумышленник может записывать пароли и другие личные данные."</string>
|
||||
<string name="server_book_add_save_button">Сохранить</string>
|
||||
</resources>
|
|
@ -369,4 +369,5 @@
|
|||
<string name="settings_activity_advanced_category_title">Gelişmiş</string>
|
||||
<string name="pref_title_accept_insecure">SSL Sertifika Denetimini Devre Dışı Bırak</string>
|
||||
<string name="pref_description_accept_insecure">Güvenli olmayan bağlantıları yok sayın. Bunu yalnızca bağlandığınız sunucuyu biliyorsanız kullanın. Uygulamanın yeniden başlatılmasını gerektirir.</string>
|
||||
<string name="server_book_add_save_button">Kaydet</string>
|
||||
</resources>
|
|
@ -323,7 +323,7 @@
|
|||
<string name="title_activity_url_video_play">UrlVideoPlayActivity</string>
|
||||
<string name="video_row_account_avatar">Аватар облікового запису</string>
|
||||
<string name="video_row_video_thumbnail">Ескіз відео</string>
|
||||
<string name="meta_data_views">" Перегляди"</string>
|
||||
<string name="meta_data_views">" переглядів"</string>
|
||||
<string name="bottom_nav_title_subscriptions">Підписки</string>
|
||||
<string name="bottom_nav_title_local">Локальне</string>
|
||||
<string name="bottom_nav_title_recent">Нещодавнє</string>
|
||||
|
@ -354,4 +354,5 @@
|
|||
<string name="pref_insecure_confirm_title">Увага!</string>
|
||||
<string name="pref_insecure_confirm_message">Ви збираєтеся вимкнути всі перевірки сертифікатів SSL у Thorium. Це може бути дуже небезпечно якщо ви не контролюєте сервер peertube, оскільки атака «людина посередині» може направити трафік на інший сервер без вашого відома. Зловмисник може записувати паролі та інші особисті дані.</string>
|
||||
<string name="settings_activity_advanced_category_title">Додатково</string>
|
||||
<string name="server_book_add_save_button">Зберегти</string>
|
||||
</resources>
|
|
@ -354,4 +354,5 @@
|
|||
<string name="settings_activity_advanced_category_title">進階</string>
|
||||
<string name="pref_title_accept_insecure">停用 SSL 憑證檢查</string>
|
||||
<string name="pref_description_accept_insecure">忽略不安全的連線。僅在您了解您要連線的伺服器時才使用此選項。需要重新啟動應用程式。</string>
|
||||
<string name="server_book_add_save_button">儲存</string>
|
||||
</resources>
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
<string name="pref_accept_insecure" translatable="false">pref_accept_insecure</string>
|
||||
|
||||
<string name ="pref_clear_history_key" translatable="false">pref_clear_history</string>
|
||||
<!-- defaults -->
|
||||
<string name="pref_default_api_base_url" formatted="false" translatable="false">https://troll.tv</string>
|
||||
<string name="app_default_theme" translatable="false">AppTheme.BLUE</string>
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
app:iconSpaceReserved="false"/>
|
||||
|
||||
<MultiSelectListPreference
|
||||
app:defaultValue="@array/empty_array"
|
||||
app:entries="@array/languageArray"
|
||||
app:entryValues="@array/languageValues"
|
||||
app:key="@string/pref_video_language_key"
|
||||
|
@ -84,6 +85,13 @@
|
|||
app:title="@string/pref_title_accept_insecure"
|
||||
app:iconSpaceReserved="false"/>
|
||||
|
||||
<Preference
|
||||
app:title="@string/clear_search_history"
|
||||
app:key="@string/pref_clear_history_key"
|
||||
app:summary="@string/clear_search_history_prompt"
|
||||
app:iconSpaceReserved="false"/>
|
||||
/>
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory app:title="@string/settings_activity_about_category_title" app:iconSpaceReserved="false">
|
||||
|
|
|
@ -9,7 +9,7 @@ buildscript {
|
|||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:4.1.1'
|
||||
classpath 'com.android.tools.build:gradle:4.1.2'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
- Making X in pip mode stop background audio properly (@dhk2)
|
||||
- Adding clear search history option to settings menu (@dhk2)
|
||||
- Fix no language selected defaults to all video languages
|
||||
- Updated icon library
|
||||
- Added buffering indicator to video playback
|
||||
- Fixed blank video issues on servers offering 0p video.
|
||||
- Updated translations
|
|
@ -0,0 +1,5 @@
|
|||
- ilk başlangıçta öntanımlı uygulama dili düzeltildi (@kosharskiy)
|
||||
- Ayarlar ekranı uk ve ru dilleri çevirileri (@kosharskiy)
|
||||
- app/build.gradle dosyası temizlendi (@kosharskiy)
|
||||
- video üst verisi görüntüleme sorunu düzeltildi (@kosharskiy)
|
||||
- çeviriler güncellendi
|
|
@ -0,0 +1,2 @@
|
|||
- Sunucu defterinde sunucu düzenleme uygulandı (@kosharskiy)
|
||||
- Çeviriler güncellendi
|
|
@ -1,7 +1,7 @@
|
|||
- додано підтримку перенаправлення гіпертексту в опис (@freeboub)
|
||||
- різні виправлення збоїв (@freeboub)
|
||||
- уникайте звз під час виходу з програми через кнопку спільного доступу (@freeboub)
|
||||
- Додайно можливість фільтрувати список серверів (@freeboub)
|
||||
- Додано можливість фільтрувати список серверів (@freeboub)
|
||||
- Управління помилками Refactor Toast для розділення помилки мережі (@freeboub)
|
||||
- збереження співвідношення сторін відео для зображення в зображенні (@freeboub)
|
||||
- панель навігації не відновлювалась після виходу з альбомного режиму (@freeboub)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
- виправлено типову мову першого запуску застосунку (@kosharskiy)
|
||||
- Налаштування перекладів екрана uk і ru мов (@kosharskiy)
|
||||
- очищення файлу app/build.gradle (@kosharskiy)
|
||||
- виправлено проблему показу метаданих відео (@kosharskiy)
|
||||
- оновлено переклади
|
|
@ -0,0 +1,2 @@
|
|||
- Реалізовано редагування сервера в книзі серверів (@kosharskiy)
|
||||
- Оновлено переклади
|
|
@ -1,4 +1,4 @@
|
|||
Thorium - це клієнт PeerTube, який може під'єднуватися до будь-якого сервера peertube, що працює версії v1.1.0-alpha.2 або новіших.
|
||||
Thorium — це клієнт PeerTube, який може під'єднуватися до будь-якого сервера peertube, що працює на версії v1.1.0-alpha.2 або новіших.
|
||||
|
||||
PeerTube - це об'єднана (ActivityPub) платформа для потокового відео, що використовує P2P (BitTorrent) безпосередньо у браузері. Додаткові відомості та перелік серверів ви знайдете за адресою https://joinpeertube.org/ .
|
||||
|
||||
|
@ -6,7 +6,7 @@ PeerTube - це об'єднана (ActivityPub) платформа для пот
|
|||
|
||||
Поточні функції:
|
||||
- Під'єднання до будь-якого сервера PeerTube
|
||||
- Торрент-відео або пряме відтворення
|
||||
- Торент-відео або пряме відтворення
|
||||
- Пошук у PeerTube
|
||||
- Завантажити / Поділитися відео
|
||||
- Теми / Темний режим
|
||||
|
@ -14,8 +14,8 @@ PeerTube - це об'єднана (ActivityPub) платформа для пот
|
|||
- Повноекранне відтворення в альбомному режимі
|
||||
- Швидкість відтворення
|
||||
- Фільтрувати вміст NSFW
|
||||
- Аутентифікація / Вхід
|
||||
- Вподобати / не подобається відео
|
||||
- Автентифікація / Вхід
|
||||
- Вподобати/не подобається відео
|
||||
|
||||
Скоро буде:
|
||||
- Коментувати відео
|
||||
|
@ -24,7 +24,7 @@ PeerTube - це об'єднана (ActivityPub) платформа для пот
|
|||
- Звіт про відео
|
||||
|
||||
Дозволи:
|
||||
- Доступ до сховища, необхідний для завантаження торрента або завантаження відео.
|
||||
- Доступ до сховища, необхідний для завантаження торента або завантаження відео.
|
||||
|
||||
Ліцензовано під загальною публічною ліцензією GNU Affero v3.0
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
Thorium - неофіційний програвач PeerTube
|
||||
Thorium — неофіційний програвач PeerTube
|
||||
|
|
|
@ -1 +1 @@
|
|||
Thorium неоф. клієнт PeerTube
|
||||
Thorium — неофіційний клієнт PeerTube
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
- 修復第一次啟動時的預設應用程式語言 (@kosharskiy)
|
||||
- 英式英語與俄語的設定畫面翻譯 (@kosharskiy)
|
||||
- 清理 app/build.gradle 檔案 (@kosharskiy)
|
||||
- 已修復影片詮釋資料顯示問題 (@kosharskiy)
|
||||
- 更新翻譯
|
|
@ -0,0 +1,2 @@
|
|||
- 在伺服器手冊中實作編輯伺服器 (@kosharskiy)
|
||||
- 更新翻譯
|
Loading…
Reference in New Issue