Merge pull request #200 from sschueller/develop

Version 1.0.42
This commit is contained in:
Stefan Schüller 2020-07-04 20:58:29 +02:00 committed by GitHub
commit 3933f79bda
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 478 additions and 119 deletions

View File

@ -1,3 +1,11 @@
### Version 1.0.42 Tag: v1.0.42 (2020-07-04)
* Added appbar at the top of the SettingsActivity (@Poslovitch)
* Improved and added some French translations (@Poslovitch)
* Removed translations for untranslatable strings (@Poslovitch)
* Add stop button to expanded notification, and stop and switch to audio in video window (@dhk2)
* More data in Server search
* VideoList timestamp fix
### Version 1.0.41 Tag: v1.0.41 (2020-06-28)
* Floating window player controls fix (@dhk2)
* Updated app icons

View File

@ -6,8 +6,8 @@ android {
applicationId "net.schueller.peertube"
minSdkVersion 21
targetSdkVersion 29
versionCode 1041
versionName "1.0.41"
versionCode 1042
versionName "1.0.42"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
ext {
libVersions = [
@ -62,6 +62,12 @@ android {
implementation "com.google.android.exoplayer:exoplayer-smoothstreaming:$libVersions.exoplayer"
implementation "com.google.android.exoplayer:extension-mediasession:$libVersions.exoplayer"
// date formatter
implementation 'org.ocpsoft.prettytime:prettytime:4.0.4.Final'
// Version comparison
implementation 'org.apache.maven:maven-artifact:3.5.0'
// testing
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'

View File

@ -38,12 +38,25 @@ public class SettingsActivity extends CommonActivity {
.beginTransaction()
.replace(R.id.settings, new SettingsFragment())
.commit();
// Attaching the layout to the toolbar object
Toolbar toolbar = findViewById(R.id.tool_bar_settings);
// Setting toolbar as the ActionBar with setSupportActionBar() call
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_baseline_close_24);
}
}
@Override
public boolean onSupportNavigateUp() {
finish(); // close this activity as oppose to navigating up
return false;
}
public static class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {

View File

@ -21,11 +21,16 @@ package net.schueller.peertube.activity;
import android.annotation.SuppressLint;
import android.app.AppOpsManager;
import android.app.PendingIntent;
import android.app.PictureInPictureParams;
import android.app.RemoteAction;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.drawable.Icon;
import android.os.Build;
import android.os.Bundle;
@ -49,12 +54,18 @@ import net.schueller.peertube.fragment.VideoMetaDataFragment;
import net.schueller.peertube.fragment.VideoPlayerFragment;
import net.schueller.peertube.service.VideoPlayerService;
import java.util.ArrayList;
import java.util.Objects;
import androidx.fragment.app.FragmentManager;
//import static net.schueller.peertube.helper.Constants.BACKGROUND_PLAY_PREF_KEY;
import static com.google.android.exoplayer2.ui.PlayerNotificationManager.ACTION_PAUSE;
import static com.google.android.exoplayer2.ui.PlayerNotificationManager.ACTION_PLAY;
import static com.google.android.exoplayer2.ui.PlayerNotificationManager.ACTION_STOP;
import static net.schueller.peertube.helper.Constants.BACKGROUND_AUDIO;
import static net.schueller.peertube.helper.Constants.DEFAULT_THEME;
import static net.schueller.peertube.helper.Constants.THEME_PREF_KEY;
@ -62,7 +73,108 @@ public class VideoPlayActivity extends AppCompatActivity {
private static final String TAG = "VideoPlayActivity";
private static boolean floatMode = false;
private static final int REQUEST_CODE = 101;
private BroadcastReceiver receiver;
//This can only be called when in entering pip mode which can't happen if the device doesn't support pip mode.
@SuppressLint("NewApi")
public void makePipControls() {
FragmentManager fragmentManager = getSupportFragmentManager();
VideoPlayerFragment videoPlayerFragment = (VideoPlayerFragment) fragmentManager.findFragmentById(R.id.video_player_fragment);
ArrayList<RemoteAction> actions = new ArrayList<>();
Intent actionIntent = new Intent(BACKGROUND_AUDIO);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), REQUEST_CODE, actionIntent, 0);
@SuppressLint({"NewApi", "LocalSuppress"}) Icon icon = Icon.createWithResource(getApplicationContext(), android.R.drawable.stat_sys_speakerphone);
@SuppressLint({"NewApi", "LocalSuppress"}) RemoteAction remoteAction = new RemoteAction(icon, "close pip", "from pip window custom command", pendingIntent);
actions.add(remoteAction);
actionIntent = new Intent(ACTION_STOP);
pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), REQUEST_CODE, actionIntent, 0);
icon = Icon.createWithResource(getApplicationContext(), com.google.android.exoplayer2.ui.R.drawable.exo_notification_stop);
remoteAction = new RemoteAction(icon, "play", "stop the media", pendingIntent);
actions.add(remoteAction);
if (videoPlayerFragment.isPaused()){
Log.e(TAG,"setting actions with play button");
actionIntent = new Intent(ACTION_PLAY);
pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), REQUEST_CODE, actionIntent, 0);
icon = Icon.createWithResource(getApplicationContext(), com.google.android.exoplayer2.ui.R.drawable.exo_notification_play);
remoteAction = new RemoteAction(icon, "play", "play the media", pendingIntent);
actions.add(remoteAction);
} else {
Log.e(TAG,"setting actions with pause button");
actionIntent = new Intent(ACTION_PAUSE);
pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), REQUEST_CODE, actionIntent, 0);
icon = Icon.createWithResource(getApplicationContext(), com.google.android.exoplayer2.ui.R.drawable.exo_notification_pause);
remoteAction = new RemoteAction(icon, "pause", "pause the media", pendingIntent);
actions.add(remoteAction);
}
//add custom actions to pip window
PictureInPictureParams params =
new PictureInPictureParams.Builder()
.setActions(actions)
.build();
setPictureInPictureParams(params);
}
public void changedToPipMode() {
FragmentManager fragmentManager = getSupportFragmentManager();
VideoPlayerFragment videoPlayerFragment = (VideoPlayerFragment) fragmentManager.findFragmentById(R.id.video_player_fragment);
videoPlayerFragment.showControls(false);
//create custom actions
makePipControls();
//setup receiver to handle customer actions
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_STOP);
filter.addAction(ACTION_PAUSE);
filter.addAction(ACTION_PLAY);
filter.addAction((BACKGROUND_AUDIO));
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(ACTION_PAUSE)) {
videoPlayerFragment.pauseVideo();
makePipControls();
}
if (action.equals(ACTION_PLAY)) {
videoPlayerFragment.unPauseVideo();
makePipControls();
}
if (action.equals(BACKGROUND_AUDIO)) {
unregisterReceiver(receiver);
finish();
}
if (action.equals(ACTION_STOP)) {
unregisterReceiver(receiver);
finishAndRemoveTask();
}
}
};
registerReceiver(receiver, filter);
Log.v(TAG, "switched to pip ");
floatMode=true;
videoPlayerFragment.showControls(false);
}
public void changedToNormalMode(){
FragmentManager fragmentManager = getSupportFragmentManager();
VideoPlayerFragment videoPlayerFragment = (VideoPlayerFragment) fragmentManager.findFragmentById(R.id.video_player_fragment);
videoPlayerFragment.showControls(true);
if (receiver != null) {
unregisterReceiver(receiver);
}
Log.v(TAG,"switched to normal");
floatMode=false;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -357,9 +469,11 @@ public class VideoPlayActivity extends AppCompatActivity {
VideoPlayerFragment videoPlayerFragment = (VideoPlayerFragment) fragmentManager.findFragmentById(R.id.video_player_fragment);
if (isInPictureInPictureMode) {
changedToPipMode();
Log.v(TAG,"switched to pip ");
videoPlayerFragment.useController(false);
} else {
changedToNormalMode();
Log.v(TAG,"switched to normal");
videoPlayerFragment.useController(true);
}

View File

@ -160,7 +160,7 @@ public class ChannelAdapter extends RecyclerView.Adapter<ChannelAdapter.AccountV
AccountViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
name = itemView.findViewById(R.id.sl_row_name);
thumb = itemView.findViewById(R.id.thumb);
avatar = itemView.findViewById(R.id.avatar);
videoMeta = itemView.findViewById(R.id.videoMeta);

View File

@ -17,13 +17,11 @@
*/
package net.schueller.peertube.adapter;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
@ -38,6 +36,8 @@ import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
import static android.app.Activity.RESULT_OK;
@ -74,20 +74,38 @@ public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.AccountVie
R.string.server_selection_signup_allowed_yes :
R.string.server_selection_signup_allowed_no
)));
holder.shortDescription.setText(serverList.get(position).getShortDescription());
holder.videoTotals.setText(
activity.getString(R.string.server_selection_video_totals,
serverList.get(position).getTotalVideos().toString(),
serverList.get(position).getTotalLocalVideos().toString()
));
// don't show description if it hasn't been changes from the default
if (!activity.getString(R.string.peertube_instance_search_default_description).equals(serverList.get(position).getShortDescription())) {
holder.shortDescription.setText(serverList.get(position).getShortDescription());
holder.shortDescription.setVisibility(View.VISIBLE);
} else {
holder.shortDescription.setVisibility(View.GONE);
}
DefaultArtifactVersion serverVersion = new DefaultArtifactVersion(serverList.get(position).getVersion());
// at least version 2.2
DefaultArtifactVersion minVersion22 = new DefaultArtifactVersion("2.2.0");
if (serverVersion.compareTo(minVersion22) >= 0) {
// show NSFW Icon
if (serverList.get(position).getNSFW()) {
holder.isNSFW.setVisibility(View.VISIBLE);
}
}
// select server
holder.itemView.setOnClickListener(v -> {
// SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(activity);
// SharedPreferences.Editor editor = sharedPref.edit();
String serverUrl = APIUrlHelper.cleanServerUrl(serverList.get(position).getHost());
// editor.putString("pref_api_base", serverUrl);
// editor.apply();
//
//
Toast.makeText(activity, activity.getString(R.string.server_selection_set_server, serverUrl), Toast.LENGTH_LONG).show();
Intent intent = new Intent();
@ -138,17 +156,19 @@ public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.AccountVie
return serverList.size();
}
class AccountViewHolder extends RecyclerView.ViewHolder {
static class AccountViewHolder extends RecyclerView.ViewHolder {
TextView name, host, signupAllowed, shortDescription;
TextView name, host, signupAllowed, shortDescription, videoTotals;
ImageView isNSFW;
AccountViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
host = itemView.findViewById(R.id.host);
signupAllowed = itemView.findViewById(R.id.signupAllowed);
shortDescription = itemView.findViewById(R.id.shortDescription);
name = itemView.findViewById(R.id.sl_row_name);
host = itemView.findViewById(R.id.sl_row_host);
signupAllowed = itemView.findViewById(R.id.sl_row_signup_allowed);
shortDescription = itemView.findViewById(R.id.sl_row_short_description);
isNSFW = itemView.findViewById(R.id.sl_row_is_nsfw);
videoTotals = itemView.findViewById(R.id.sl_row_video_totals);
}
}

View File

@ -176,7 +176,7 @@ public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.VideoViewHol
VideoViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
name = itemView.findViewById(R.id.sl_row_name);
thumb = itemView.findViewById(R.id.thumb);
avatar = itemView.findViewById(R.id.avatar);
videoMeta = itemView.findViewById(R.id.videoMeta);

View File

@ -172,7 +172,7 @@ public class VideoMetaDataFragment extends Fragment {
// title / name
TextView videoName = activity.findViewById(R.id.name);
TextView videoName = activity.findViewById(R.id.sl_row_name);
videoName.setText(video.getName());
// created at / views

View File

@ -268,6 +268,17 @@ public class VideoPlayerFragment extends Fragment implements VideoRendererEventL
mService.player.setPlayWhenReady(!mService.player.getPlayWhenReady());
}
}
public void unPauseVideo() {
if (mBound) {
mService.player.setPlayWhenReady(true);
}
}
public boolean isPaused(){
return !mService.player.getPlayWhenReady();
}
public void showControls(boolean value){
simpleExoPlayerView.setUseController(value);
}
public void stopVideo() {
if (mBound) {

View File

@ -21,4 +21,5 @@ public class Constants {
public static final String THEME_PREF_KEY = "pref_theme";
public static final String DEFAULT_THEME = "AppTheme.BLUE";
public static final String BACKGROUND_PLAY_PREF_KEY = "pref_background_play";
public static final String BACKGROUND_AUDIO = "BACKGROUND_AUDIO";
}

View File

@ -18,20 +18,30 @@
package net.schueller.peertube.helper;
import android.content.Context;
import android.text.format.DateUtils;
import net.schueller.peertube.R;
import java.time.Duration;
import java.time.Period;
import org.ocpsoft.prettytime.PrettyTime;
import java.util.Date;
import java.util.Locale;
public class MetaDataHelper {
public static String getMetaString(Date getCreatedAt, Integer viewCount, Context context) {
return DateUtils.
getRelativeTimeSpanString(getCreatedAt.getTime()).toString() +
// Compatible with SDK 21+
String currentLanguage = Locale.getDefault().getDisplayLanguage();
PrettyTime p = new PrettyTime(currentLanguage);
String relativeTime = p.format(new Date(getCreatedAt.getTime()));
return (relativeTime +
context.getResources().getString(R.string.meta_data_seperator) +
viewCount + context.getResources().getString(R.string.meta_data_views);
viewCount + context.getResources().getString(R.string.meta_data_views));
}
public static String getOwnerString(String accountName, String serverHost, Context context) {

View File

@ -17,6 +17,9 @@
*/
package net.schueller.peertube.model;
import java.util.ArrayList;
import java.util.Date;
public class Server {
private Integer id;
@ -26,16 +29,20 @@ public class Server {
private String version;
private Boolean signupAllowed;
private Double userVideoQuota;
private Category category;
private ArrayList<String> languages;
private Boolean autoBlacklistUserVideosEnabled;
private String defaultNSFWPolicy;
private Boolean isNSFW;
private Integer totalUsers;
private Integer totalVideos;
private Integer totalLocalVideos;
private Integer totalInstanceFollowers;
private Integer totalInstanceFollowing;
private Boolean supportsIPv6;
private String country;
private Integer health;
private Date createdAt;
public Integer getId() {
return id;
@ -93,6 +100,46 @@ public class Server {
this.userVideoQuota = userVideoQuota;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public ArrayList<String> getLanguages() {
return languages;
}
public void setLanguages(ArrayList<String> languages) {
this.languages = languages;
}
public Boolean getAutoBlacklistUserVideosEnabled() {
return autoBlacklistUserVideosEnabled;
}
public void setAutoBlacklistUserVideosEnabled(Boolean autoBlacklistUserVideosEnabled) {
this.autoBlacklistUserVideosEnabled = autoBlacklistUserVideosEnabled;
}
public String getDefaultNSFWPolicy() {
return defaultNSFWPolicy;
}
public void setDefaultNSFWPolicy(String defaultNSFWPolicy) {
this.defaultNSFWPolicy = defaultNSFWPolicy;
}
public Boolean getNSFW() {
return isNSFW;
}
public void setNSFW(Boolean NSFW) {
isNSFW = NSFW;
}
public Integer getTotalUsers() {
return totalUsers;
}
@ -156,4 +203,12 @@ public class Server {
public void setHealth(Integer health) {
this.health = health;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
}

View File

@ -64,6 +64,7 @@ import net.schueller.peertube.model.Video;
import static android.media.session.PlaybackState.ACTION_PAUSE;
import static android.media.session.PlaybackState.ACTION_PLAY;
import static com.google.android.exoplayer2.ui.PlayerNotificationManager.ACTION_STOP;
import static net.schueller.peertube.activity.VideoListActivity.EXTRA_VIDEOID;
public class VideoPlayerService extends Service {
@ -107,6 +108,7 @@ public class VideoPlayerService extends Service {
if (playbackState == ACTION_PLAY) { // this means that play is available, hence the audio is paused or stopped
Log.v(TAG, "ACTION_PAUSE: " + playbackState);
unregisterReceiver(myNoisyAudioStreamReceiver);
myNoisyAudioStreamReceiver=null;
}
}
} );
@ -243,6 +245,7 @@ public class VideoPlayerService extends Service {
// don't show skip buttons in notification
playerNotificationManager.setUseNavigationActions(false);
playerNotificationManager.setUseStopAction(true);
playerNotificationManager.setNotificationListener(
new PlayerNotificationManager.NotificationListener() {
@ -254,9 +257,18 @@ public class VideoPlayerService extends Service {
@Override
public void onNotificationCancelled(int notificationId) {
Log.v(TAG, "onNotificationCancelled...");
stopForeground(true);
Intent killFloat = new Intent(ACTION_STOP);
sendBroadcast(killFloat);
/*
Intent killFloat = new Intent(BROADCAST_ACTION);
Intent killFloatingWindow = new Intent(getApplicationContext(),VideoPlayActivity.class);
killFloatingWindow.putExtra("killFloat",true);
startActivity(killFloatingWindow);
// TODO: only kill the notification if we no longer have a bound activity
stopForeground(true);
*/
}
}
);

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z"/>
</vector>

View File

@ -1,6 +1,21 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/tool_bar_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="4dp" />
</com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:id="@+id/settings"

View File

@ -16,7 +16,7 @@
android:paddingEnd="12dp" />
<TextView
android:id="@+id/name"
android:id="@+id/sl_row_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
@ -31,7 +31,7 @@
android:id="@+id/videoMeta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/name"
android:layout_below="@+id/sl_row_name"
android:layout_alignParentEnd="true"
android:layout_marginStart="6dp"
android:layout_marginTop="0dp"
@ -58,7 +58,7 @@
android:layout_marginStart="-16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="0dp"
android:layout_toEndOf="@+id/name"
android:layout_toEndOf="@+id/sl_row_name"
android:background="@null"
android:contentDescription="@string/descr_overflow_button"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Caption" />

View File

@ -50,7 +50,7 @@
android:paddingEnd="12dp" />
<TextView
android:id="@+id/name"
android:id="@+id/sl_row_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/thumb"
@ -66,7 +66,7 @@
android:id="@+id/videoMeta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/name"
android:layout_below="@+id/sl_row_name"
android:layout_marginStart="6dp"
android:layout_marginTop="0dp"
android:layout_marginEnd="6dp"
@ -93,7 +93,7 @@
android:layout_marginTop="16dp"
android:layout_marginStart="-16dp"
android:layout_marginEnd="0dp"
android:layout_toEndOf="@+id/name"
android:layout_toEndOf="@+id/sl_row_name"
android:background="@null"
android:contentDescription="@string/descr_overflow_button"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Caption"

View File

@ -50,7 +50,7 @@
android:paddingEnd="12dp" />
<TextView
android:id="@+id/name"
android:id="@+id/sl_row_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/thumb"
@ -66,7 +66,7 @@
android:id="@+id/videoMeta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/name"
android:layout_below="@+id/sl_row_name"
android:layout_marginStart="6dp"
android:layout_marginTop="0dp"
android:layout_marginEnd="6dp"
@ -93,7 +93,7 @@
android:layout_marginTop="16dp"
android:layout_marginStart="-16dp"
android:layout_marginEnd="0dp"
android:layout_toEndOf="@+id/name"
android:layout_toEndOf="@+id/sl_row_name"
android:background="@null"
android:contentDescription="@string/descr_overflow_button"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Caption"

View File

@ -50,7 +50,7 @@
android:paddingEnd="12dp" />
<TextView
android:id="@+id/name"
android:id="@+id/sl_row_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/thumb"
@ -66,7 +66,7 @@
android:id="@+id/videoMeta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/name"
android:layout_below="@+id/sl_row_name"
android:layout_marginStart="6dp"
android:layout_marginTop="0dp"
android:layout_marginEnd="6dp"
@ -93,7 +93,7 @@
android:layout_marginTop="16dp"
android:layout_marginStart="-16dp"
android:layout_marginEnd="0dp"
android:layout_toEndOf="@+id/name"
android:layout_toEndOf="@+id/sl_row_name"
android:background="@null"
android:contentDescription="@string/descr_overflow_button"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Caption"

View File

@ -7,15 +7,18 @@
card_view:cardElevation="0dp"
card_view:cardUseCompatPadding="true">
<RelativeLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:padding="12dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="12dp">
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:id="@+id/sl_row_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
@ -24,7 +27,7 @@
android:textAppearance="@style/Base.TextAppearance.AppCompat.Headline" />
<TextView
android:id="@+id/host"
android:id="@+id/sl_row_host"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
@ -33,7 +36,7 @@
android:textAppearance="@style/Base.TextAppearance.AppCompat.Subhead" />
<TextView
android:id="@+id/signupAllowed"
android:id="@+id/sl_row_signup_allowed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
@ -43,14 +46,45 @@
<TextView
android:id="@+id/shortDescription"
android:id="@+id/sl_row_short_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginEnd="24dp"
android:paddingTop="0dp"
android:visibility="gone"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Subhead" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="0dp"
android:layout_marginStart="6dp"
android:layout_marginEnd="24dp"
android:orientation="horizontal">
<TextView
android:id="@+id/sl_row_video_totals"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Subhead" />
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/sl_row_is_nsfw"
android:src="@drawable/ic_baseline_remove_red_eye_24"
android:visibility="gone"
android:layout_width="24dp"
android:layout_alignParentEnd="true"
android:layout_height="wrap_content"
android:contentDescription="@string/server_selection_nsfw_instance" />
</RelativeLayout>
</androidx.cardview.widget.CardView>

View File

@ -3,6 +3,7 @@
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
card_view:cardCornerRadius="0dp"
card_view:cardElevation="0dp"
card_view:contentPadding="0dp"
@ -57,7 +58,7 @@
android:paddingEnd="12dp" />
<TextView
android:id="@+id/name"
android:id="@+id/sl_row_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/thumb"
@ -73,7 +74,7 @@
android:id="@+id/videoMeta"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/name"
android:layout_below="@+id/sl_row_name"
android:layout_marginStart="6dp"
android:layout_marginTop="0dp"
android:layout_marginEnd="6dp"
@ -100,7 +101,7 @@
android:layout_marginTop="16dp"
android:layout_marginStart="-16dp"
android:layout_marginEnd="0dp"
android:layout_toEndOf="@+id/name"
android:layout_toEndOf="@+id/sl_row_name"
android:background="@null"
android:contentDescription="@string/descr_overflow_button"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Caption"

View File

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Thorium</string>
<string name="title_activity_video_play">نشاط تشغيل الفيديو</string>
<string name="title_activity_settings">الإعدادات</string>
<string name="title_activity_login">تسجيل الدخول</string>
<!-- Strings related to login -->
@ -24,13 +22,9 @@
<string name="bottom_nav_title_subscriptions">الإشتراكات</string>
<string name="bottom_nav_title_account">الحساب</string>
<!-- Strings related to Settings -->
<string name="peertube_required_server_version">1.0.0-alpha.7</string>
<string name="pref_default_api_base_url" formatted="false">https://troll.tv</string>
<string name="pref_title_peertube_server">خادوم PeerTube</string>
<!-- Strings related to Video meta data -->
<string name="meta_data_seperator">\u0020-\u0020</string>
<string name="meta_data_views">\u0020 مشاهدات</string>
<string name="meta_data_owner_seperator">\@</string>
<string name="video_row_video_thumbnail">الصورة المصغرة للفيديو</string>
<string name="video_row_account_avatar">الصورة الرمزية للحساب</string>
<string name="pref_title_show_nsfw">عرض NSFW</string>
@ -51,7 +45,6 @@
<string name="no_data_available">لاتوجد نتائج</string>
<string name="descr_overflow_button">المزيد</string>
<string name="menu_share">مشاركة</string>
<string name="playback_channel_name">PeerTube</string>
<string name="invalid_url">الرابط غير صالح.</string>
<string name="pref_title_dark_mode">الوضع الداكن</string>
<string name="pref_description_dark_mode">أعد تشغيل التطبيق لتنشيط الوضع الداكن.</string>

View File

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">Thorium</string>
<string name="title_activity_video_play">VideoPlayActivity</string>
<string name="title_activity_settings">সেটিংস</string>
<string name="title_activity_login">সাইন ইন</string>
<!-- Strings related to login -->
@ -25,13 +23,9 @@
<string name="bottom_nav_title_subscriptions">সাবস্ক্রিপশন</string>
<string name="bottom_nav_title_account">অ্যাকাউন্ট</string>
<!-- Strings related to Settings -->
<string name="peertube_required_server_version" translatable="false">1.0.0-alpha.7</string>
<string name="pref_default_api_base_url" formatted="false" translatable="false">https://troll.tv</string>
<string name="pref_title_peertube_server">পিয়ারটিউব সার্ভার</string>
<!-- Strings related to Video meta data -->
<string name="meta_data_seperator" translatable="false">\u0020-\u0020</string>
<string name="meta_data_views">" দৃষ্ট"</string>
<string name="meta_data_owner_seperator" translatable="false">\@</string>
<string name="video_row_video_thumbnail">ভিডিও থাম্বনেইল</string>
<string name="video_row_account_avatar">অ্যাকাউন্ট অবতার</string>
<string name="pref_title_show_nsfw">নিষিদ্ধ কন্টেন্ট</string>
@ -43,8 +37,8 @@
<string name="pref_description_torrent_player">একটি টরেন্ট স্ট্রিমের মাধ্যমে ভিডিও প্লেব্যাক করুন। এর জন্য স্টোরেজ অনুমতির প্রয়োজন । (আলফা, স্থিতিশীল নয়!)</string>
<string name="pref_title_license">অনুমতিপত্র</string>
<string name="pref_description_license">
\n<b>গাহ্নু অফেরও সাধারণ গণ অনুমতিপত্র সং.৩.</b>
\n
\n<b>গাহ্নু অফেরও সাধারণ গণ অনুমতিপত্র সং.৩.</b>
\n
\nএই শক্তিশালী কপিলেফট লাইসেন্সের অনুমতি এই চুক্তির উপর নির্ভরশীল যে অনুমতিপত্রের দ্বারা আবদ্ধ সকল কাজ ও পরিবর্তনের সোর্স কোড উপলব্ধ করার মাধ্যমে, যার আওতায় পড়ে অনুমতিপত্রের দ্বারা আবদ্ধ কাজের বৃহত্তর অংশ একই অনুমতিপত্রের আওতায় আনার মাধ্যমে। কপিরাইট এবং লাইসেন্স নোটিশ সংরক্ষণ করা আবশ্যক। অবদানকারীগণ তাদের পেটেন্টর অধিকার অবশ্যই দেয়, যখন একটি পরিমার্জিত সংস্করণ ব্যবহার করে একটি পরিসেবা একটি নেটওয়ার্ক দিয়ে দেয়া হয়, সম্পূর্ণ সোর্স কোড এর পরিমার্জিত সংস্করণ উপলব্ধ তৈরি করা আবশ্যক।</string>
<string name="pref_title_version">সংস্করণ</string>
<string name="search_hint">সার্চ পিয়ারটিউব</string>
@ -52,7 +46,6 @@
<string name="no_data_available">ফলাফল নেই</string>
<string name="descr_overflow_button">আরও</string>
<string name="menu_share">শেয়ার</string>
<string name="playback_channel_name" translatable="false">PeerTube</string>
<string name="invalid_url">অবৈধ ইউআরএল।</string>
<string name="pref_title_dark_mode">অন্ধকার মোড</string>
<string name="pref_description_dark_mode">অন্ধকার মোড কার্যকর করার জন্য অ্যাপ্লিকেশন রিস্টার্ট করো।</string>
@ -157,7 +150,7 @@
<string name="ln">লিনগালা</string>
<string name="lt">লিথুনীয়</string>
<string name="jbo">লোজবান</string>
<string name="lu"></string>
<string name="lu">লুবা-কাতাঙ্গা</string>
<string name="lb">লাক্সেমবোর্গীয়</string>
<string name="mk">ম্যাসিডোনিয়</string>
<string name="mg">মালাগাসি</string>
@ -272,15 +265,6 @@
<string name="video_speed_10">Normal</string>
<string name="video_speed_15">১.৫x</string>
<string name="video_speed_20">2x</string>
<string name="video_speed_active_icon" translatable="false">{faw-check}</string>
<string name="video_expand_icon" translatable="false">{faw-expand}</string>
<string name="video_compress_icon" translatable="false">{faw-compress}</string>
<string name="video_more_icon" translatable="false">{faw-ellipsis-v}</string>
<string name="video_thumbs_up_icon" translatable="false">{faw-thumbs-up}</string>
<string name="video_thumbs_down_icon" translatable="false">{faw-thumbs-down}</string>
<string name="video_share_icon" translatable="false">{faw-share}</string>
<string name="video_download_icon" translatable="false">{faw-download}</string>
<string name="video_save_icon" translatable="false">{faw-save}</string>
<string name="pref_title_background_play">ব্যাকগ্রাউন্ড প্লেব্যাক</string>
<string name="pref_description_background_play">সক্রিয় থাকলে ব্যাকগ্রাউন্ডে ভিডিও প্লে করতে থাকবে।</string>
<string name="bottom_nav_title_local">স্থানীয়</string>
@ -298,15 +282,6 @@
<string name="video_meta_button_language">ভাষা</string>
<string name="video_meta_button_tags">Tags</string>
<!-- Constants, Don't translate -->
<string name="pref_token_access" translatable="false">pref_token_access</string>
<string name="pref_token_refresh" translatable="false">pref_token_refresh</string>
<string name="pref_token_expiration" translatable="false">pref_token_expiration</string>
<string name="pref_token_type" translatable="false">pref_token_type</string>
<string name="pref_auth_username" translatable="false">pref_auth_username</string>
<string name="pref_auth_password" translatable="false">pref_auth_password</string>
<string name="video_rating_none" translatable="false">none</string>
<string name="video_rating_like" translatable="false">like</string>
<string name="video_rating_dislike" translatable="false">dislike</string>
<string name="deeppurple">গাঢ় বেগুনি</string>
<string name="action_bar_title_account">অ্যাকাউন্ট</string>
<string name="bottom_nav_title_recent">সাম্প্রতিক</string>
@ -331,4 +306,41 @@
<string name="server_selection_select_a_server">নিচের তালিকা থেকে একটি সার্ভার নিন অথবা সরাসরি একটি সার্ভার দিন।</string>
<string name="video_speed_075">0.75x</string>
<string name="video_speed_125">1.25x</string>
<string name="pref_background_behavior">ব্যাকগ্রউন্ড প্লে এর কনফিগারেশন</string>
<string name="settings_activity_look_and_feel_category_title">লুক এবং ফিল</string>
<string name="server_book_list_has_login">লগইন আছে</string>
<string name="pref_background_audio">পেছনে অডিও স্ট্রিম হিসেবে চালু রাখুন</string>
<string name="settings_activity_about_category_title">সম্পর্কিত</string>
<string name="settings_activity_video_playback_category_title">ভিডিও প্লেব্যাক</string>
<string name="settings_activity_video_list_category_title">ভিডিও এর লিস্ট</string>
<string name="title_activity_me">আকাউন্ট</string>
<string name="title_activity_select_server">সার্ভার পাছন্দ করুন</string>
<string name="server_book_del_alert_msg">আপনি কি এই সার্ভার রিমুভ করতে চান সার্ভার বই থেকে\?</string>
<string name="server_book_del_alert_title">সার্ভার রিমুভ করুন</string>
<string name="title_activity_server_address_book">এড্রেস বই</string>
<string name="server_book_add_add_button">যোগ</string>
<string name="server_book_add_password">পাসওয়ার্ড</string>
<string name="server_book_add_username">ইউজারনেম</string>
<string name="server_book_add_pick_server_button">সার্চ</string>
<string name="server_book_add_server_url">সার্ভার ইউআরএল</string>
<string name="server_book_add_label">লেবেল</string>
<string name="me_help_and_feedback_button">সাহায্য ও মতামত</string>
<string name="me_logout_button">লগ আউট</string>
<string name="server_book_valid_url_is_required">সঠিক ইউ আর এল দরকার</string>
<string name="server_book_label_is_required">সার্ভার লেবেল দরকার</string>
<string name="server_book_no_servers_found">সার্ভার বই খালি আছে</string>
<string name="authentication_login_failed">লগইন সফল হয় নি!</string>
<string name="authentication_login_success">লগইন সফল হয়েছে</string>
<string name="bn_rBD">বাংলা (বাংলাদেশ)</string>
<string name="clear_search_history_prompt">আপনি কি পুরোপুরি সার্চ ইতিহাস মুছে ফেলতে চান\?</string>
<string name="clear_search_history">সার্চ ইতিহাস মুছে ফেলুন</string>
<string name="pref_background_behavior_summary">চালু ভিডিও কি করবে যখন পেছনে যাবে</string>
<string name="settings_permissions_error_float">অ্যান্ড্রয়েড সেটিং এ পিকচার ইন পিকচার পারমিশন বন্ধ আছে এই আয়াপ এ</string>
<string name="settings_api_error_float">অ্যান্ড্রয়েড ভার্সন ভাসমান ভিডিও সাপোর্ট করে</string>
<string name="pref_background_float">ভাসমান উইন্ডো তে ভিডিও চালু রাখুন</string>
<string name="pref_background_stop">সব প্লেব্যাক বন্ধ করুন</string>
<string name="pref_description_language_app">ভাষা পছন্দ করুন অ্যাপ্লিকেশান এর জন্য। রিস্টার্ট করুন পরিবর্তন দেখার জন্য।</string>
<string name="pref_language_app">অ্যাপ্লিকেশান এর ভাষা</string>
<string name="pref_description_back_pause">ভিডিও চলার সময় ব্যাকগ্রাউন্ড প্লে পজ হবে ব্যাক বাটন প্রেস করলে।</string>
<string name="pref_title_back_pause">ব্যাক বাটন এ পজ</string>
</resources>

View File

@ -16,7 +16,6 @@
<string name="bottom_nav_title_subscriptions">Abos</string>
<string name="bottom_nav_title_account">Konto</string>
<string name="pref_title_peertube_server">PeerTube-Server</string>
<string name="title_activity_video_play">VideoPlayActivity</string>
<string name="error_invalid_password">Dieses Passwort ist zu kurz</string>
<string name="error_incorrect_password">Dieses Passwort ist falsch</string>
<string name="action_bar_title_settings">Einstellungen</string>

View File

@ -1,7 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Thorium</string>
<string name="title_activity_video_play">VideoPlayActivity</string>
<string name="title_activity_settings">Paramètres</string>
<string name="title_activity_login">Se connecter</string>
<!-- Strings related to login -->
@ -24,13 +22,9 @@
<string name="bottom_nav_title_subscriptions">Abonnements</string>
<string name="bottom_nav_title_account">Compte</string>
<!-- Strings related to Settings -->
<string name="peertube_required_server_version">1.0.0-alpha.7</string>
<string name="pref_default_api_base_url" formatted="false">https://troll.tv</string>
<string name="pref_title_peertube_server">Serveur Peertube</string>
<!-- Strings related to Video meta data -->
<string name="meta_data_seperator">\u0020-\u0020</string>
<string name="meta_data_views">" vues"</string>
<string name="meta_data_owner_seperator">\@</string>
<string name="video_row_video_thumbnail">Miniature vidéo</string>
<string name="video_row_account_avatar">Avatar du compte</string>
<string name="pref_title_show_nsfw">Contenu pour adultes</string>
@ -49,7 +43,6 @@
<string name="no_data_available">Pas de résultat</string>
<string name="descr_overflow_button">Plus</string>
<string name="menu_share">Partager</string>
<string name="playback_channel_name">PeerTube</string>
<string name="invalid_url">URL invalide.</string>
<string name="pref_title_dark_mode">Mode sombre</string>
<string name="pref_description_dark_mode">Redémarrez lapplication pour que le mode sombre soit activé.</string>
@ -312,7 +305,7 @@
<string name="login_current_server_hint">Serveur actuel</string>
<string name="video_speed_075">0,75×</string>
<string name="video_speed_125">1,25×</string>
<string name="title_activity_server_address_book">Livre d\'adresse</string>
<string name="title_activity_server_address_book">Carnet d\'adresses</string>
<string name="authentication_login_success">Identification réussie</string>
<string name="authentication_login_failed">Identification échouée !</string>
<string name="server_book_list_has_login">a un identifiant</string>
@ -333,4 +326,21 @@
<string name="pref_language_app">Langue de l\'application</string>
<string name="pref_description_back_pause">Mettre la lecture d\'arrière-plan en pause en appuyant sur la touche de retour pendant la lecture de la vidéo.</string>
<string name="pref_title_back_pause">Pause sur le bouton retour</string>
<string name="settings_activity_look_and_feel_category_title">Apparence</string>
<string name="title_activity_settings2">SettingsActivity2</string>
<string name="bn_rBD">Bengalais (Bangladesh)</string>
<string name="settings_activity_about_category_title">À propos</string>
<string name="title_activity_me">Compte</string>
<string name="pref_background_behavior">Paramètres de lecture en fond</string>
<string name="settings_api_error_float">Votre version Android ne supporte pas la lecture de vidéos dans une fenêtre flottante</string>
<string name="settings_permissions_error_float">Le mode Picture-in-Picture est désactivé pour cette applications dans les paramètres Android</string>
<string name="settings_activity_video_playback_category_title">Lecture de vidéos</string>
<string name="pref_background_audio">Continuer en fond sonore</string>
<string name="pref_background_stop">Arrêter de lire la vidéo</string>
<string name="pref_background_float">Continuer dans une fenêtre flottante</string>
<string name="pref_background_behavior_summary">Sélectionner le mode de fonctionnement de la lecture de vidéo lorsque l\'application est mise en arrière-plan</string>
<string name="settings_activity_video_list_category_title">Liste de vidéos</string>
<string name="title_activity_select_server">Sélectionner un serveur</string>
<string name="server_book_del_alert_title">Retirer un serveur</string>
<string name="server_book_del_alert_msg">Voulez-vous vraiment retirer ce serveur de votre carnet d\'adresses ?</string>
</resources>

View File

@ -61,7 +61,6 @@
<string name="account_about_description">Beskrivelse:</string>
<string name="account_about_joined">Tok del:</string>
<string name="api_error">Noe gikk galt, prøv igjen senere.</string>
<string name="title_activity_video_play">VideoPlayActivity</string>
<string name="permission_rationale">Innvilg kontakttilgang for fullføring av e-postadresser.</string>
<string name="bottom_nav_title_trending">Populært</string>
<string name="meta_data_views">" visninger"</string>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title_activity_video_play">VideoPlayActivity</string>
<string name="title_activity_settings">Instellingen</string>
<string name="title_activity_login">Inloggen</string>
<string name="prompt_server">Server</string>
@ -323,4 +322,21 @@
<string name="pref_language_app">App-taal</string>
<string name="pref_description_back_pause">Pauzeer het afspelen als er op de terugknop wordt gedrukt.</string>
<string name="pref_title_back_pause">Pauzeren na drukken op terugknop</string>
<string name="settings_activity_look_and_feel_category_title">Uiterlijk</string>
<string name="settings_activity_about_category_title">Over</string>
<string name="settings_activity_video_playback_category_title">Video afspelen</string>
<string name="settings_activity_video_list_category_title">Videolijst</string>
<string name="title_activity_settings2">SettingsActivity2</string>
<string name="title_activity_me">Account</string>
<string name="title_activity_select_server">Server kiezen</string>
<string name="server_book_del_alert_msg">Weet je zeker dat je deze server wilt verwijderen uit het adresboek\?</string>
<string name="server_book_del_alert_title">Server verwijderen</string>
<string name="bn_rBD">Bengaals (Bangladesh)</string>
<string name="pref_background_behavior_summary">Hoe een video moet worden afgespeeld op de achtergrond</string>
<string name="settings_permissions_error_float">Picture-in-picturemachtiging is niet afgegeven voor deze app in de Android-instellingen</string>
<string name="settings_api_error_float">Deze Android-versie ondersteunt geen zwevende video\'s</string>
<string name="pref_background_behavior">Afspelen op achtergrond</string>
<string name="pref_background_float">Video afspelen in zwevend venster</string>
<string name="pref_background_stop">Afspelen stoppen</string>
<string name="pref_background_audio">Audio afspelen op achtergrond</string>
</resources>

View File

@ -282,7 +282,6 @@
<string name="account_about_description">Beskrivning:</string>
<string name="account_about_joined">Gick med:</string>
<string name="api_error">Någonting gick snett, försök gärna igen om en stund!</string>
<string name="title_activity_video_play">VideoPlayActivity</string>
<string name="permission_rationale">Ge åtkomst till kontakter för komplettering av e-postadresser.</string>
<string name="title_activity_url_video_play">UrlVideoPlayActivity</string>
<string name="pref_description_license">

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title_activity_video_play">İzleti Oynatma Etkinliği</string>
<string name="title_activity_settings">Ayarlar</string>
<string name="title_activity_login">Oturum aç</string>
<!-- Strings related to login -->
@ -24,13 +23,9 @@
<string name="bottom_nav_title_subscriptions">Abonelikler</string>
<string name="bottom_nav_title_account">Hesap</string>
<!-- Strings related to Settings -->
<string name="peertube_required_server_version" translatable="false">1.0.0-alpha.7</string>
<string name="pref_default_api_base_url" formatted="false" translatable="false">https://troll.tv</string>
<string name="pref_title_peertube_server">PeerTube Sunucusu</string>
<!-- Strings related to Video meta data -->
<string name="meta_data_seperator" translatable="false">\u0020-\u0020</string>
<string name="meta_data_views">" Görüntüleme"</string>
<string name="meta_data_owner_seperator" translatable="false">\@</string>
<string name="video_row_video_thumbnail">İzleti Küçük Resmi</string>
<string name="video_row_account_avatar">Hesap Resmi</string>
<string name="pref_title_show_nsfw">Ahlaksız İçerik</string>
@ -48,7 +43,6 @@
<string name="no_data_available">Sonuç yok</string>
<string name="descr_overflow_button">Daha</string>
<string name="menu_share">Paylaş</string>
<string name="playback_channel_name" translatable="false">PeerTube</string>
<string name="invalid_url">Geçersiz bağlantı.</string>
<string name="pref_title_dark_mode">Karanlık Kipi</string>
<string name="pref_description_dark_mode">Karanlık kipin etkinleşmesi için uygulamayı yeniden başlatın.</string>
@ -281,7 +275,7 @@
<string name="video_share_icon" translatable="false">{faw-share}</string>
<string name="video_download_icon" translatable="false">{faw-download}</string>
<string name="video_save_icon" translatable="false">{faw-save}</string>
<string name="pref_title_background_play">Arkaplanda Oynatma</string>
<string name="pref_title_background_play">Arka Planda Oynatma</string>
<string name="pref_description_background_play">Etkinleştirilirse, arka planda izleti oynatmaya devam eder.</string>
<string name="bottom_nav_title_local">Yerel</string>
<string name="title_activity_account">Hesap</string>
@ -300,15 +294,6 @@
<string name="menu_video_options_playback_speed">Oynatma hızı</string>
<string name="menu_video_options_quality">Kalite</string>
<!-- Constants, Don't translate -->
<string name="pref_token_access" translatable="false">pref_token_access</string>
<string name="pref_token_refresh" translatable="false">pref_token_refresh</string>
<string name="pref_token_expiration" translatable="false">pref_token_expiration</string>
<string name="pref_token_type" translatable="false">pref_token_type</string>
<string name="pref_auth_username" translatable="false">pref_auth_username</string>
<string name="pref_auth_password" translatable="false">pref_auth_password</string>
<string name="video_rating_none" translatable="false">none</string>
<string name="video_rating_like" translatable="false">like</string>
<string name="video_rating_dislike" translatable="false">dislike</string>
<string name="action_bar_title_account">Hesap</string>
<string name="bottom_nav_title_recent">Yeniler</string>
<string name="account_bottom_menu_videos">İzletiler</string>
@ -351,4 +336,21 @@
<string name="clear_search_history">Arama Geçmişini Temizle</string>
<string name="pref_description_language_app">Uygulama arayüzü için dil seçin. Değişikliklerin etkili olması için uygulamayı yeniden başlatın.</string>
<string name="pref_language_app">Uygulama Dili</string>
<string name="settings_activity_look_and_feel_category_title">Görünüm</string>
<string name="settings_activity_about_category_title">Hakkında</string>
<string name="settings_activity_video_playback_category_title">Video Oynatma</string>
<string name="settings_activity_video_list_category_title">Video Listesi</string>
<string name="title_activity_settings2">SettingsActivity2</string>
<string name="title_activity_me">Hesap</string>
<string name="title_activity_select_server">Sunucu Seç</string>
<string name="server_book_del_alert_msg">Bu sunucuyu adres defterinden kaldırmak istediğinizden emin misiniz\?</string>
<string name="server_book_del_alert_title">Sunucuyu Kaldır</string>
<string name="bn_rBD">Bengalce (Bangladeş)</string>
<string name="pref_background_behavior_summary">Arka plana giderken oynatılan bir videonun nasıl yanıt vereceği</string>
<string name="settings_permissions_error_float">Android Ayarlarında bu uygulama için resim içinde resim izni devre dışı</string>
<string name="settings_api_error_float">Android sürümü kayan videoyu desteklemiyor</string>
<string name="pref_background_float">Kayan pencerede video oynatmaya devam et</string>
<string name="pref_background_behavior">Arka planda oynatma yapılandırması</string>
<string name="pref_background_stop">Tüm oynatmaları durdur</string>
<string name="pref_background_audio">Arka planda ses akışı olarak devam et</string>
</resources>

View File

@ -63,7 +63,6 @@
<string name="pref_description_torrent_player">视频通过一个种子下载,此选项需要存储权限(实验阶段,不稳定!)</string>
<string name="action_bar_title_logout">退出</string>
<string name="zh">中文</string>
<string name="title_activity_video_play">视频播放Activity</string>
<string name="error_field_required">本字段必填</string>
<string name="action_bar_title_account">账户</string>
<string name="bottom_nav_title_recent">最近</string>

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title_activity_video_play">影片播放活動</string>
<string name="title_activity_settings">設定</string>
<string name="title_activity_login">登入</string>
<string name="prompt_server">伺服器</string>
@ -323,4 +322,21 @@
<string name="pref_language_app">應用程式語言</string>
<string name="pref_description_back_pause">當影片播放時按下後退鈕後暫停背景播放。</string>
<string name="pref_title_back_pause">在後退鈕上暫停</string>
<string name="settings_activity_look_and_feel_category_title">外觀與感覺</string>
<string name="settings_activity_about_category_title">關於</string>
<string name="settings_activity_video_playback_category_title">影片播放</string>
<string name="settings_activity_video_list_category_title">影片清單</string>
<string name="title_activity_settings2">SettingsActivity2</string>
<string name="title_activity_me">帳號</string>
<string name="title_activity_select_server">選取伺服器</string>
<string name="server_book_del_alert_msg">您確定您想要從地址簿中移除此伺服器嗎?</string>
<string name="server_book_del_alert_title">移除伺服器</string>
<string name="bn_rBD">孟加拉語(孟加拉)</string>
<string name="pref_background_behavior_summary">播放影片到背景時如何回應</string>
<string name="settings_permissions_error_float">在 Android 設定中已停用此應用程式的畫中畫權限</string>
<string name="settings_api_error_float">Android 版本不支援懸浮影片</string>
<string name="pref_background_behavior">背景播放設定</string>
<string name="pref_background_float">繼續以懸浮視窗播放影片</string>
<string name="pref_background_stop">停止所有播放</string>
<string name="pref_background_audio">以背景音訊串流繼續</string>
</resources>

View File

@ -372,6 +372,10 @@
<string name="settings_activity_about_category_title">About</string>
<string name="settings_activity_look_and_feel_category_title"><![CDATA[Look & Feel]]></string>
<string name="peertube_instance_search_default_description" translatable="false">PeerTube, a federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.</string>
<string name="server_selection_nsfw_instance">NSFW Instance</string>
<string name="server_selection_video_totals">Videos: %s, Local Videos: %s</string>
<!-- Constants, Don't translate -->
<string name="pref_token_access" translatable="false">pref_token_access</string>