mirror of
https://framagit.org/tom79/fedilab-tube
synced 2025-06-05 21:09:11 +02:00
Compare commits
67 Commits
Author | SHA1 | Date | |
---|---|---|---|
dfdda7627f | |||
1711826c43 | |||
4627de23b4 | |||
023ab2d4b2 | |||
2a375318ea | |||
fee593d059 | |||
fe3546e282 | |||
b61b6868a6 | |||
2f8ecd1f3e | |||
8a9ead3f0d | |||
43e2762d4d | |||
8ab237a957 | |||
ffa5d0883a | |||
14f0a47f52 | |||
4c1e466866 | |||
24c6f79b51 | |||
8c958a2563 | |||
02cc00780d | |||
d13cce3997 | |||
985835429b | |||
00751cedab | |||
c4e85a7161 | |||
253b61fb11 | |||
54ffbe2e15 | |||
86d9ba930c | |||
fb96efc8cf | |||
aaac1652e9 | |||
c8fc98ee71 | |||
4457259dfd | |||
6dbb11f6e9 | |||
08a4b4b49a | |||
4afd2ca341 | |||
0c048877e0 | |||
825a74de4a | |||
79ca0ceb88 | |||
a5ccc9bf6f | |||
685467266a | |||
599e53b10c | |||
029b8b57ae | |||
631264eb57 | |||
e7eef5b760 | |||
59741e5979 | |||
0f38ad180a | |||
fdc6e6e325 | |||
ed9e79496a | |||
4f909417f1 | |||
aecb4034ad | |||
f0335d96d2 | |||
65f3886355 | |||
8e2f1fb8fe | |||
852cfee310 | |||
6620a12957 | |||
11e8135cbd | |||
824c4e0cbb | |||
9af7934448 | |||
4ffa027e8d | |||
7e8ab3359a | |||
8e72655731 | |||
5c098857bd | |||
7fece740af | |||
857ab65f93 | |||
807655da5b | |||
a77f37e564 | |||
1194209c82 | |||
f31b6e9ac8 | |||
3353b7205b | |||
0f995cc615 |
10
.github/FUNDING.yml
vendored
Normal file
10
.github/FUNDING.yml
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
|
||||
patreon: tom79
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: tom79
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
28
CHANGELOG
Normal file
28
CHANGELOG
Normal file
@ -0,0 +1,28 @@
|
||||
# 1.5.2
|
||||
|
||||
### Added:
|
||||
- Enable/disable auto playback
|
||||
- Enter in full-screen automatically (default disabled)
|
||||
- Back press pauses the video in full-screen
|
||||
|
||||
### Fixed:
|
||||
- Public timelines don't honor muted accounts
|
||||
- Comments are not removed when switching to a video without comments
|
||||
- Some other fixes
|
||||
|
||||
--------
|
||||
|
||||
# 1.5.1
|
||||
|
||||
- Fix some issues
|
||||
- New translations
|
||||
|
||||
--------
|
||||
|
||||
# 1.5.0
|
||||
|
||||
- Custom default instance depending of the country
|
||||
- Full managements of comments and their replies (read/post/delete)
|
||||
- Profile for accounts (displays their channels & videos)
|
||||
- Fix some issues when posting a comment
|
||||
- Fix videos not paused after screen lock
|
17
CONTRIBUTING.md
Normal file
17
CONTRIBUTING.md
Normal file
@ -0,0 +1,17 @@
|
||||
CONTRIBUTING
|
||||
============
|
||||
|
||||
### Localizations:
|
||||
|
||||
TubeLab works only with [Crowdin](https://crowdin.com/project/tubelab), which offers nice tools for helping in translations.
|
||||
New translations will be automatically merged in a branch.
|
||||
If your language is not listed, please ask me to add it. If you prefer to work on an XML file, you should be able [to upload it with Crowdin](https://support.crowdin.com/xml-configuration/).
|
||||
Crowdin will not pick up changes in develop branch, that's why all translations should be done with this tool.
|
||||
|
||||
### Issues:
|
||||
|
||||
Issues are handled on Github at: https://github.com/stom79/TubeLab/issues, before opening an issue, please check it has not yet been submitted by someone else
|
||||
|
||||
### Contribution to code:
|
||||
|
||||
Your contributions are welcomed, but please, use this repo https://framagit.org/tom79/fedilab-tube. You can create PR to the dev branch.
|
24
README.md
24
README.md
@ -8,6 +8,9 @@ The other app is **[TubeLab](#TubeLab)** a Peertube Android app working for all
|
||||
|
||||
Tubelab is an Android app for Peertube (GNU GPLv3).
|
||||
|
||||
[<img alt='Get it on Google Play' src='./images/get-it-on-play.png' height="80"/>](https://play.google.com/store/apps/details?id=app.fedilab.tubelab)
|
||||
[<img alt='Get it on F-Droid' src='./images/get-it-on-fdroid.png' height="80"/>](https://f-droid.org/packages/app.fedilab.tubelab/)
|
||||
|
||||
### Not authenticated mode
|
||||
|
||||
It's a limited mode where you can do some actions:
|
||||
@ -34,6 +37,11 @@ Many features are available with this mode:
|
||||
|
||||
TubeAcad est une application Android open source (GNU GPLv3) pour les instances Peertube académiques. L’authentification se fait par adresse mail, l’instance est automatiquement détectée. Il est également possible sur certaines instances de créer son compte depuis l’application.
|
||||
|
||||
|
||||
[<img alt='Get it on Google Play' src='./images/get-it-on-play.png' height="80"/>](https://play.google.com/store/apps/details?id=app.fedilab.fedilabtube)
|
||||
[<img alt='Get it on F-Droid' src='./images/get-it-on-fdroid.png' height="80"/>](https://f-droid.org/packages/app.fedilab.fedilabtube/)
|
||||
|
||||
|
||||
### Mode non authentifié
|
||||
|
||||
Ce mode permet de visionner les vidéos sur différentes instances (en sélectionnant une instance académique). Cependant, vous ne pourrez pas interagir totalement avec les vidéos. Vous pourrez :
|
||||
@ -60,19 +68,3 @@ Si vous connectez votre compte, vous pourrez interagir avec les vidéos :
|
||||
- Signaler des vidéos ou des comptes
|
||||
- Voir l'historique
|
||||
|
||||
### Downloads
|
||||
|
||||
#### TubeAcad
|
||||
|
||||
[Fdroid](https://f-droid.org/packages/app.fedilab.fedilabtube/)
|
||||
|
||||
[GooglePlay](https://play.google.com/store/apps/details?id=app.fedilab.fedilabtube)
|
||||
|
||||
|
||||
|
||||
#### TubeLab
|
||||
|
||||
[Fdroid](https://f-droid.org/packages/app.fedilab.tubelab/)
|
||||
|
||||
[GooglePlay](https://play.google.com/store/apps/details?id=app.fedilab.tubelab)
|
||||
|
||||
|
@ -11,8 +11,8 @@ android {
|
||||
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
versionCode 20
|
||||
versionName "1.5.1"
|
||||
versionCode 24
|
||||
versionName "1.6.0"
|
||||
multiDexEnabled true
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
@ -97,22 +97,23 @@ dependencies {
|
||||
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||
implementation 'androidx.preference:preference:1.1.1'
|
||||
implementation 'com.google.android.material:material:1.2.1'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
|
||||
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
|
||||
implementation 'androidx.navigation:navigation-fragment:2.3.0'
|
||||
implementation 'androidx.navigation:navigation-fragment:2.3.1'
|
||||
implementation "androidx.fragment:fragment:1.2.5"
|
||||
implementation 'androidx.navigation:navigation-ui:2.3.0'
|
||||
implementation ("androidx.navigation:navigation-dynamic-features-fragment:2.3.0")
|
||||
implementation 'androidx.navigation:navigation-ui:2.3.1'
|
||||
implementation ("androidx.navigation:navigation-dynamic-features-fragment:2.3.1")
|
||||
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
|
||||
implementation 'androidx.browser:browser:1.2.0'
|
||||
implementation 'androidx.documentfile:documentfile:1.0.1'
|
||||
testImplementation 'junit:junit:4.13'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
|
||||
|
||||
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
|
||||
implementation 'com.github.GrenderG:Toasty:1.4.2'
|
||||
implementation 'com.google.android.exoplayer:exoplayer:2.10.6'
|
||||
implementation 'com.google.android.exoplayer:extension-mediasession:2.10.6'
|
||||
implementation 'com.google.android.exoplayer:exoplayer:2.12.1'
|
||||
implementation 'com.google.android.exoplayer:extension-mediasession:2.12.1'
|
||||
implementation "com.github.mabbas007:TagsEditText:1.0.5"
|
||||
implementation "com.github.bumptech.glide:glide:4.11.0"
|
||||
annotationProcessor "com.github.bumptech.glide:compiler:4.11.0"
|
||||
@ -126,7 +127,14 @@ dependencies {
|
||||
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
|
||||
implementation 'com.github.mancj:MaterialSearchBar:0.8.5'
|
||||
|
||||
implementation "com.github.TorrentStream:TorrentStream-Android:2.7.0"
|
||||
|
||||
implementation "io.github.kobakei:ratethisapp:1.2.0"
|
||||
implementation 'com.github.HITGIF:TextFieldBoxes:1.4.5'
|
||||
implementation 'com.github.vkay94:DoubleTapPlayerView:1.0.0'
|
||||
|
||||
implementation "androidx.work:work-runtime:2.4.0"
|
||||
implementation "androidx.work:work-runtime-ktx:2.4.0"
|
||||
implementation 'jp.wasabeef:glide-transformations:4.0.0'
|
||||
|
||||
}
|
@ -1,12 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="app_name" translatable="false">TubeAcad</string>
|
||||
<string name="app_id" translatable="false">app.fedilab.fedilabtube</string>
|
||||
<string name="set_video_mode_choice" translatable="false">set_video_mode_choice</string>
|
||||
<string name="set_video_minimize_choice" translatable="false">set_video_minimize_choice</string>
|
||||
<string name="set_video_language_choice" translatable="false">set_video_language_choice</string>
|
||||
<string name="set_video_quality_choice" translatable="false">set_video_quality_choice</string>
|
||||
<string name="set_video_cache_choice" translatable="false">set_video_cache_choice</string>
|
||||
<string name="set_autoplay_choice" translatable="false">set_autoplay_choice</string>
|
||||
<string name="set_theme_choice" translatable="false">set_theme_choice</string>
|
||||
<string name="set_fullscreen_choice" translatable="false">set_fullscreen_choice</string>
|
||||
<string name="set_autoplay_next_video_choice" translatable="false">set_autoplay_next_video_choice</string>
|
||||
<string name="set_store_in_history" translatable="false">set_store_in_history</string>
|
||||
<string name="set_play_screen_lock_choice" translatable="false">set_play_screen_lock_choice</string>
|
||||
<string name="set_video_in_list_choice" translatable="false">set_video_in_list_choice</string>
|
||||
<string name="set_video_sensitive_choice" translatable="false">set_video_sensitive_choice</string>
|
||||
<string name="set_video_in_list">Vidéos dans une liste</string>
|
||||
<string name="set_video_in_list_description">Change la mise en page pour afficher les vidéos dans une liste</string>
|
||||
|
||||
<string name="show_more">Montrer plus</string>
|
||||
<string name="show_less">Montrer moins</string>
|
||||
|
||||
<string name="set_play_screen_lock">Verrouillage d\'écran</string>
|
||||
<string name="set_play_screen_lock_description">Continuer à lire des vidéos lorsque l\'écran est verrouillé</string>
|
||||
|
||||
|
||||
<string name="change_profile_picture">Modifier la photo de profil</string>
|
||||
<string name="account_updated">Le compte a été mis à jour !</string>
|
||||
|
||||
|
||||
<string name="new_video">Nouvelle vidéo</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
|
||||
<string name="notif_new_video">Nouvelle vidéo depuis vos souscriptions</string>
|
||||
<string name="notif_new_comment">Nouveau commentaire sur votre vidéo</string>
|
||||
<string name="notif_blocked">Une de vos vidéos est bloquée/débloquée</string>
|
||||
<string name="notif_video_published">Vidéo publiée (après transcodage / mise à jour programmée)</string>
|
||||
<string name="notif_video_imported">Import de vidéo terminé</string>
|
||||
<string name="notif_new_followers">Vous ou votre chaîne avez/a un·e nouvel·le abonné·e</string>
|
||||
<string name="notif_video_mention">Quelqu\'un vous a mentionné dans les commentaires d\'une vidéo</string>
|
||||
<string name="notif_abuse_received">Un signalement d\'abus a reçu un nouveau message</string>
|
||||
<string name="notif_abuse_accepted">Un de vos rapports d\'abus a été accepté ou rejeté par les modérateurs</string>
|
||||
|
||||
<string name="save">Enregistrer</string>
|
||||
<string name="set_autoplay_next_video">Lire automatiquement la vidéo suivante</string>
|
||||
<string name="set_autoplay_next_video_description">Quand une vidéo est terminée, lire la prochaine vidéo suggérée.</string>
|
||||
|
||||
<string name="enable_history">Activer l\'historique</string>
|
||||
<string name="set_autoplay">Lecture automatique</string>
|
||||
<string name="set_autoplay_description">Si activé, les vidéos seront lues automatiquement</string>
|
||||
|
||||
<string name="set_fullscreen">Plein écran</string>
|
||||
<string name="set_fullscreen_description">Ouvre automatiquement les vidéos en plein écran</string>
|
||||
|
||||
<string name="delete_account_comment">Supprimer tous les commentaires</string>
|
||||
<string name="delete_account_comment_confirm">Etes-vous sûr de vouloir supprimer tous les commentaires de ce compte pour vos vidéos ?</string>
|
||||
@ -16,6 +65,16 @@
|
||||
<item>Automatique</item>
|
||||
</string-array>
|
||||
|
||||
<string name="refresh_every">Mettre à jour toutes les :</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Jamais</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 heure</item>
|
||||
<item>2 heures</item>
|
||||
<item>6 heures</item>
|
||||
<item>12 heures</item>
|
||||
</string-array>
|
||||
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="zero">%d réponse</item>
|
||||
@ -187,7 +246,9 @@
|
||||
<string name="add_public_reply">Répondre publiquement</string>
|
||||
<string name="send_comment">Envoyer un commentaire</string>
|
||||
<string name="all">Tout</string>
|
||||
|
||||
<string name="activity">Activité</string>
|
||||
<string name="app">App</string>
|
||||
<string name="fetch_notification_channel_name">Mise à jour des notifications</string>
|
||||
<string name="peertube_video_report_success"><![CDATA[ Votre signalement <b>%1$s</b> a été accepté]]></string>
|
||||
<string name="reply">Répondre</string>
|
||||
<!-- end languages -->
|
||||
@ -216,8 +277,9 @@
|
||||
<string name="report_account">Signaler le compte</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Streaming</item>
|
||||
<item>Flux direct</item>
|
||||
<item>Navigateur</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_video_quality">
|
||||
<item>Élevée</item>
|
||||
|
@ -1,3 +1,5 @@
|
||||
- Theme: Clair, Sombre et automatique
|
||||
- Supprimer tous les commentaires d'un compte sur vos vidéos
|
||||
- Mettre en sourdine un compte depuis les commentaires.
|
||||
- Nouvelles options :
|
||||
- Mode plein écran automatique
|
||||
- Désactiver la lecture automatique des vidéos
|
||||
|
||||
- Quelques corrections de bugs
|
33
app/src/fdroid_full/AndroidManifest.xml
Normal file
33
app/src/fdroid_full/AndroidManifest.xml
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="app.fedilab.fedilabtube">
|
||||
|
||||
|
||||
<application
|
||||
android:name=".FedilabTube"
|
||||
android:allowBackup="false"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
tools:replace="android:allowBackup">
|
||||
|
||||
<activity
|
||||
android:name=".PeertubeActivity"
|
||||
tools:node="mergeOnlyAttributes">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<!-- The app is a good candidate for URL in https://domain.name/videos/watch/xxxxx-->
|
||||
<data
|
||||
android:host="*"
|
||||
android:pathPrefix="/videos/watch/"
|
||||
android:scheme="https" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
</application>
|
||||
</manifest>
|
@ -1 +1,25 @@
|
||||
- Fix some issues
|
||||
Added:
|
||||
- Device notifications (refresh time can be set in settings or disabled)
|
||||
- Double tap video left/right to seek - or + 10 seconds
|
||||
- Display video in a list with small thumbnails (default: disabled)
|
||||
- Automatically adapt full-screen in portrait or landscape
|
||||
- Incognito: Enable/disable reccords in history
|
||||
- Video suggestions
|
||||
- Enable/Disable playback when screen is off (default: disabled)
|
||||
- Add support for Torrent URLs
|
||||
- Toggle full video description when available
|
||||
- Channel can be visited from playing video activity
|
||||
- Play videos from URL search
|
||||
- Allow to set behavior in settings for sensitive media
|
||||
- Remember last play position
|
||||
- Honor don't download videos when forbidden
|
||||
- Share channel or account links when visiting profiles
|
||||
|
||||
Changed:
|
||||
- Video mode (Normal, webview, magnet and torrent)
|
||||
- Accept URLs for instances
|
||||
|
||||
Fix:
|
||||
- Enable to end playing with top back button
|
||||
- Fix FP message with token
|
||||
- Share the page on Peertube and not the video file.
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Add a public reply</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="zero">%d ردود</item>
|
||||
<item quantity="one">ردّ واحد %d</item>
|
||||
@ -38,9 +64,25 @@
|
||||
<string name="upload_video">إرسال</string>
|
||||
<string name="image_preview">معاينة الصورة</string>
|
||||
<string name="file_to_upload">اختر الملف المراد ارساله</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">قناة</string>
|
||||
<string name="videos">الفيديوهات</string>
|
||||
<string name="channels">القنوات</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">موافق</string>
|
||||
<string name="no">لا</string>
|
||||
<string name="cancel">إلغاء</string>
|
||||
@ -60,6 +102,7 @@
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">طرأ هناك خطأ أثناء اختيار الوسائط!</string>
|
||||
<string name="download_file">تنزيل %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">الخصوصية</string>
|
||||
<string name="action_logout">تسجيل الخروج</string>
|
||||
<string name="login">تسجيل الدخول</string>
|
||||
@ -207,7 +250,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>عادي</item>
|
||||
<item>Webview</item>
|
||||
<item>تدفق مباشر</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>فاتحة</item>
|
||||
@ -263,6 +307,7 @@
|
||||
<string name="pickup_categories">Pick categories</string>
|
||||
<string name="pickup_languages">Pick languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">إضافة حساب</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
<string name="pause">Pause</string>
|
||||
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,17 +1,43 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videoliste</string>
|
||||
<string name="set_video_in_list_description">Layout für die Anzeige von Videos in einer Liste ändern</string>
|
||||
<string name="show_more">Mehr anzeigen</string>
|
||||
<string name="show_less">Weniger anzeigen</string>
|
||||
<string name="set_play_screen_lock">Bildschirmsperre</string>
|
||||
<string name="set_play_screen_lock_description">Videos weiterhin abspielen, wenn der Bildschirm gesperrt ist</string>
|
||||
<string name="save">Speichern</string>
|
||||
<string name="enable_history">Verlauf aktivieren</string>
|
||||
<string name="change_profile_picture">Profilbild ändern</string>
|
||||
<string name="set_autoplay">Automatische Wiedergabe</string>
|
||||
<string name="set_autoplay_description">Wenn aktiviert, werden Videos automatisch abgespielt</string>
|
||||
<string name="set_fullscreen">Vollbild</string>
|
||||
<string name="set_fullscreen_description">Videos automatisch im Vollbildmodus öffnen</string>
|
||||
<string name="set_autoplay_next_video">Automatisch nächstes Video starten</string>
|
||||
<string name="set_autoplay_next_video_description">Wenn ein Video endet, nächstes vorgeschlagene starten.</string>
|
||||
<string name="add_public_reply">Öffentliche Antwort hinzufügen</string>
|
||||
<string name="activity">Aktivität</string>
|
||||
<string name="app">Anwendung</string>
|
||||
<string name="notif_new_video">Neues Video aus deinen Abonnements</string>
|
||||
<string name="notif_new_comment">Neuer Kommentar zu deinem Video</string>
|
||||
<string name="notif_blocked">Eines deiner Videos ist blockiert/entsperrt</string>
|
||||
<string name="notif_video_published">Video veröffentlicht (nach Umkodierung/geplantem Update)</string>
|
||||
<string name="notif_video_imported">Videoimport abgeschlossen</string>
|
||||
<string name="notif_new_followers">Du oder dein Kanal(e) haben einen neuen Follower</string>
|
||||
<string name="notif_video_mention">Jemand hat dich in einem Kommentar erwähnt</string>
|
||||
<string name="notif_abuse_received">Ein Missbrauchsbericht hat eine neue Nachricht erhalten</string>
|
||||
<string name="notif_abuse_accepted">Ein Missbrauchsbericht wurde von Moderatoren akzeptiert oder abgelehnt</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d Antwort</item>
|
||||
<item quantity="other">%d Antworten</item>
|
||||
</plurals>
|
||||
<string name="reply">Antworten</string>
|
||||
<string name="set_theme">Erscheinungsbild</string>
|
||||
<string name="set_theme_description">Erlaube Änderungen am Erscheinungsbild</string>
|
||||
<string name="set_theme_description">Erscheinungsbild ändern</string>
|
||||
<string name="federation_issue">Das Video kann nicht föderiert eingebunden werden!</string>
|
||||
<string name="title_home">Startseite</string>
|
||||
<string name="title_local">Lokal</string>
|
||||
<string name="title_discover">Mehr erfahren</string>
|
||||
<string name="title_discover">Entdecken</string>
|
||||
<string name="title_notifications">Benachrichtigungen</string>
|
||||
<string name="title_recently_added">Zuletzt hinzugefügt</string>
|
||||
<string name="title_trending">Beliebt</string>
|
||||
@ -34,9 +60,25 @@
|
||||
<string name="upload_video">Hochladen</string>
|
||||
<string name="image_preview">Bildvorschau</string>
|
||||
<string name="file_to_upload">Datei zum Hochladen auswählen</string>
|
||||
<string name="new_video">Neues Video</string>
|
||||
<string name="new_blacklist">Neue Blacklist Info</string>
|
||||
<string name="new_my_video_published">Dein Video wurde veröffentlicht</string>
|
||||
<string name="new_my_video_error">Fehler bei Veröffentlichung deines Videos</string>
|
||||
<string name="new_comment">Neuer Kommentar</string>
|
||||
<string name="new_follow">Neuer Follower</string>
|
||||
<string name="channel">Kanal</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Kanäle</string>
|
||||
<string name="refresh_every">Rufe alle ab:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Nie</item>
|
||||
<item>15 Minuten</item>
|
||||
<item>30 Minuten</item>
|
||||
<item>1 Stunde</item>
|
||||
<item>2 Stunden</item>
|
||||
<item>6 Stunden</item>
|
||||
<item>12 Stunden</item>
|
||||
</string-array>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nein</string>
|
||||
<string name="cancel">Abbrechen</string>
|
||||
@ -56,6 +98,7 @@
|
||||
<string name="video_uploaded_action">Hier klicken, um die Videodetails zu bearbeiten.</string>
|
||||
<string name="toot_select_image_error">Fehler beim Wählen des Bildes!</string>
|
||||
<string name="download_file">%1$s heruntergeladen</string>
|
||||
<string name="account_updated">Benutzerkonto wurde aktualisiert!</string>
|
||||
<string name="action_privacy">Datenschutz</string>
|
||||
<string name="action_logout">Abmelden</string>
|
||||
<string name="login">Einloggen</string>
|
||||
@ -167,7 +210,7 @@
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> hat ein neues Video veröffentlicht: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Dein Video <b>%1$s</b> wurde gesperrt]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Die Sperre für dein Video <b>%1$s</b> wurde aufgehoben]]></string>
|
||||
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
|
||||
<string name="peertube_video_report_success"><![CDATA[Deine Missbrauchs-Meldung <b>%1$s</b> wurde übermittelt]]></string>
|
||||
<string name="peertube_video_abuse"><![CDATA[Neuer Missbrauchsbericht für Video: <b>%1$s</b>]]></string>
|
||||
<string name="add_public_comment">Öffentlichen Kommentar hinzufügen</string>
|
||||
<string name="send_comment">Kommentar absenden</string>
|
||||
@ -201,9 +244,10 @@
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Account melden</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>WebView</item>
|
||||
<item>Direkter Datenstrom</item>
|
||||
<item>Direkter Stream</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Hell</item>
|
||||
@ -212,7 +256,7 @@
|
||||
</string-array>
|
||||
<string-array name="settings_video_quality">
|
||||
<item>Hoch</item>
|
||||
<item>Medium</item>
|
||||
<item>Mittel</item>
|
||||
<item>Niedrig</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Möchtest du diesem Konto nicht mehr folgen?</string>
|
||||
@ -259,6 +303,7 @@
|
||||
<string name="pickup_categories">Kategorien wählen</string>
|
||||
<string name="pickup_languages">Sprachen wählen</string>
|
||||
<string name="notification_channel_name">Information aktualisiert</string>
|
||||
<string name="fetch_notification_channel_name">Rufe Benachrichtigungen ab</string>
|
||||
<string name="add_account">Füge einen Account hinzu</string>
|
||||
<string name="list_of_accounts">Liste der Accounts</string>
|
||||
<string name="pause">Pause</string>
|
||||
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Προσθήκη δημόσιας απάντησης</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d απάντηση</item>
|
||||
<item quantity="other">%d απαντήσεις</item>
|
||||
@ -34,9 +60,25 @@
|
||||
<string name="upload_video">Μεταφόρτωση</string>
|
||||
<string name="image_preview">Προεπισκόπηση εικόνας</string>
|
||||
<string name="file_to_upload">Επιλέξτε το αρχείο για μεταφόρτωση</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">Κανάλι</string>
|
||||
<string name="videos">Βίντεο</string>
|
||||
<string name="channels">Κανάλια</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">Ναι</string>
|
||||
<string name="no">Όχι</string>
|
||||
<string name="cancel">Ακύρωση</string>
|
||||
@ -56,6 +98,7 @@
|
||||
<string name="video_uploaded_action">Κάντε κλικ εδώ για επεξεργασία δεδομένων του βίντεο.</string>
|
||||
<string name="toot_select_image_error">Παρουσιάστηκε κάποιο σφάλμα κατά την επιλογή του πολυμέσου!</string>
|
||||
<string name="download_file">Λήψη του %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">Ιδιωτικότητα</string>
|
||||
<string name="action_logout">Αποσύνδεση</string>
|
||||
<string name="login">Σύνδεση</string>
|
||||
@ -202,7 +245,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Webview</item>
|
||||
<item>Άμεση ροή</item>
|
||||
<item>Άμεση ροή</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Φωτεινό</item>
|
||||
@ -258,6 +302,7 @@
|
||||
<string name="pickup_categories">Επιλογή κατηγοριών</string>
|
||||
<string name="pickup_languages">Επιλογή γλωσσών</string>
|
||||
<string name="notification_channel_name">Ενημέρωση πληροφοριών</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">Προσθήκη λογαριασμού</string>
|
||||
<string name="list_of_accounts">Λίστα λογαριασμών</string>
|
||||
<string name="pause">Παύση</string>
|
||||
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Añade una respuesta pública</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d respuesta</item>
|
||||
<item quantity="other">%d respuestas</item>
|
||||
@ -34,9 +60,25 @@
|
||||
<string name="upload_video">Subir</string>
|
||||
<string name="image_preview">Previsualización de la imagen</string>
|
||||
<string name="file_to_upload">Seleccione el archivo a subir</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">Canal</string>
|
||||
<string name="videos">Vídeos</string>
|
||||
<string name="channels">Canales</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">Sí</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
@ -56,6 +98,7 @@
|
||||
<string name="video_uploaded_action">Pulsa aquí para editar los datos del vídeo.</string>
|
||||
<string name="toot_select_image_error">¡Ocurrió un error al seleccionar la imagen!</string>
|
||||
<string name="download_file">Descargando %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">Privacidad</string>
|
||||
<string name="action_logout">Cerrar sesión</string>
|
||||
<string name="login">Iniciar sesión</string>
|
||||
@ -203,7 +246,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Webview</item>
|
||||
<item>Corriente Directa</item>
|
||||
<item>Corriente directa</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Luz</item>
|
||||
@ -259,6 +303,7 @@
|
||||
<string name="pickup_categories">Selecciona una o más categorías</string>
|
||||
<string name="pickup_languages">Selecciona uno o más idiomas</string>
|
||||
<string name="notification_channel_name">Actualizar la información</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">Añadir una cuenta</string>
|
||||
<string name="list_of_accounts">Lista de cuentas</string>
|
||||
<string name="pause">Pausa</string>
|
||||
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Ajouter une réponse publique</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d réponse</item>
|
||||
<item quantity="other">%d réponses</item>
|
||||
@ -34,9 +60,25 @@
|
||||
<string name="upload_video">Téléverser</string>
|
||||
<string name="image_preview">Aperçu de l\'image</string>
|
||||
<string name="file_to_upload">Sélectionnez un fichier à transférer</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">Chaîne</string>
|
||||
<string name="videos">Vidéos</string>
|
||||
<string name="channels">Chaînes</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">Oui</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="cancel">Annuler</string>
|
||||
@ -56,6 +98,7 @@
|
||||
<string name="video_uploaded_action">Cliquez ici pour éditer les données de la vidéo.</string>
|
||||
<string name="toot_select_image_error">Une erreur s’est produite lors de la sélection du média !</string>
|
||||
<string name="download_file">Télécharger %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">Confidentialité</string>
|
||||
<string name="action_logout">Déconnexion</string>
|
||||
<string name="login">Connexion</string>
|
||||
@ -199,7 +242,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Streaming</item>
|
||||
<item>Flux direct</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Lumière</item>
|
||||
@ -255,6 +299,7 @@
|
||||
<string name="pickup_categories">Sélection des catégories</string>
|
||||
<string name="pickup_languages">Sélection des langues</string>
|
||||
<string name="notification_channel_name">Mise à jour des informations</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">Ajouter un compte</string>
|
||||
<string name="list_of_accounts">Liste des comptes</string>
|
||||
<string name="pause">Pause</string>
|
||||
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Aggiungere una risposta pubblica</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d risposta</item>
|
||||
<item quantity="other">%d risposte</item>
|
||||
@ -34,9 +60,25 @@
|
||||
<string name="upload_video">Carica</string>
|
||||
<string name="image_preview">Anteprima immagine</string>
|
||||
<string name="file_to_upload">Seleziona il file da caricare</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">Canale</string>
|
||||
<string name="videos">Video</string>
|
||||
<string name="channels">Canali</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">Si</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Annulla</string>
|
||||
@ -56,6 +98,7 @@
|
||||
<string name="video_uploaded_action">Premi qui per modificare i dati del video.</string>
|
||||
<string name="toot_select_image_error">Si è verificato un errore durante la selezione del archivio!</string>
|
||||
<string name="download_file">Scarica %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Disconnettiti</string>
|
||||
<string name="login">Accedi</string>
|
||||
@ -203,7 +246,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Webview</item>
|
||||
<item>Stream diretto</item>
|
||||
<item>Flusso diretto</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Luce</item>
|
||||
@ -259,6 +303,7 @@
|
||||
<string name="pickup_categories">Selezionare categorie</string>
|
||||
<string name="pickup_languages">Scegliere le lingue</string>
|
||||
<string name="notification_channel_name">Aggiorna informazioni</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">Aggiungi un account</string>
|
||||
<string name="list_of_accounts">Lista di account</string>
|
||||
<string name="pause">Pausa</string>
|
||||
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Add a public reply</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="other">%d が返信</item>
|
||||
</plurals>
|
||||
@ -33,9 +59,25 @@
|
||||
<string name="upload_video">アップロード</string>
|
||||
<string name="image_preview">画像のプレビュー</string>
|
||||
<string name="file_to_upload">アップロードするファイルを選択する</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">チャンネル</string>
|
||||
<string name="videos">動画</string>
|
||||
<string name="channels">チャンネル</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">はい</string>
|
||||
<string name="no">いいえ</string>
|
||||
<string name="cancel">キャンセル</string>
|
||||
@ -55,6 +97,7 @@
|
||||
<string name="video_uploaded_action">タップして動画情報を編集します。</string>
|
||||
<string name="toot_select_image_error">メディアの選択中にエラーが発生しました!</string>
|
||||
<string name="download_file">ダウンロード: %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">プライバシー</string>
|
||||
<string name="action_logout">ログアウト</string>
|
||||
<string name="login">ログイン</string>
|
||||
@ -202,7 +245,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>標準</item>
|
||||
<item>WebView</item>
|
||||
<item>ダイレクトストリーム</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>ライト</item>
|
||||
@ -258,6 +302,7 @@
|
||||
<string name="pickup_categories">Pick categories</string>
|
||||
<string name="pickup_languages">Pick languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">アカウントを追加</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
<string name="pause">Pause</string>
|
||||
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Add a public reply</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="other">답글 %d개</item>
|
||||
</plurals>
|
||||
@ -33,9 +59,25 @@
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">채널</string>
|
||||
<string name="videos">동영상</string>
|
||||
<string name="channels">채널</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">예</string>
|
||||
<string name="no">아니</string>
|
||||
<string name="cancel">취소</string>
|
||||
@ -55,6 +97,7 @@
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">미디어를 선택하는 도중 오류가 발생하였습니다!</string>
|
||||
<string name="download_file">다운로드 %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">개인정보</string>
|
||||
<string name="action_logout">로그아웃</string>
|
||||
<string name="login">로그인</string>
|
||||
@ -202,7 +245,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>보통</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>밝음</item>
|
||||
@ -258,6 +302,7 @@
|
||||
<string name="pickup_categories">Pick categories</string>
|
||||
<string name="pickup_languages">Pick languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">계정 추가</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
<string name="pause">Pause</string>
|
||||
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Video lijst</string>
|
||||
<string name="set_video_in_list_description">Wijzig de lay-out voor het weergeven van video\'s in een lijst</string>
|
||||
<string name="show_more">Meer weergeven</string>
|
||||
<string name="show_less">Minder weergeven</string>
|
||||
<string name="set_play_screen_lock">Schermvergrendeling</string>
|
||||
<string name="set_play_screen_lock_description">Video\'s laten doorspelen terwijl het scherm vergrendeld is</string>
|
||||
<string name="save">Opslaan</string>
|
||||
<string name="enable_history">Geschiedenis inschakelen</string>
|
||||
<string name="change_profile_picture">Profielfoto wijzigen</string>
|
||||
<string name="set_autoplay">Automatisch afspelen</string>
|
||||
<string name="set_autoplay_description">Als deze optie is ingeschakeld, worden de video\'s automatisch afgespeeld</string>
|
||||
<string name="set_fullscreen">Volledig scherm</string>
|
||||
<string name="set_fullscreen_description">Video\'s automatisch openen op volledig scherm</string>
|
||||
<string name="set_autoplay_next_video">De volgende video automatisch afspelen</string>
|
||||
<string name="set_autoplay_next_video_description">Wanneer een video eindigt, begin dan met de volgende voorgestelde video.</string>
|
||||
<string name="add_public_reply">Voeg een openbaar antwoord toe</string>
|
||||
<string name="activity">Activiteit</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">Nieuwe video uit uw abonnementen</string>
|
||||
<string name="notif_new_comment">Nieuwe reactie op je video</string>
|
||||
<string name="notif_blocked">Een van je video\'s is geblokkeerd/gedeblokkeerd</string>
|
||||
<string name="notif_video_published">Video gepubliceerd (na transcoderen/geplande update)</string>
|
||||
<string name="notif_video_imported">Video import voltooid</string>
|
||||
<string name="notif_new_followers">U of één van uw kanalen heeft een nieuwe volger</string>
|
||||
<string name="notif_video_mention">Iemand heeft je genoemd in een reactie op een video</string>
|
||||
<string name="notif_abuse_received">Een misbruik rapport heeft een nieuw bericht ontvangen</string>
|
||||
<string name="notif_abuse_accepted">Een van uw misbruikmeldingen is geaccepteerd of afgewezen door de moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d antwoord</item>
|
||||
<item quantity="other">%d reacties</item>
|
||||
@ -34,9 +60,25 @@
|
||||
<string name="upload_video">Uploaden</string>
|
||||
<string name="image_preview">Beeld preview</string>
|
||||
<string name="file_to_upload">Selecteer het te uploaden bestand</string>
|
||||
<string name="new_video">Nieuwe video</string>
|
||||
<string name="new_blacklist">Nieuwe blacklist informatie</string>
|
||||
<string name="new_my_video_published">Je video is gepubliceerd</string>
|
||||
<string name="new_my_video_error">Fout bij het publiceren van je video</string>
|
||||
<string name="new_comment">Nieuwe reactie</string>
|
||||
<string name="new_follow">Nieuwe volger</string>
|
||||
<string name="channel">Kanaal</string>
|
||||
<string name="videos">Video\'s</string>
|
||||
<string name="channels">Kanalen</string>
|
||||
<string name="refresh_every">Ververs elke:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Nooit</item>
|
||||
<item>15 minuten</item>
|
||||
<item>30 minuten</item>
|
||||
<item>1 uur</item>
|
||||
<item>2 uren</item>
|
||||
<item>6 uren</item>
|
||||
<item>12 uren</item>
|
||||
</string-array>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Geen</string>
|
||||
<string name="cancel">Annuleren</string>
|
||||
@ -56,6 +98,7 @@
|
||||
<string name="video_uploaded_action">Tik hier om de videogegevens te bewerken.</string>
|
||||
<string name="toot_select_image_error">Er is een fout opgetreden bij het selecteren van de media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="account_updated">Het account is bijgewerkt!</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Uitloggen</string>
|
||||
<string name="login">Inloggen</string>
|
||||
@ -81,7 +124,7 @@
|
||||
<string name="action_lists_confirm_delete">Weet u zeker dat u deze lijst permanent wilt verwijderen?</string>
|
||||
<string name="action_lists_delete">Lijst verwijderen</string>
|
||||
<string name="no_comments">Laat als eerste een reactie achter op deze video met de knop rechtsboven!</string>
|
||||
<string name="comment_no_allowed_peertube">Commentaar is niet ingeschakeld op deze video!</string>
|
||||
<string name="comment_no_allowed_peertube">Reacties zijn niet ingeschakeld op deze video!</string>
|
||||
<string name="pickup_resolution">Neem een resolutie op</string>
|
||||
<string name="bookmark_add_peertube">De video is toegevoegd aan de bladwijzers!</string>
|
||||
<string name="bookmark_remove_peertube">De video is uit de bladwijzers verwijderd!</string>
|
||||
@ -90,7 +133,7 @@
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Abonnementen</string>
|
||||
<string name="delete_comment">Een opmerking verwijderen</string>
|
||||
<string name="delete_comment_confirm">Weet u zeker dat u deze opmerking wilt verwijderen?</string>
|
||||
<string name="delete_comment_confirm">Weet u zeker dat u deze reactie wilt verwijderen?</string>
|
||||
<string name="set_video_mode">Modus voor video\'s</string>
|
||||
<string name="filter">Filter</string>
|
||||
<string name="sepia_search">Sepia zoeken</string>
|
||||
@ -153,7 +196,7 @@
|
||||
<string name="none">Geen</string>
|
||||
<string name="set_video_mode_description">Maakt het mogelijk om van modus te veranderen voor het afspelen van video\'s (standaard, streaming of via een browser).</string>
|
||||
<string name="delete_account_comment">Account opmerkingen verwijderen</string>
|
||||
<string name="delete_account_comment_confirm">Weet u zeker dat u alle opmerkingen van dit account wilt verwijderen?</string>
|
||||
<string name="delete_account_comment_confirm">Weet u zeker dat u alle reacties van dit account wilt verwijderen?</string>
|
||||
<string name="delete_video">Video verwijderen</string>
|
||||
<string name="delete_video_confirmation">Weet u zeker dat u deze video wilt verwijderen?</string>
|
||||
<string name="no_video_to_display">Geen video\'s te tonen!</string>
|
||||
@ -167,10 +210,10 @@
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> publiceerde een nieuwe video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Uw video <b>%1$s</b> is op de zwarte lijst geplaatst]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Uw video <b>%1$s</b> is niet op de zwarte lijst gezet]]></string>
|
||||
<string name="peertube_video_report_success"><![CDATA[Your abuse report <b>%1$s</b> has been accepted]]></string>
|
||||
<string name="peertube_video_report_success"><![CDATA[Uw misbruik melding <b>%1$s</b> is geaccepteerd]]></string>
|
||||
<string name="peertube_video_abuse"><![CDATA[Nieuw misbruikrapport voor video: <b>%1$s</b>]]></string>
|
||||
<string name="add_public_comment">Voeg een publieke opmerking toe</string>
|
||||
<string name="send_comment">Stuur commentaar</string>
|
||||
<string name="send_comment">Reactie versturen</string>
|
||||
<string name="all">Allemaal</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Afspeellijsten</string>
|
||||
@ -198,12 +241,13 @@
|
||||
U kunt nu verbinding maken met uw account door <b>%1$s</b> in het eerste veld te schrijven en op <b>Verbinden</b>te klikken.\n\n
|
||||
<b>Belangrijke</b>: Als je instantie validatie vereist, je ontvangt een e-mail zodra deze is gevalideerd!
|
||||
</string>
|
||||
<string name="account">Rekening</string>
|
||||
<string name="report_account">Rapportageformulier</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Account rapporteren</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Webview</item>
|
||||
<item>Directe stroom</item>
|
||||
<item>Rechtstreeks gegevensstroom</item>
|
||||
<item>Magneetlink</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Licht</item>
|
||||
@ -215,7 +259,7 @@
|
||||
<item>Gemiddeld</item>
|
||||
<item>Laag</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Wilt u dit account ontvouwen?</string>
|
||||
<string name="unfollow_confirm">Wilt u dit account ontvolgen?</string>
|
||||
<string name="title_video_peertube">Titel voor de video</string>
|
||||
<string name="join_peertube">Word lid van Peertube</string>
|
||||
<string name="agreement_check_peertube">Ik ben minstens 16 jaar oud en ga akkoord met de %1$s van dit geval</string>
|
||||
@ -228,18 +272,18 @@
|
||||
<string name="delete_channel">Verwijder kanaal</string>
|
||||
<string name="action_channel_confirm_delete">Weet u zeker dat u dit kanaal permanent zult verwijderen?</string>
|
||||
<string name="modify_playlists">Video in afspeellijsten</string>
|
||||
<string name="no_muted">Geen gedempte rekeningen!</string>
|
||||
<string name="no_muted">Geen gedempte accounts!</string>
|
||||
<string name="error_display_name_channel">U moet een naam en een weergavenaam voor dit kanaal definiëren!</string>
|
||||
<string name="action_channel_create">Creëer een kanaal</string>
|
||||
<string name="action_channel_edit">Edit kanaal</string>
|
||||
<string name="email_error_domain">E-mailadressen in %1$s zijn niet toegestaan!</string>
|
||||
<string name="report_comment_size">Geef de redenen op</string>
|
||||
<string name="not_logged_in">U moet worden geauthenticeerd om tot deze actie over te gaan!</string>
|
||||
<string name="successful_report">De rekening is gemeld!</string>
|
||||
<string name="successful_report">Het account is gerapporteerd!</string>
|
||||
<string name="successful_report_comment">Het commentaar is gemeld!</string>
|
||||
<string name="successful_video_report">De video is gemeld!</string>
|
||||
<string name="password_length_error">Het wachtwoord moet minimaal 6 karakters bevatten!</string>
|
||||
<string name="muted_done">De rekening is gedempt!</string>
|
||||
<string name="muted_done">Het account is gedempt!</string>
|
||||
<string name="edit_video">Bewerk video</string>
|
||||
<string name="create_an_account">Creëer een account</string>
|
||||
<string name="followers_count">%1$s Abonnees</string>
|
||||
@ -259,8 +303,9 @@
|
||||
<string name="pickup_categories">Kies categorieën</string>
|
||||
<string name="pickup_languages">Kies talen</string>
|
||||
<string name="notification_channel_name">Informatie actualiseren</string>
|
||||
<string name="fetch_notification_channel_name">Notificaties ophalen</string>
|
||||
<string name="add_account">Een account toevoegen</string>
|
||||
<string name="list_of_accounts">Lijst van rekeningen</string>
|
||||
<string name="list_of_accounts">Lijst van accounts</string>
|
||||
<string name="pause">Pauze</string>
|
||||
<string name="play">Speel</string>
|
||||
<string name="minimize">Minimaliseer</string>
|
||||
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Dodaj publiczną odpowiedź</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d odpowiedź</item>
|
||||
<item quantity="few">%d odpowiedzi</item>
|
||||
@ -36,9 +62,25 @@
|
||||
<string name="upload_video">Prześlij</string>
|
||||
<string name="image_preview">Podgląd obrazu</string>
|
||||
<string name="file_to_upload">Wybierz plik do przesłania</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">Kanał</string>
|
||||
<string name="videos">Filmy</string>
|
||||
<string name="channels">Kanały</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">Tak</string>
|
||||
<string name="no">Nie</string>
|
||||
<string name="cancel">Anuluj</string>
|
||||
@ -58,6 +100,7 @@
|
||||
<string name="video_uploaded_action">Dotknij tutaj, aby edytować dane filmu.</string>
|
||||
<string name="toot_select_image_error">Podczas wyboru nośnika wystąpił błąd!</string>
|
||||
<string name="download_file">Pobierz %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">Prywatność</string>
|
||||
<string name="action_logout">Wyloguj</string>
|
||||
<string name="login">Zaloguj</string>
|
||||
@ -203,9 +246,10 @@
|
||||
<string name="account">Konto</string>
|
||||
<string name="report_account">Zgłoś konto</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normalny</item>
|
||||
<item>Webview</item>
|
||||
<item>Webview</item>
|
||||
<item>Bezpośrednio</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Jasny</item>
|
||||
@ -261,6 +305,7 @@
|
||||
<string name="pickup_categories">Kategorie wyboru</string>
|
||||
<string name="pickup_languages">Wybieranie języków</string>
|
||||
<string name="notification_channel_name">Aktualizacja informacji</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">Dodaj konto</string>
|
||||
<string name="list_of_accounts">Lista rachunków</string>
|
||||
<string name="pause">Przerwa</string>
|
||||
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Add a public reply</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d resposta</item>
|
||||
<item quantity="other">%d respostas</item>
|
||||
@ -34,9 +60,25 @@
|
||||
<string name="upload_video">Enviar</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Selecione o ficheiro a enviar</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">Canal</string>
|
||||
<string name="videos">Vídeos</string>
|
||||
<string name="channels">Canais</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">Sim</string>
|
||||
<string name="no">Não</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
@ -56,6 +98,7 @@
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">Ocorreu um erro ao selecionar a mídia!</string>
|
||||
<string name="download_file">Baixar %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">Privacidade</string>
|
||||
<string name="action_logout">Sair</string>
|
||||
<string name="login">Entrar</string>
|
||||
@ -203,7 +246,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Transmissão direta</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Diurno</item>
|
||||
@ -259,6 +303,7 @@
|
||||
<string name="pickup_categories">Pick categories</string>
|
||||
<string name="pickup_languages">Pick languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">Adicionar conta</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
<string name="pause">Pause</string>
|
||||
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Add a public reply</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d răspuns</item>
|
||||
<item quantity="few">%d răspunsuri</item>
|
||||
@ -35,9 +61,25 @@
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">Da</string>
|
||||
<string name="no">Nu</string>
|
||||
<string name="cancel">Anulare</string>
|
||||
@ -57,6 +99,7 @@
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">A aparut o eroare în timp ce selectați media!</string>
|
||||
<string name="download_file">Descărcat %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">Confidențialitate</string>
|
||||
<string name="action_logout">Deconectare</string>
|
||||
<string name="login">Autentificare</string>
|
||||
@ -204,7 +247,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Light</item>
|
||||
@ -260,6 +304,7 @@
|
||||
<string name="pickup_categories">Pick categories</string>
|
||||
<string name="pickup_languages">Pick languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">Adaugă un cont</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
<string name="pause">Pause</string>
|
||||
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Видео в списке</string>
|
||||
<string name="set_video_in_list_description">Изменить расположение для отображения видео в списке</string>
|
||||
<string name="show_more">Показать еще</string>
|
||||
<string name="show_less">Показать меньше</string>
|
||||
<string name="set_play_screen_lock">Блокировка экрана</string>
|
||||
<string name="set_play_screen_lock_description">Продолжать воспроизведение видео, когда экран заблокирован</string>
|
||||
<string name="save">Сохранить</string>
|
||||
<string name="enable_history">Включить историю</string>
|
||||
<string name="change_profile_picture">Изменить изображение профиля</string>
|
||||
<string name="set_autoplay">Автоматическое воспроизведение</string>
|
||||
<string name="set_autoplay_description">Если включено, видео будут воспроизводиться автоматически</string>
|
||||
<string name="set_fullscreen">Полноэкранный режим</string>
|
||||
<string name="set_fullscreen_description">Автоматически открывать видео в полноэкранном режиме</string>
|
||||
<string name="set_autoplay_next_video">Автоматически начать воспроизведение следующего видео</string>
|
||||
<string name="set_autoplay_next_video_description">Когда видео заканчивается, перейдите к следующему предложенному видео.</string>
|
||||
<string name="add_public_reply">Добавить публичный ответ</string>
|
||||
<string name="activity">Действия</string>
|
||||
<string name="app">Приложение</string>
|
||||
<string name="notif_new_video">Новое видео из ваших подписок</string>
|
||||
<string name="notif_new_comment">Новый комментарий к вашему видео</string>
|
||||
<string name="notif_blocked">Одно из ваших видео заблокировано/разблокировано</string>
|
||||
<string name="notif_video_published">Видео опубликовано (после перекодирования/запланированного обновления)</string>
|
||||
<string name="notif_video_imported">Импорт видео завершен</string>
|
||||
<string name="notif_new_followers">Вы или ваш канал(ы) имеет нового подписчика</string>
|
||||
<string name="notif_video_mention">Кто-то упомянул вас в видео комментариях</string>
|
||||
<string name="notif_abuse_received">Отчет о злоупотреблениях получил новое сообщение</string>
|
||||
<string name="notif_abuse_accepted">Одно из ваших сообщений о злоупотреблениях было принято или отклонено модераторами</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d ответ</item>
|
||||
<item quantity="few">%d ответов</item>
|
||||
@ -36,9 +62,25 @@
|
||||
<string name="upload_video">Загрузить</string>
|
||||
<string name="image_preview">Предпросмотр изображения</string>
|
||||
<string name="file_to_upload">Выберите файл для загрузки</string>
|
||||
<string name="new_video">Новое видео</string>
|
||||
<string name="new_blacklist">Информация о новом черном списке</string>
|
||||
<string name="new_my_video_published">Ваше видео опубликовано</string>
|
||||
<string name="new_my_video_error">Ошибка при публикации вашего видео</string>
|
||||
<string name="new_comment">Новый комментарий</string>
|
||||
<string name="new_follow">Новая подписка</string>
|
||||
<string name="channel">Канал</string>
|
||||
<string name="videos">Видео</string>
|
||||
<string name="channels">Каналы</string>
|
||||
<string name="refresh_every">Получить каждые:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Никогда</item>
|
||||
<item>15 минут</item>
|
||||
<item>30 минут</item>
|
||||
<item>1 час</item>
|
||||
<item>2 часа</item>
|
||||
<item>6 часов</item>
|
||||
<item>12 часов</item>
|
||||
</string-array>
|
||||
<string name="yes">Да</string>
|
||||
<string name="no">Нет</string>
|
||||
<string name="cancel">Отмена</string>
|
||||
@ -58,6 +100,7 @@
|
||||
<string name="video_uploaded_action">Нажмите здесь, чтобы редактировать данные видео.</string>
|
||||
<string name="toot_select_image_error">При выборе медиафайла произошла ошибка!</string>
|
||||
<string name="download_file">Скачать %1$s</string>
|
||||
<string name="account_updated">Аккаунт обновлен!</string>
|
||||
<string name="action_privacy">Конфиденциальность</string>
|
||||
<string name="action_logout">Выход</string>
|
||||
<string name="login">Войти</string>
|
||||
@ -205,7 +248,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>По умолчанию</item>
|
||||
<item>Веб-просмотр</item>
|
||||
<item>Прямой поток</item>
|
||||
<item>Magnet-ссылка</item>
|
||||
<item>Торрент</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Светлая</item>
|
||||
@ -261,6 +305,7 @@
|
||||
<string name="pickup_categories">Выбрать категории</string>
|
||||
<string name="pickup_languages">Выбрать языки</string>
|
||||
<string name="notification_channel_name">Обновить данные</string>
|
||||
<string name="fetch_notification_channel_name">Получать уведомления</string>
|
||||
<string name="add_account">Добавление аккаунта</string>
|
||||
<string name="list_of_accounts">Список аккаунтов</string>
|
||||
<string name="pause">Пауза</string>
|
||||
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Add a public reply</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d svar</item>
|
||||
<item quantity="other">%d svar</item>
|
||||
@ -34,9 +60,25 @@
|
||||
<string name="upload_video">Ladda upp</string>
|
||||
<string name="image_preview">Förhandsvisning</string>
|
||||
<string name="file_to_upload">Välj en fil som ska laddas upp</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">Kanal</string>
|
||||
<string name="videos">Videor</string>
|
||||
<string name="channels">Kanal</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nej</string>
|
||||
<string name="cancel">Avbryt</string>
|
||||
@ -56,6 +98,7 @@
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">Ett fel uppstod när du valde media!</string>
|
||||
<string name="download_file">Laddat ner %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">Sekretess</string>
|
||||
<string name="action_logout">Logga ut</string>
|
||||
<string name="login">Logga in</string>
|
||||
@ -203,7 +246,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Nomal</item>
|
||||
<item>Webbvy</item>
|
||||
<item>Direktström</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>Ljust</item>
|
||||
@ -259,6 +303,7 @@
|
||||
<string name="pickup_categories">Pick categories</string>
|
||||
<string name="pickup_languages">Pick languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">Lägg till ett konto</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
<string name="pause">Pause</string>
|
||||
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,199 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="title_home">Home</string>
|
||||
<string name="title_discover">Discover</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
<string name="title_recently_added">Recently added</string>
|
||||
<string name="title_trending">Trending</string>
|
||||
<string name="title_most_liked">Most liked</string>
|
||||
<string name="toast_error">Oops! An error occurred!</string>
|
||||
<string name="title_muted">Muted</string>
|
||||
<string name="title_channel">Channels</string>
|
||||
<string name="do_not_list">Do not list</string>
|
||||
<string name="blur">Blur</string>
|
||||
<string name="display">Display</string>
|
||||
<string name="no_opinion">No opinion</string>
|
||||
<string name="instance_choice">Pickup an instance</string>
|
||||
<string name="not_valide_instance">This instance does not seem to be valid!</string>
|
||||
<string name="no_videos">No videos!</string>
|
||||
<string name="favicon">Favicon</string>
|
||||
<string name="open_with">Open with</string>
|
||||
<string name="action_playlist_edit">Edit a playlist</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="upload_video">Upload</string>
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="profile_picture">Profile picture</string>
|
||||
<string name="update_video">Update video</string>
|
||||
<string name="date_seconds">%d s</string>
|
||||
<string name="date_minutes">%d m</string>
|
||||
<string name="date_hours">%d h</string>
|
||||
<string name="date_day">%d d</string>
|
||||
<string name="number_view_video">%s views</string>
|
||||
<string name="title_instance_login">Instance host</string>
|
||||
<string name="uploading">Uploading, please wait…</string>
|
||||
<string name="upload_video_success">The video has been uploaded!</string>
|
||||
<string name="toast_cancelled">Upload cancelled!</string>
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">An error occurred while selecting the media!</string>
|
||||
<string name="download_file">Download %1$s</string>
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
<string name="login">Login</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="tags">Tags</string>
|
||||
<string name="validate">Validate</string>
|
||||
<string name="share_with">Share with</string>
|
||||
<string name="shared_via">Shared via TubeLab</string>
|
||||
<string name="username">User name</string>
|
||||
<string name="settings">Settings</string>
|
||||
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
|
||||
<string name="following">Following</string>
|
||||
<string name="followers">Followers</string>
|
||||
<string name="client_error">Unable to get client id!</string>
|
||||
<string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
|
||||
<string name="toast_error_search">An error occurred while searching!</string>
|
||||
<string name="nothing_to_do">No action can be taken</string>
|
||||
<string name="action_follow">Follow</string>
|
||||
<string name="action_mute">Mute</string>
|
||||
<string name="search">Search</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
|
||||
<string name="action_lists_delete">Delete list</string>
|
||||
<string name="no_comments">Be the first to leave a comment on this video with the top right button!</string>
|
||||
<string name="comment_no_allowed_peertube">Comments are not enabled on this video!</string>
|
||||
<string name="pickup_resolution">Pick up a resolution</string>
|
||||
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
|
||||
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
|
||||
<string name="information" tools:ignore="UnusedResources">Information</string>
|
||||
<string name="app_logo">Logo of the application</string>
|
||||
<!-- languages not translated -->
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="delete_comment">Delete a comment</string>
|
||||
<string name="delete_comment_confirm">Are you sure to delete this comment?</string>
|
||||
<string name="set_video_mode">Mode for videos</string>
|
||||
<string name="my_videos">My videos</string>
|
||||
<string name="title">Title</string>
|
||||
<string name="license">License</string>
|
||||
<string name="category">Category</string>
|
||||
<string name="language">Language</string>
|
||||
<string name="peertube_nsfw">This video contains mature or explicit content</string>
|
||||
<string name="peertube_enable_comments">Enable video comments</string>
|
||||
<string name="description">Description</string>
|
||||
<string name="toast_peertube_video_updated">The video has been updated!</string>
|
||||
<string name="register_account">Register an account</string>
|
||||
<string name="email_address">Email address</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="change_preview">Change preview</string>
|
||||
<string name="name">Name</string>
|
||||
<string name="display_more">Display more</string>
|
||||
<string name="no_channels">No channels!</string>
|
||||
<string name="report_helper">Some explanations about your report…</string>
|
||||
<string name="report_video">Report video</string>
|
||||
<string name="report">Report</string>
|
||||
<string name="change_instance">Pickup another instance</string>
|
||||
<string name="my_history">History</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="set_video_mode_description">Allows to change mode for playing videos (default, streaming or via a browser).</string>
|
||||
<string name="delete_video">Delete video</string>
|
||||
<string name="delete_video_confirmation">Are you sure to delete this video?</string>
|
||||
<string name="no_video_to_display">No videos to display!</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> commented your video <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> is following your channel <b>%2$s</b>]]></string>
|
||||
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> is following your account]]></string>
|
||||
<string name="peertube_video_published"><![CDATA[Your video <b>%1$s</b> has been published]]></string>
|
||||
<string name="peertube_video_import_success"><![CDATA[Your video import <b>%1$s</b> succeeded]]></string>
|
||||
<string name="peertube_video_import_error"><![CDATA[Your video import <b>%1$s</b> failed]]></string>
|
||||
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> published a new video: <b>%2$s</b>]]></string>
|
||||
<string name="peertube_video_blacklist"><![CDATA[Your video <b>%1$s</b> has been blacklisted]]></string>
|
||||
<string name="peertube_video_unblacklist"><![CDATA[Your video <b>%1$s</b> has been unblacklisted]]></string>
|
||||
<string name="add_public_comment">Add a public comment</string>
|
||||
<string name="send_comment">Send comment</string>
|
||||
<string name="all">All</string>
|
||||
<!-- end languages -->
|
||||
<string name="playlists">Playlists</string>
|
||||
<string name="display_name">Display name</string>
|
||||
<string name="action_playlist_add">You don\'t have any playlists. Tap on the \"+\" icon to add a new playlist</string>
|
||||
<string name="error_display_name">You must provide a display name!</string>
|
||||
<string name="error_channel_mandatory">The channel is required when the playlist is public.</string>
|
||||
<string name="action_playlist_create">Create a playlist</string>
|
||||
<string name="action_playlist_empty_content">There is nothing in this playlist yet.</string>
|
||||
<string name="password_confirm">Confirm password</string>
|
||||
<string name="agreement_check">I agree to %1$s and %2$s</string>
|
||||
<string name="server_rules">server rules</string>
|
||||
<string name="tos">terms of service</string>
|
||||
<string name="sign_up">Sign up</string>
|
||||
<string name="all_field_filled">Please, fill all the fields!</string>
|
||||
<string name="password_error">Passwords don\'t match!</string>
|
||||
<string name="email_error">The email doesn\'t seem to be valid!</string>
|
||||
<string name="email_indicator">You will be sent a confirmation e-mail</string>
|
||||
<string name="password_indicator">Use at least 8 characters</string>
|
||||
<string name="password_too_short">Password should contain at least 8 characters</string>
|
||||
<string name="username_error">Username should only contain letters, numbers and underscores</string>
|
||||
<string name="account_created">Account created!</string>
|
||||
<string name="account_created_message"> Your account has been created!\n\n
|
||||
Think to validate your email within the 48 next hours.\n\n
|
||||
You can now connect your account by writing <b>%1$s</b> in the first field and tap on <b>Connect</b>.\n\n
|
||||
<b>Important</b>: If your instance required validation, you will receive an email once it is validated!
|
||||
</string>
|
||||
<string name="account">Account</string>
|
||||
<string name="report_account">Report account</string>
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
</string-array>
|
||||
<string name="unfollow_confirm">Do you want to unfollow this account?</string>
|
||||
<string name="title_video_peertube">Title for the video</string>
|
||||
<string name="join_peertube">Join Peertube</string>
|
||||
<string name="agreement_check_peertube">I am at least 16 years old and agree to the %1$s of this instance</string>
|
||||
<string name="edit_profile">Edit profile</string>
|
||||
<string name="make_an_action">Make an action</string>
|
||||
<string name="action_unfollow">Unfollow</string>
|
||||
<string name="display_nsfw_videos">Display sensitive videos</string>
|
||||
<string name="fullscreen">Fullscreen</string>
|
||||
<string name="bookmark_peertube_empty">There are no videos in your favourites!</string>
|
||||
<string name="delete_channel">Remove channel</string>
|
||||
<string name="action_channel_confirm_delete">Are you sure to permanently delete this channel?</string>
|
||||
<string name="no_muted">No muted accounts!</string>
|
||||
<string name="error_display_name_channel">You must define a name and a display name for this channel!</string>
|
||||
<string name="action_channel_create">Create a channel</string>
|
||||
<string name="action_channel_edit">Edit channel</string>
|
||||
<string name="email_error_domain">Email addresses in %1$s are not allowed!</string>
|
||||
<string name="report_comment_size">Please, specify the reasons</string>
|
||||
<string name="not_logged_in">You must be authenticated to proceed to this action!</string>
|
||||
<string name="successful_report">The account has been reported!</string>
|
||||
<string name="successful_video_report">The video has been reported!</string>
|
||||
<string name="password_length_error">The password must contain at least 6 characters!</string>
|
||||
<string name="muted_done">The account has been muted!</string>
|
||||
<string name="edit_video">Edit video</string>
|
||||
<string name="create_an_account">Create an account</string>
|
||||
<string name="followers_count">%1$s Subscribers</string>
|
||||
<string name="developer">Developer</string>
|
||||
<string name="about_vesrion">Release %1$s</string>
|
||||
<string name="about_the_app">About the app</string>
|
||||
<string name="Donate">Donate</string>
|
||||
<string name="source_code">Source code</string>
|
||||
<string name="issue_tracker">Issue tracker</string>
|
||||
<string name="action_instance_empty_content">No instances match these criteria</string>
|
||||
<string name="instances_picker">Instances picker</string>
|
||||
<string name="pickup_instance">Pickup this instance</string>
|
||||
<string name="sensitive_video"> Sensitive videos</string>
|
||||
<string name="sensitive_content">Sensitive content: %1$s</string>
|
||||
<string name="followers_instance">%1$s followers instances</string>
|
||||
<string name="help">Help</string>
|
||||
<string name="pickup_categories">Pickup categories</string>
|
||||
<string name="pickup_languages">Pickup languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
</resources>
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">添加公开回复</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="other">%d 条回复</item>
|
||||
</plurals>
|
||||
@ -33,9 +59,25 @@
|
||||
<string name="upload_video">上传</string>
|
||||
<string name="image_preview">图像预览</string>
|
||||
<string name="file_to_upload">选择要上传的文件</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">频道</string>
|
||||
<string name="videos">视频</string>
|
||||
<string name="channels">频道</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">是</string>
|
||||
<string name="no">否</string>
|
||||
<string name="cancel">取消</string>
|
||||
@ -55,6 +97,7 @@
|
||||
<string name="video_uploaded_action">点击此处以编辑视频内容。</string>
|
||||
<string name="toot_select_image_error">选择媒体文件时出现了错误!</string>
|
||||
<string name="download_file">下载 %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">隐私</string>
|
||||
<string name="action_logout">登出</string>
|
||||
<string name="login">登录</string>
|
||||
@ -201,7 +244,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>标准</item>
|
||||
<item>网页播放器</item>
|
||||
<item>串流</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>亮色</item>
|
||||
@ -257,6 +301,7 @@
|
||||
<string name="pickup_categories">选择类别</string>
|
||||
<string name="pickup_languages">选择语言</string>
|
||||
<string name="notification_channel_name">更新信息</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">添加账号</string>
|
||||
<string name="list_of_accounts">账号列表</string>
|
||||
<string name="pause">暂停</string>
|
||||
|
@ -1,6 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Add a public reply</string>
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="other">%d 條回覆</item>
|
||||
</plurals>
|
||||
@ -33,9 +59,25 @@
|
||||
<string name="upload_video">上傳</string>
|
||||
<string name="image_preview">圖片預覽</string>
|
||||
<string name="file_to_upload">選取要上傳的檔案</string>
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
<string name="channel">頻道</string>
|
||||
<string name="videos">影片</string>
|
||||
<string name="channels">頻道</string>
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
<string name="yes">是</string>
|
||||
<string name="no">否</string>
|
||||
<string name="cancel">取消</string>
|
||||
@ -55,6 +97,7 @@
|
||||
<string name="video_uploaded_action">Tap here to edit the video data.</string>
|
||||
<string name="toot_select_image_error">選擇媒體時發生錯誤!</string>
|
||||
<string name="download_file">下載 %1$s</string>
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
<string name="action_privacy">隱私權</string>
|
||||
<string name="action_logout">登出</string>
|
||||
<string name="login">登入</string>
|
||||
@ -202,7 +245,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>正常</item>
|
||||
<item>Torrent</item>
|
||||
<item>Webview</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
<string-array name="settings_theme">
|
||||
<item>亮</item>
|
||||
@ -258,6 +302,7 @@
|
||||
<string name="pickup_categories">Pick categories</string>
|
||||
<string name="pickup_languages">Pick languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
<string name="add_account">新增帳號</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
<string name="pause">Pause</string>
|
||||
|
@ -1,14 +1,52 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="app_name" translatable="false">Tubelab</string>
|
||||
<string name="app_id" translatable="false">app.fedilab.tubelab</string>
|
||||
<string name="set_video_mode_choice" translatable="false">set_video_mode_choice</string>
|
||||
<string name="set_video_minimize_choice" translatable="false">set_video_minimize_choice</string>
|
||||
<string name="set_video_language_choice" translatable="false">set_video_language_choice</string>
|
||||
<string name="set_video_quality_choice" translatable="false">set_video_quality_choice</string>
|
||||
<string name="set_video_cache_choice" translatable="false">set_video_cache_choice</string>
|
||||
<string name="set_autoplay_choice" translatable="false">set_autoplay_choice</string>
|
||||
<string name="set_store_in_history" translatable="false">set_store_in_history</string>
|
||||
<string name="set_autoplay_next_video_choice" translatable="false">set_autoplay_next_video_choice</string>
|
||||
<string name="set_theme_choice" translatable="false">set_theme_choice</string>
|
||||
<string name="set_fullscreen_choice" translatable="false">set_fullscreen_choice</string>
|
||||
<string name="set_play_screen_lock_choice" translatable="false">set_play_screen_lock_choice</string>
|
||||
<string name="set_video_in_list_choice" translatable="false">set_video_in_list_choice</string>
|
||||
<string name="set_video_sensitive_choice" translatable="false">set_video_sensitive_choice</string>
|
||||
<string name="set_video_in_list">Videos in list</string>
|
||||
<string name="set_video_in_list_description">Change the layout for displaying videos in a list</string>
|
||||
|
||||
<string name="show_more">Show more</string>
|
||||
<string name="show_less">Show less</string>
|
||||
|
||||
<string name="set_play_screen_lock">Screen lock</string>
|
||||
<string name="set_play_screen_lock_description">Keep playing videos when the screen is locked</string>
|
||||
|
||||
<string name="save">Save</string>
|
||||
<string name="enable_history">Enable history</string>
|
||||
<string name="change_profile_picture">Change profile picture</string>
|
||||
<string name="set_autoplay">Automatic playback</string>
|
||||
<string name="set_autoplay_description">If enabled, videos will be played automatically</string>
|
||||
|
||||
<string name="set_fullscreen">Fullscreen</string>
|
||||
<string name="set_fullscreen_description">Automatically open videos in fullscreen</string>
|
||||
<string name="set_autoplay_next_video">Automatically start playing the next video</string>
|
||||
<string name="set_autoplay_next_video_description">When a video ends, follow up with the next suggested video.</string>
|
||||
<string name="add_public_reply">Add a public reply</string>
|
||||
|
||||
<string name="activity">Activity</string>
|
||||
<string name="app">App</string>
|
||||
<string name="notif_new_video">New video from your subscriptions</string>
|
||||
<string name="notif_new_comment">New comment on your video</string>
|
||||
<string name="notif_blocked">One of your video is blocked/unblocked</string>
|
||||
<string name="notif_video_published">Video published (after transcoding/scheduled update)</string>
|
||||
<string name="notif_video_imported">Video import finished</string>
|
||||
<string name="notif_new_followers">You or your channel(s) has a new follower</string>
|
||||
<string name="notif_video_mention">Someone mentioned you in video comments</string>
|
||||
<string name="notif_abuse_received">An abuse report received a new message</string>
|
||||
<string name="notif_abuse_accepted">One of your abuse reports has been accepted or rejected by moderators</string>
|
||||
|
||||
<plurals name="number_of_replies">
|
||||
<item quantity="one">%d reply</item>
|
||||
<item quantity="other">%d replies</item>
|
||||
@ -43,10 +81,28 @@
|
||||
<string name="image_preview">Image preview</string>
|
||||
<string name="file_to_upload">Select the file to upload</string>
|
||||
|
||||
<string name="new_video">New video</string>
|
||||
<string name="new_blacklist">New blacklist info</string>
|
||||
<string name="new_my_video_published">Your video is published</string>
|
||||
<string name="new_my_video_error">Error when publishing your video</string>
|
||||
<string name="new_comment">New comment</string>
|
||||
<string name="new_follow">New follow</string>
|
||||
|
||||
<string name="channel">Channel</string>
|
||||
<string name="videos">Videos</string>
|
||||
<string name="channels">Channels</string>
|
||||
|
||||
<string name="refresh_every">Fetch every:</string>
|
||||
<string-array name="refresh_time">
|
||||
<item>Never</item>
|
||||
<item>15 minutes</item>
|
||||
<item>30 minutes</item>
|
||||
<item>1 hour</item>
|
||||
<item>2 hours</item>
|
||||
<item>6 hours</item>
|
||||
<item>12 hours</item>
|
||||
</string-array>
|
||||
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
@ -71,6 +127,7 @@
|
||||
|
||||
<string name="download_file">Download %1$s</string>
|
||||
|
||||
<string name="account_updated">The account has been updated!</string>
|
||||
|
||||
<string name="action_privacy">Privacy</string>
|
||||
<string name="action_logout">Logout</string>
|
||||
@ -255,7 +312,8 @@
|
||||
<string-array name="settings_video_mode">
|
||||
<item>Normal</item>
|
||||
<item>Webview</item>
|
||||
<item>Direct stream</item>
|
||||
<item>Magnet</item>
|
||||
<item>Torrent</item>
|
||||
</string-array>
|
||||
|
||||
|
||||
@ -335,6 +393,7 @@
|
||||
<string name="pickup_categories">Pick categories</string>
|
||||
<string name="pickup_languages">Pick languages</string>
|
||||
<string name="notification_channel_name">Update information</string>
|
||||
<string name="fetch_notification_channel_name">Fetch notifications</string>
|
||||
|
||||
<string name="add_account">Add an account</string>
|
||||
<string name="list_of_accounts">List of accounts</string>
|
||||
|
34
app/src/google_full/AndroidManifest.xml
Normal file
34
app/src/google_full/AndroidManifest.xml
Normal file
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="app.fedilab.fedilabtube">
|
||||
|
||||
|
||||
<application
|
||||
android:name=".FedilabTube"
|
||||
android:allowBackup="false"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
tools:replace="android:allowBackup">
|
||||
|
||||
<activity
|
||||
android:name=".PeertubeActivity"
|
||||
tools:node="mergeOnlyAttributes">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<!-- The app is a good candidate for URL in https://domain.name/videos/watch/xxxxx-->
|
||||
<data
|
||||
android:host="*"
|
||||
android:pathPrefix="/videos/watch/"
|
||||
android:scheme="https" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
</application>
|
||||
</manifest>
|
@ -18,7 +18,7 @@
|
||||
<application
|
||||
android:name=".FedilabTube"
|
||||
android:allowBackup="false"
|
||||
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
@ -68,6 +68,11 @@
|
||||
android:configChanges="orientation|screenSize"
|
||||
android:label="@string/app_name"
|
||||
android:windowSoftInputMode="stateAlwaysHidden" />
|
||||
<activity
|
||||
android:name=".MyAccountActivity"
|
||||
android:configChanges="orientation|screenSize"
|
||||
android:label="@string/app_name"
|
||||
android:windowSoftInputMode="stateAlwaysHidden" />
|
||||
<activity
|
||||
android:name=".SearchActivity"
|
||||
android:configChanges="orientation|screenSize"
|
||||
@ -145,6 +150,12 @@
|
||||
<action android:name="app.fedilab.fedilabtube.uploadservice.broadcast.status" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<provider
|
||||
android:name="androidx.work.impl.WorkManagerInitializer"
|
||||
android:authorities="${applicationId}.workmanager-init"
|
||||
tools:node="remove"
|
||||
android:exported="false" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
@ -19,13 +19,34 @@ import android.content.SharedPreferences;
|
||||
|
||||
import androidx.multidex.MultiDex;
|
||||
import androidx.multidex.MultiDexApplication;
|
||||
import androidx.work.Configuration;
|
||||
import androidx.work.WorkManager;
|
||||
|
||||
import net.gotev.uploadservice.UploadService;
|
||||
|
||||
import app.fedilab.fedilabtube.helper.Helper;
|
||||
import app.fedilab.fedilabtube.helper.ThemeHelper;
|
||||
import app.fedilab.fedilabtube.worker.WorkHelper;
|
||||
|
||||
public class FedilabTube extends MultiDexApplication {
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
int interval = sharedpreferences.getInt(Helper.NOTIFICATION_INTERVAL, 60);
|
||||
|
||||
Configuration myConfig = new Configuration.Builder()
|
||||
.setMinimumLoggingLevel(android.util.Log.INFO)
|
||||
.build();
|
||||
WorkManager.initialize(FedilabTube.this, myConfig);
|
||||
if( interval >= 15 ) {
|
||||
WorkHelper.fetchNotifications(this, interval);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void attachBaseContext(Context base) {
|
||||
super.attachBaseContext(base);
|
||||
@ -36,6 +57,8 @@ public class FedilabTube extends MultiDexApplication {
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
int themePref = sharedpreferences.getInt(Helper.SET_THEME, Helper.DEFAULT_MODE);
|
||||
ThemeHelper.switchTo(themePref);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -22,20 +22,18 @@ import android.text.SpannableString;
|
||||
import android.text.Spanned;
|
||||
import android.text.style.ForegroundColorSpan;
|
||||
import android.text.style.UnderlineSpan;
|
||||
import android.util.Patterns;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Arrays;
|
||||
|
||||
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
|
||||
@ -43,6 +41,7 @@ import app.fedilab.fedilabtube.client.entities.Error;
|
||||
import app.fedilab.fedilabtube.client.entities.Oauth;
|
||||
import app.fedilab.fedilabtube.client.entities.OauthParams;
|
||||
import app.fedilab.fedilabtube.client.entities.Token;
|
||||
import app.fedilab.fedilabtube.databinding.ActivityLoginBinding;
|
||||
import app.fedilab.fedilabtube.helper.Helper;
|
||||
import es.dmoral.toasty.Toasty;
|
||||
|
||||
@ -54,29 +53,26 @@ public class LoginActivity extends AppCompatActivity {
|
||||
|
||||
private static String client_id;
|
||||
private static String client_secret;
|
||||
private EditText login_uid;
|
||||
private EditText login_passwd;
|
||||
private Button connectionButton;
|
||||
private TextInputEditText login_instance;
|
||||
private ActivityLoginBinding binding;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = ActivityLoginBinding.inflate(getLayoutInflater());
|
||||
View view = binding.getRoot();
|
||||
setContentView(view);
|
||||
|
||||
|
||||
setContentView(R.layout.activity_login);
|
||||
if (getSupportActionBar() != null)
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
TextView create_an_account_peertube = findViewById(R.id.create_an_account_peertube);
|
||||
|
||||
SpannableString content_create = new SpannableString(getString(R.string.join_peertube));
|
||||
content_create.setSpan(new UnderlineSpan(), 0, content_create.length(), 0);
|
||||
content_create.setSpan(new ForegroundColorSpan(ContextCompat.getColor(LoginActivity.this, Helper.getColorAccent())), 0, content_create.length(),
|
||||
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
create_an_account_peertube.setText(content_create);
|
||||
binding.createAnAccountPeertube.setText(content_create, TextView.BufferType.SPANNABLE);
|
||||
|
||||
create_an_account_peertube.setOnClickListener(v -> {
|
||||
binding.createAnAccountPeertube.setOnClickListener(v -> {
|
||||
Intent mainActivity = new Intent(LoginActivity.this, PeertubeRegisterActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
mainActivity.putExtras(b);
|
||||
@ -84,42 +80,35 @@ public class LoginActivity extends AppCompatActivity {
|
||||
});
|
||||
|
||||
|
||||
TextInputLayout login_instance_container = findViewById(R.id.login_instance_container);
|
||||
login_instance = findViewById(R.id.login_instance);
|
||||
if (BuildConfig.full_instances) {
|
||||
login_instance_container.setVisibility(View.VISIBLE);
|
||||
binding.loginInstanceContainer.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
login_uid = findViewById(R.id.login_uid);
|
||||
login_passwd = findViewById(R.id.login_passwd);
|
||||
|
||||
if (Helper.isTablet(LoginActivity.this)) {
|
||||
|
||||
ViewGroup.LayoutParams layoutParamsI = login_instance_container.getLayoutParams();
|
||||
ViewGroup.LayoutParams layoutParamsI = binding.loginInstanceContainer.getLayoutParams();
|
||||
layoutParamsI.width = (int) Helper.convertDpToPixel(300, LoginActivity.this);
|
||||
login_instance_container.setLayoutParams(layoutParamsI);
|
||||
binding.loginInstanceContainer.setLayoutParams(layoutParamsI);
|
||||
|
||||
TextInputLayout login_uid_container = findViewById(R.id.login_uid_container);
|
||||
ViewGroup.LayoutParams layoutParamsU = login_uid_container.getLayoutParams();
|
||||
ViewGroup.LayoutParams layoutParamsU = binding.loginUidContainer.getLayoutParams();
|
||||
layoutParamsU.width = (int) Helper.convertDpToPixel(300, LoginActivity.this);
|
||||
login_uid_container.setLayoutParams(layoutParamsU);
|
||||
binding.loginUidContainer.setLayoutParams(layoutParamsU);
|
||||
|
||||
TextInputLayout login_passwd_container = findViewById(R.id.login_passwd_container);
|
||||
ViewGroup.LayoutParams layoutParamsP = login_passwd_container.getLayoutParams();
|
||||
ViewGroup.LayoutParams layoutParamsP = binding.loginPasswdContainer.getLayoutParams();
|
||||
layoutParamsP.width = (int) Helper.convertDpToPixel(300, LoginActivity.this);
|
||||
login_passwd_container.setLayoutParams(layoutParamsP);
|
||||
binding.loginPasswdContainer.setLayoutParams(layoutParamsP);
|
||||
}
|
||||
|
||||
|
||||
connectionButton = findViewById(R.id.login_button);
|
||||
|
||||
if (!BuildConfig.full_instances) {
|
||||
login_uid.setOnFocusChangeListener((v, hasFocus) -> {
|
||||
binding.loginUid.setOnFocusChangeListener((v, hasFocus) -> {
|
||||
if (!hasFocus) {
|
||||
if (android.util.Patterns.EMAIL_ADDRESS.matcher(login_uid.getText().toString().trim()).matches()) {
|
||||
String[] emailArray = login_uid.getText().toString().split("@");
|
||||
if (binding.loginUid.getText() != null && android.util.Patterns.EMAIL_ADDRESS.matcher(binding.loginUid.getText().toString().trim()).matches()) {
|
||||
String[] emailArray = binding.loginUid.getText().toString().split("@");
|
||||
if (emailArray.length > 1 && Arrays.asList(Helper.openid).contains(emailArray[1])) {
|
||||
connectionButton.callOnClick();
|
||||
binding.loginButton.callOnClick();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -127,38 +116,55 @@ public class LoginActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
|
||||
connectionButton.setOnClickListener(v -> {
|
||||
binding.loginButton.setOnClickListener(v -> {
|
||||
|
||||
if (login_uid.getText().toString().contains("@") && !android.util.Patterns.EMAIL_ADDRESS.matcher(login_uid.getText().toString().trim()).matches()) {
|
||||
if (binding.loginUid.getText() != null && binding.loginUid.getText().toString().contains("@") && !android.util.Patterns.EMAIL_ADDRESS.matcher(binding.loginUid.getText().toString().trim()).matches()) {
|
||||
Toasty.error(LoginActivity.this, getString(R.string.email_error)).show();
|
||||
return;
|
||||
}
|
||||
connectionButton.setEnabled(false);
|
||||
binding.loginButton.setEnabled(false);
|
||||
String instance, host;
|
||||
if (!BuildConfig.full_instances) {
|
||||
String[] emailArray = login_uid.getText().toString().split("@");
|
||||
String[] emailArray = binding.loginUid.getText().toString().split("@");
|
||||
if (emailArray.length > 1 && !Arrays.asList(Helper.valideEmails).contains(emailArray[1])) {
|
||||
Toasty.error(LoginActivity.this, getString(R.string.email_error_domain, emailArray[1])).show();
|
||||
connectionButton.setEnabled(true);
|
||||
binding.loginButton.setEnabled(true);
|
||||
return;
|
||||
}
|
||||
host = emailArray[1];
|
||||
instance = Helper.getPeertubeUrl(host);
|
||||
} else {
|
||||
if (login_instance == null || login_instance.getText() == null || login_instance.getText().toString().trim().length() == 0) {
|
||||
if (binding.loginInstance.getText() == null || binding.loginInstance.getText().toString().trim().length() == 0) {
|
||||
Toasty.error(LoginActivity.this, getString(R.string.not_valide_instance)).show();
|
||||
connectionButton.setEnabled(true);
|
||||
binding.loginButton.setEnabled(true);
|
||||
return;
|
||||
}
|
||||
instance = host = login_instance.getText().toString().trim().toLowerCase();
|
||||
instance = host = binding.loginInstance.getText().toString().trim().toLowerCase();
|
||||
}
|
||||
|
||||
if( instance.startsWith("http")) {
|
||||
try {
|
||||
URL url = new URL(instance);
|
||||
instance = url.getHost();
|
||||
host = instance;
|
||||
} catch (MalformedURLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if (!Patterns.WEB_URL.matcher("https://"+instance).matches()) {
|
||||
Toasty.error(LoginActivity.this, getString(R.string.not_valide_instance)).show();
|
||||
binding.loginButton.setEnabled(true);
|
||||
return;
|
||||
}
|
||||
String finalInstance = instance;
|
||||
String finalHost = host;
|
||||
if (Arrays.asList(Helper.openid).contains(host) && !BuildConfig.full_instances) {
|
||||
new Thread(() -> {
|
||||
try {
|
||||
Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).oauthClient(null, null, null, null);
|
||||
Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, finalInstance, null).oauthClient(null, null, null, null);
|
||||
if (oauth == null) {
|
||||
runOnUiThread(() -> {
|
||||
connectionButton.setEnabled(true);
|
||||
binding.loginButton.setEnabled(true);
|
||||
Toasty.error(LoginActivity.this, getString(R.string.client_error), Toast.LENGTH_LONG).show();
|
||||
});
|
||||
return;
|
||||
@ -172,14 +178,14 @@ public class LoginActivity extends AppCompatActivity {
|
||||
editor.apply();
|
||||
Intent intent = new Intent(LoginActivity.this, WebviewConnectActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
b.putString("url", "https://" + Helper.getPeertubeUrl(host) + "/plugins/auth-openid-connect/0.0.1/auth/openid-connect");
|
||||
b.putString("url", "https://" + Helper.getPeertubeUrl(finalHost) + "/plugins/auth-openid-connect/0.0.1/auth/openid-connect");
|
||||
intent.putExtras(b);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(intent);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
runOnUiThread(() -> {
|
||||
connectionButton.setEnabled(true);
|
||||
binding.loginButton.setEnabled(true);
|
||||
Toasty.error(LoginActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
|
||||
});
|
||||
}
|
||||
@ -187,10 +193,10 @@ public class LoginActivity extends AppCompatActivity {
|
||||
}).start();
|
||||
} else {
|
||||
new Thread(() -> {
|
||||
Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).oauthClient(Helper.CLIENT_NAME_VALUE, Helper.WEBSITE_VALUE, Helper.OAUTH_SCOPES_PEERTUBE, Helper.WEBSITE_VALUE);
|
||||
Oauth oauth = new RetrofitPeertubeAPI(LoginActivity.this, finalInstance, null).oauthClient(Helper.CLIENT_NAME_VALUE, Helper.WEBSITE_VALUE, Helper.OAUTH_SCOPES_PEERTUBE, Helper.WEBSITE_VALUE);
|
||||
if (oauth == null) {
|
||||
runOnUiThread(() -> {
|
||||
connectionButton.setEnabled(true);
|
||||
binding.loginButton.setEnabled(true);
|
||||
Toasty.error(LoginActivity.this, getString(R.string.client_error), Toast.LENGTH_LONG).show();
|
||||
});
|
||||
return;
|
||||
@ -209,20 +215,22 @@ public class LoginActivity extends AppCompatActivity {
|
||||
oauthParams.setClient_secret(client_secret);
|
||||
oauthParams.setGrant_type("password");
|
||||
oauthParams.setScope("user");
|
||||
oauthParams.setUsername(login_uid.getText().toString().trim());
|
||||
oauthParams.setPassword(login_passwd.getText().toString());
|
||||
oauthParams.setUsername(binding.loginUid.getText().toString().trim());
|
||||
if( binding.loginPasswd.getText() != null) {
|
||||
oauthParams.setPassword(binding.loginPasswd.getText().toString());
|
||||
}
|
||||
try {
|
||||
Token token = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).manageToken(oauthParams);
|
||||
proceedLogin(token, host);
|
||||
Token token = new RetrofitPeertubeAPI(LoginActivity.this, finalInstance, null).manageToken(oauthParams);
|
||||
proceedLogin(token, finalHost);
|
||||
} catch (final Exception | Error e) {
|
||||
oauthParams.setUsername(login_uid.getText().toString().toLowerCase().trim());
|
||||
oauthParams.setUsername(binding.loginUid.getText().toString().toLowerCase().trim());
|
||||
try {
|
||||
Token token = new RetrofitPeertubeAPI(LoginActivity.this, instance, null).manageToken(oauthParams);
|
||||
proceedLogin(token, host);
|
||||
Token token = new RetrofitPeertubeAPI(LoginActivity.this, finalInstance, null).manageToken(oauthParams);
|
||||
proceedLogin(token, finalHost);
|
||||
} catch (Error error) {
|
||||
Error.displayError(LoginActivity.this, error);
|
||||
error.printStackTrace();
|
||||
runOnUiThread(() -> connectionButton.setEnabled(true));
|
||||
runOnUiThread(() -> binding.loginButton.setEnabled(true));
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
@ -243,7 +251,7 @@ public class LoginActivity extends AppCompatActivity {
|
||||
//Update the account with the token;
|
||||
updateCredential(LoginActivity.this, token.getAccess_token(), client_id, client_secret, token.getRefresh_token(), host);
|
||||
} else {
|
||||
connectionButton.setEnabled(true);
|
||||
binding.loginButton.setEnabled(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
@ -35,23 +36,29 @@ import androidx.appcompat.widget.SearchView;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
||||
import com.kobakei.ratethisapp.RateThisApp;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
|
||||
import app.fedilab.fedilabtube.client.data.AccountData.Account;
|
||||
import app.fedilab.fedilabtube.client.data.VideoData;
|
||||
import app.fedilab.fedilabtube.client.entities.Error;
|
||||
import app.fedilab.fedilabtube.client.entities.OauthParams;
|
||||
import app.fedilab.fedilabtube.client.entities.PeertubeInformation;
|
||||
import app.fedilab.fedilabtube.client.entities.Token;
|
||||
import app.fedilab.fedilabtube.client.entities.UserMe;
|
||||
import app.fedilab.fedilabtube.client.entities.UserSettings;
|
||||
import app.fedilab.fedilabtube.client.entities.WellKnownNodeinfo;
|
||||
import app.fedilab.fedilabtube.fragment.DisplayOverviewFragment;
|
||||
import app.fedilab.fedilabtube.fragment.DisplayVideosFragment;
|
||||
@ -59,6 +66,7 @@ import app.fedilab.fedilabtube.helper.Helper;
|
||||
import app.fedilab.fedilabtube.services.RetrieveInfoService;
|
||||
import app.fedilab.fedilabtube.sqlite.AccountDAO;
|
||||
import app.fedilab.fedilabtube.sqlite.Sqlite;
|
||||
import app.fedilab.fedilabtube.viewmodel.SearchVM;
|
||||
import app.fedilab.fedilabtube.viewmodel.TimelineVM;
|
||||
import es.dmoral.toasty.Toasty;
|
||||
|
||||
@ -73,6 +81,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
Fragment active;
|
||||
private DisplayVideosFragment recentFragment, locaFragment, trendingFragment, subscriptionFragment, mostLikedFragment;
|
||||
private DisplayOverviewFragment overviewFragment;
|
||||
public static UserMe userMe;
|
||||
|
||||
private final BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
|
||||
= item -> {
|
||||
@ -166,9 +175,10 @@ public class MainActivity extends AppCompatActivity {
|
||||
if (active == null) {
|
||||
active = overviewFragment;
|
||||
}
|
||||
fm.beginTransaction().add(R.id.nav_host_fragment, locaFragment, "5").hide(locaFragment).commit();
|
||||
|
||||
|
||||
if (!Helper.isLoggedIn(MainActivity.this)) {
|
||||
fm.beginTransaction().add(R.id.nav_host_fragment, locaFragment, "5").hide(locaFragment).commit();
|
||||
fm.beginTransaction().add(R.id.nav_host_fragment, recentFragment, "4").hide(recentFragment).commit();
|
||||
fm.beginTransaction().add(R.id.nav_host_fragment, mostLikedFragment, "3").hide(mostLikedFragment).commit();
|
||||
fm.beginTransaction().add(R.id.nav_host_fragment, trendingFragment, "2").hide(trendingFragment).commit();
|
||||
@ -186,30 +196,37 @@ public class MainActivity extends AppCompatActivity {
|
||||
|
||||
if (Helper.isLoggedIn(MainActivity.this)) {
|
||||
navView.inflateMenu(R.menu.bottom_nav_menu_connected);
|
||||
new Thread(() -> {
|
||||
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
String tokenStr = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null);
|
||||
String instance = Helper.getLiveInstance(MainActivity.this);
|
||||
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||
|
||||
String instanceShar = sharedpreferences.getString(Helper.PREF_INSTANCE, null);
|
||||
String userIdShar = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
|
||||
Account account = new AccountDAO(MainActivity.this, db).getAccountByToken(tokenStr);
|
||||
if( account == null) {
|
||||
account = new AccountDAO(MainActivity.this, db).getAccountByIdInstance(userIdShar, instanceShar);
|
||||
}
|
||||
if (account != null) {
|
||||
Account finalAccount = account;
|
||||
OauthParams oauthParams = new OauthParams();
|
||||
oauthParams.setGrant_type("refresh_token");
|
||||
oauthParams.setClient_id(account.getClient_id());
|
||||
oauthParams.setClient_secret(account.getClient_secret());
|
||||
oauthParams.setRefresh_token(account.getRefresh_token());
|
||||
oauthParams.setAccess_token(account.getToken());
|
||||
new Thread(() -> {
|
||||
try {
|
||||
Token token = new RetrofitPeertubeAPI(MainActivity.this).manageToken(oauthParams);
|
||||
if (token == null) {
|
||||
runOnUiThread(() -> Helper.logoutCurrentUser(MainActivity.this, account));
|
||||
if (token == null && Helper.instanceOnline(instance)) {
|
||||
runOnUiThread(() -> Helper.logoutCurrentUser(MainActivity.this, finalAccount));
|
||||
return;
|
||||
}else if(token == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
runOnUiThread(() -> {
|
||||
//To avoid a token issue with subscriptions, adding fragment is done when the token is refreshed.
|
||||
new Handler().post(() -> {
|
||||
fm.beginTransaction().add(R.id.nav_host_fragment, locaFragment, "5").hide(locaFragment).commit();
|
||||
fm.beginTransaction().add(R.id.nav_host_fragment, recentFragment, "4").hide(recentFragment).commitAllowingStateLoss();
|
||||
fm.beginTransaction().add(R.id.nav_host_fragment, trendingFragment, "3").hide(trendingFragment).commitAllowingStateLoss();
|
||||
fm.beginTransaction().add(R.id.nav_host_fragment, subscriptionFragment, "2").hide(subscriptionFragment).commitAllowingStateLoss();
|
||||
@ -217,12 +234,16 @@ public class MainActivity extends AppCompatActivity {
|
||||
});
|
||||
});
|
||||
|
||||
UserMe userMe = new RetrofitPeertubeAPI(MainActivity.this, instance, token.getAccess_token()).verifyCredentials();
|
||||
userMe = new RetrofitPeertubeAPI(MainActivity.this, instance, token.getAccess_token()).verifyCredentials();
|
||||
if (userMe != null && userMe.getAccount() != null) {
|
||||
new AccountDAO(MainActivity.this, db).updateAccount(userMe.getAccount());
|
||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||
editor.putString(Helper.PREF_KEY_ID, account.getId());
|
||||
editor.putString(Helper.PREF_KEY_NAME, account.getUsername());
|
||||
editor.putBoolean(getString(R.string.set_autoplay_choice), userMe.isAutoPlayVideo());
|
||||
editor.putBoolean(getString(R.string.set_store_in_history), userMe.isVideosHistoryEnabled());
|
||||
editor.putBoolean(getString(R.string.set_autoplay_next_video_choice), userMe.isAutoPlayNextVideo());
|
||||
editor.putString(getString(R.string.set_video_sensitive_choice), userMe.getNsfwPolicy());
|
||||
//Sync languages from server
|
||||
List<String> videoLanguageServer = userMe.getVideoLanguages();
|
||||
if (videoLanguageServer != null) {
|
||||
@ -237,15 +258,21 @@ public class MainActivity extends AppCompatActivity {
|
||||
}
|
||||
}
|
||||
} catch (Error error) {
|
||||
runOnUiThread(() -> Helper.logoutCurrentUser(MainActivity.this, account));
|
||||
runOnUiThread(() -> Helper.logoutCurrentUser(MainActivity.this, finalAccount));
|
||||
error.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}}).start();
|
||||
|
||||
} else {
|
||||
navView.inflateMenu(R.menu.bottom_nav_menu);
|
||||
}
|
||||
peertubeInformation = new PeertubeInformation();
|
||||
peertubeInformation.setCategories(new LinkedHashMap<>());
|
||||
peertubeInformation.setLanguages(new LinkedHashMap<>());
|
||||
peertubeInformation.setLicences(new LinkedHashMap<>());
|
||||
peertubeInformation.setPrivacies(new LinkedHashMap<>());
|
||||
peertubeInformation.setPlaylistPrivacies(new LinkedHashMap<>());
|
||||
peertubeInformation.setTranslations(new LinkedHashMap<>());
|
||||
startInForeground();
|
||||
|
||||
if (BuildConfig.google_restriction && BuildConfig.full_instances) {
|
||||
@ -273,6 +300,15 @@ public class MainActivity extends AppCompatActivity {
|
||||
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
|
||||
@Override
|
||||
public boolean onQueryTextSubmit(String query) {
|
||||
Pattern link = Pattern.compile("(https?://[\\da-z.-]+\\.[a-z.]{2,10})/videos/watch/(\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12})$");
|
||||
Matcher matcherLink = link.matcher(query.trim());
|
||||
if (matcherLink.find()) {
|
||||
Intent intent = new Intent(MainActivity.this, PeertubeActivity.class);
|
||||
intent.setData(Uri.parse(query.trim()));
|
||||
startActivity(intent);
|
||||
myActionMenuItem.collapseActionView();
|
||||
return false;
|
||||
}
|
||||
Intent intent = new Intent(MainActivity.this, SearchActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
String search = query.trim();
|
||||
@ -299,6 +335,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
MenuItem mostLikedItem = menu.findItem(R.id.action_most_liked);
|
||||
MenuItem settingsItem = menu.findItem(R.id.action_settings);
|
||||
MenuItem sepiaSearchItem = menu.findItem(R.id.action_sepia_search);
|
||||
MenuItem incognitoItem = menu.findItem(R.id.action_incognito);
|
||||
if (Helper.isLoggedIn(MainActivity.this)) {
|
||||
instanceItem.setVisible(false);
|
||||
uploadItem.setVisible(true);
|
||||
@ -307,6 +344,10 @@ public class MainActivity extends AppCompatActivity {
|
||||
historyItem.setVisible(true);
|
||||
settingsItem.setVisible(false);
|
||||
mostLikedItem.setVisible(true);
|
||||
incognitoItem.setVisible(true);
|
||||
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
boolean checked = sharedpreferences.getBoolean(getString(R.string.set_store_in_history), true);
|
||||
incognitoItem.setChecked(checked);
|
||||
} else {
|
||||
instanceItem.setVisible(true);
|
||||
uploadItem.setVisible(false);
|
||||
@ -315,6 +356,7 @@ public class MainActivity extends AppCompatActivity {
|
||||
historyItem.setVisible(false);
|
||||
settingsItem.setVisible(true);
|
||||
mostLikedItem.setVisible(false);
|
||||
incognitoItem.setVisible(false);
|
||||
}
|
||||
if (!BuildConfig.full_instances) {
|
||||
sepiaSearchItem.setVisible(false);
|
||||
@ -381,7 +423,25 @@ public class MainActivity extends AppCompatActivity {
|
||||
Intent intent = new Intent(MainActivity.this, AboutActivity.class);
|
||||
startActivity(intent);
|
||||
return true;
|
||||
} else if (item.getItemId() == R.id.action_incognito) {
|
||||
item.setChecked(!item.isChecked());
|
||||
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||
editor.putBoolean(getString(R.string.set_store_in_history), item.isChecked());
|
||||
editor.apply();
|
||||
new Thread(() -> {
|
||||
UserSettings userSettings = new UserSettings();
|
||||
userSettings.setVideosHistoryEnabled(item.isChecked());
|
||||
try {
|
||||
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(MainActivity.this);
|
||||
api.updateUser(userSettings);
|
||||
} catch (Exception | Error e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
return false;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
|
359
app/src/main/java/app/fedilab/fedilabtube/MyAccountActivity.java
Normal file
359
app/src/main/java/app/fedilab/fedilabtube/MyAccountActivity.java
Normal file
@ -0,0 +1,359 @@
|
||||
package app.fedilab.fedilabtube;
|
||||
/* Copyright 2020 Thomas Schneider
|
||||
*
|
||||
* This file is a part of TubeLab
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* TubeLab 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 TubeLab; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.SwitchCompat;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.documentfile.provider.DocumentFile;
|
||||
import androidx.work.WorkManager;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
|
||||
import app.fedilab.fedilabtube.client.entities.Error;
|
||||
import app.fedilab.fedilabtube.client.entities.NotificationSettings;
|
||||
import app.fedilab.fedilabtube.client.entities.UserMe;
|
||||
import app.fedilab.fedilabtube.client.entities.UserSettings;
|
||||
import app.fedilab.fedilabtube.databinding.ActivityMyAccountSettingsBinding;
|
||||
import app.fedilab.fedilabtube.helper.Helper;
|
||||
import app.fedilab.fedilabtube.worker.WorkHelper;
|
||||
import es.dmoral.toasty.Toasty;
|
||||
|
||||
import static app.fedilab.fedilabtube.PeertubeUploadActivity.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE;
|
||||
import static app.fedilab.fedilabtube.worker.WorkHelper.NOTIFICATION_WORKER;
|
||||
|
||||
public class MyAccountActivity extends AppCompatActivity {
|
||||
|
||||
ActivityMyAccountSettingsBinding binding;
|
||||
private static final int PICK_IMAGE = 466;
|
||||
private Uri inputData;
|
||||
private String fileName;
|
||||
private NotificationSettings notificationSettings;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = ActivityMyAccountSettingsBinding.inflate(getLayoutInflater());
|
||||
View view = binding.getRoot();
|
||||
setContentView(view);
|
||||
|
||||
if (getSupportActionBar() != null)
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
if( MainActivity.userMe == null) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
setTitle(String.format("@%s",MainActivity.userMe.getUsername()));
|
||||
binding.displayname.setText(MainActivity.userMe.getAccount().getDisplayName());
|
||||
binding.description.setText(MainActivity.userMe.getAccount().getDescription());
|
||||
|
||||
notificationSettings = MainActivity.userMe.getNotificationSettings();
|
||||
initializeValues(notificationSettings.getAbuseStateChange(), binding.notifAbuseAcceptedApp, binding.notifAbuseAcceptedMail);
|
||||
initializeValues(notificationSettings.getAbuseNewMessage(), binding.notifAbuseReceivedApp, binding.notifAbuseReceivedMail);
|
||||
initializeValues(notificationSettings.getCommentMention(), binding.notifVideoMentionApp, binding.notifVideoMentionMail);
|
||||
initializeValues(notificationSettings.getNewFollow(), binding.notifNewFollowersApp, binding.notifNewFollowersMail);
|
||||
initializeValues(notificationSettings.getMyVideoImportFinished(), binding.notifVideoImportedApp, binding.notifVideoImportedMail);
|
||||
initializeValues(notificationSettings.getMyVideoPublished(), binding.notifVideoPublishedApp, binding.notifVideoPublishedMail);
|
||||
initializeValues(notificationSettings.getBlacklistOnMyVideo(), binding.notifBlockedApp, binding.notifBlockedMail);
|
||||
initializeValues(notificationSettings.getNewCommentOnMyVideo(), binding.notifNewCommentApp, binding.notifNewCommentMail);
|
||||
initializeValues(notificationSettings.getNewVideoFromSubscription(), binding.notifNewVideoApp, binding.notifNewVideoMail);
|
||||
|
||||
Helper.loadGiF(MyAccountActivity.this, MainActivity.userMe.getAccount().getAvatar()!=null?MainActivity.userMe.getAccount().getAvatar().getPath():null, binding.profilePicture);
|
||||
|
||||
String[] refresh_array = getResources().getStringArray(R.array.refresh_time);
|
||||
ArrayAdapter<String> refreshArray = new ArrayAdapter<>(MyAccountActivity.this,
|
||||
android.R.layout.simple_spinner_dropdown_item, refresh_array);
|
||||
binding.refreshTime.setAdapter(refreshArray);
|
||||
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
int interval = sharedpreferences.getInt(Helper.NOTIFICATION_INTERVAL, 60);
|
||||
binding.refreshTime.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
|
||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||
int time;
|
||||
switch (position) {
|
||||
case 1:
|
||||
time = 15;
|
||||
break;
|
||||
case 2:
|
||||
time = 30;
|
||||
break;
|
||||
case 3:
|
||||
time = 60;
|
||||
break;
|
||||
case 4:
|
||||
time = 120;
|
||||
break;
|
||||
case 5:
|
||||
time = 360;
|
||||
break;
|
||||
case 6:
|
||||
time = 720;
|
||||
break;
|
||||
default:
|
||||
time = 0;
|
||||
}
|
||||
editor.putInt(Helper.NOTIFICATION_INTERVAL, time);
|
||||
editor.apply();
|
||||
WorkManager.getInstance(getApplicationContext()).cancelAllWorkByTag(NOTIFICATION_WORKER);
|
||||
if( time > 0 ) {
|
||||
WorkHelper.fetchNotifications(getApplication(), time);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNothingSelected(AdapterView<?> parent) {
|
||||
|
||||
}
|
||||
});
|
||||
int position = 0;
|
||||
switch (interval) {
|
||||
case 0:
|
||||
position = 0;
|
||||
break;
|
||||
case 15:
|
||||
position = 1;
|
||||
break;
|
||||
case 30:
|
||||
position = 2;
|
||||
break;
|
||||
case 60:
|
||||
position = 3;
|
||||
break;
|
||||
case 120:
|
||||
position = 4;
|
||||
break;
|
||||
case 360:
|
||||
position = 5;
|
||||
break;
|
||||
case 720:
|
||||
position = 6;
|
||||
break;
|
||||
}
|
||||
binding.refreshTime.setSelection(position, false);
|
||||
|
||||
binding.selectFile.setOnClickListener(v->{
|
||||
if (ContextCompat.checkSelfPermission(MyAccountActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) !=
|
||||
PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(MyAccountActivity.this,
|
||||
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
|
||||
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||
intent.setType("*/*");
|
||||
String[] mimetypes = {"image/*"};
|
||||
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
|
||||
startActivityForResult(intent, PICK_IMAGE);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(@NotNull Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.main_my_account, menu);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == android.R.id.home) {
|
||||
finish();
|
||||
return true;
|
||||
} else if (item.getItemId() == R.id.action_validate) {
|
||||
item.setEnabled(false);
|
||||
new Thread(() -> {
|
||||
UserSettings userSettings = new UserSettings();
|
||||
userSettings.setNotificationSettings(notificationSettings);
|
||||
if( binding.displayname.getText() != null) {
|
||||
userSettings.setDisplayName(binding.displayname.getText().toString().trim());
|
||||
}
|
||||
if( binding.description.getText() != null) {
|
||||
userSettings.setDescription(binding.description.getText().toString().trim());
|
||||
}
|
||||
if( inputData != null ) {
|
||||
userSettings.setAvatarfile(inputData);
|
||||
userSettings.setFileName(fileName);
|
||||
}
|
||||
try {
|
||||
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(MyAccountActivity.this);
|
||||
UserMe.AvatarResponse avatarResponse = api.updateUser(userSettings);
|
||||
MainActivity.userMe.getAccount().setDisplayName(binding.displayname.getText().toString().trim());
|
||||
MainActivity.userMe.getAccount().setDescription(binding.description.getText().toString().trim());
|
||||
if( avatarResponse != null && avatarResponse.getAvatar() != null ) {
|
||||
MainActivity.userMe.getAccount().setAvatar(avatarResponse.getAvatar());
|
||||
}
|
||||
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
Runnable myRunnable = () -> {
|
||||
Toasty.info(MyAccountActivity.this, getString(R.string.account_updated), Toasty.LENGTH_LONG).show();
|
||||
item.setEnabled(true);
|
||||
};
|
||||
mainHandler.post(myRunnable);
|
||||
} catch (Exception | Error e) {
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
Runnable myRunnable = () -> {
|
||||
Toasty.error(MyAccountActivity.this, getString(R.string.toast_error), Toasty.LENGTH_LONG).show();
|
||||
item.setEnabled(true);
|
||||
};
|
||||
mainHandler.post(myRunnable);
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == PICK_IMAGE && resultCode == Activity.RESULT_OK) {
|
||||
if (data == null || data.getData() == null) {
|
||||
Toasty.error(MyAccountActivity.this, getString(R.string.toot_select_image_error), Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
inputData = data.getData();
|
||||
DocumentFile documentFile = DocumentFile.fromSingleUri(this, inputData);
|
||||
if (documentFile != null) {
|
||||
fileName = documentFile.getName();
|
||||
}
|
||||
Glide.with(MyAccountActivity.this)
|
||||
.load(inputData)
|
||||
.thumbnail(0.1f)
|
||||
.apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(10)))
|
||||
.into(binding.profilePicture);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeValues(int value, SwitchCompat app, SwitchCompat email) {
|
||||
switch (value) {
|
||||
case 1:
|
||||
app.setChecked(true);
|
||||
email.setChecked(false);
|
||||
break;
|
||||
case 2:
|
||||
app.setChecked(false);
|
||||
email.setChecked(true);
|
||||
break;
|
||||
case 3:
|
||||
app.setChecked(true);
|
||||
email.setChecked(true);
|
||||
break;
|
||||
default:
|
||||
app.setChecked(false);
|
||||
email.setChecked(false);
|
||||
}
|
||||
app.setOnCheckedChangeListener((compoundButton, checked) -> {
|
||||
int id = app.getId();
|
||||
if (id == R.id.notif_new_video_app) {
|
||||
notificationSettings.setNewVideoFromSubscription(getNewAppCheckedValue(checked, email));
|
||||
} else if (id == R.id.notif_new_comment_app) {
|
||||
notificationSettings.setNewCommentOnMyVideo(getNewAppCheckedValue(checked, email));
|
||||
} else if (id == R.id.notif_blocked_app) {
|
||||
notificationSettings.setBlacklistOnMyVideo(getNewAppCheckedValue(checked, email));
|
||||
} else if (id == R.id.notif_video_published_app) {
|
||||
notificationSettings.setMyVideoPublished(getNewAppCheckedValue(checked, email));
|
||||
} else if (id == R.id.notif_video_imported_app) {
|
||||
notificationSettings.setMyVideoImportFinished(getNewAppCheckedValue(checked, email));
|
||||
} else if (id == R.id.notif_new_followers_app) {
|
||||
notificationSettings.setNewFollow(getNewAppCheckedValue(checked, email));
|
||||
} else if (id == R.id.notif_video_mention_app) {
|
||||
notificationSettings.setCommentMention(getNewAppCheckedValue(checked, email));
|
||||
} else if (id == R.id.notif_abuse_received_app) {
|
||||
notificationSettings.setAbuseNewMessage(getNewAppCheckedValue(checked, email));
|
||||
} else if (id == R.id.notif_abuse_accepted_app) {
|
||||
notificationSettings.setAbuseStateChange(getNewAppCheckedValue(checked, email));
|
||||
}
|
||||
});
|
||||
email.setOnCheckedChangeListener((compoundButtonMail, checkedMail) -> {
|
||||
int id = email.getId();
|
||||
if (id == R.id.notif_new_video_mail) {
|
||||
notificationSettings.setNewVideoFromSubscription(getNewMailCheckedValue(checkedMail, app));
|
||||
} else if (id == R.id.notif_new_comment_mail) {
|
||||
notificationSettings.setNewCommentOnMyVideo(getNewMailCheckedValue(checkedMail, app));
|
||||
} else if (id == R.id.notif_blocked_mail) {
|
||||
notificationSettings.setBlacklistOnMyVideo(getNewMailCheckedValue(checkedMail, app));
|
||||
} else if (id == R.id.notif_video_published_mail) {
|
||||
notificationSettings.setMyVideoPublished(getNewMailCheckedValue(checkedMail, app));
|
||||
} else if (id == R.id.notif_video_imported_mail) {
|
||||
notificationSettings.setMyVideoImportFinished(getNewMailCheckedValue(checkedMail, app));
|
||||
} else if (id == R.id.notif_new_followers_mail) {
|
||||
notificationSettings.setNewFollow(getNewMailCheckedValue(checkedMail, app));
|
||||
} else if (id == R.id.notif_video_mention_mail) {
|
||||
notificationSettings.setCommentMention(getNewMailCheckedValue(checkedMail, app));
|
||||
} else if (id == R.id.notif_abuse_received_mail) {
|
||||
notificationSettings.setAbuseNewMessage(getNewMailCheckedValue(checkedMail, app));
|
||||
} else if (id == R.id.notif_abuse_accepted_mail) {
|
||||
notificationSettings.setAbuseStateChange(getNewMailCheckedValue(checkedMail, app));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private int getNewAppCheckedValue(boolean checked, SwitchCompat email){
|
||||
int newValue;
|
||||
if( checked && email.isChecked()) {
|
||||
newValue = 3;
|
||||
}else if( !checked && email.isChecked()) {
|
||||
newValue = 2;
|
||||
} else if( checked && !email.isChecked()) {
|
||||
newValue = 1;
|
||||
}else {
|
||||
newValue = 0;
|
||||
}
|
||||
return newValue;
|
||||
}
|
||||
|
||||
private int getNewMailCheckedValue(boolean checked, SwitchCompat app){
|
||||
int newValue;
|
||||
if( checked && app.isChecked()) {
|
||||
newValue = 3;
|
||||
}else if( !checked && app.isChecked()) {
|
||||
newValue = 1;
|
||||
} else if( checked && !app.isChecked()) {
|
||||
newValue = 2;
|
||||
}else {
|
||||
newValue = 0;
|
||||
}
|
||||
return newValue;
|
||||
}
|
||||
}
|
@ -18,6 +18,7 @@ import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.Dialog;
|
||||
import android.app.PictureInPictureParams;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@ -33,6 +34,7 @@ import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.support.v4.media.session.MediaSessionCompat;
|
||||
import android.text.Html;
|
||||
import android.text.Spanned;
|
||||
@ -47,6 +49,7 @@ import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.EditText;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
@ -64,12 +67,19 @@ import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.github.se_bastiaan.torrentstream.StreamStatus;
|
||||
import com.github.se_bastiaan.torrentstream.Torrent;
|
||||
import com.github.se_bastiaan.torrentstream.TorrentOptions;
|
||||
import com.github.se_bastiaan.torrentstream.TorrentStream;
|
||||
import com.github.se_bastiaan.torrentstream.listeners.TorrentListener;
|
||||
import com.github.vkay94.dtpv.youtube.YouTubeOverlay;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.ExoPlayerFactory;
|
||||
import com.google.android.exoplayer2.ExoPlaybackException;
|
||||
import com.google.android.exoplayer2.Format;
|
||||
import com.google.android.exoplayer2.MediaItem;
|
||||
import com.google.android.exoplayer2.Player;
|
||||
import com.google.android.exoplayer2.SimpleExoPlayer;
|
||||
import com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector;
|
||||
import com.google.android.exoplayer2.source.MediaSource;
|
||||
import com.google.android.exoplayer2.source.MergingMediaSource;
|
||||
import com.google.android.exoplayer2.source.ProgressiveMediaSource;
|
||||
import com.google.android.exoplayer2.source.SingleSampleMediaSource;
|
||||
@ -84,6 +94,7 @@ import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory;
|
||||
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory;
|
||||
import com.google.android.exoplayer2.util.MimeTypes;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import com.google.android.exoplayer2.video.VideoListener;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@ -92,6 +103,8 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import app.fedilab.fedilabtube.client.APIResponse;
|
||||
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
|
||||
@ -131,9 +144,11 @@ import static app.fedilab.fedilabtube.client.RetrofitPeertubeAPI.ActionType.REPO
|
||||
import static app.fedilab.fedilabtube.helper.Helper.getAttColor;
|
||||
import static app.fedilab.fedilabtube.helper.Helper.getLiveInstance;
|
||||
import static app.fedilab.fedilabtube.helper.Helper.isLoggedIn;
|
||||
import static app.fedilab.fedilabtube.helper.Helper.loadGiF;
|
||||
import static com.google.android.exoplayer2.Player.MEDIA_ITEM_TRANSITION_REASON_AUTO;
|
||||
|
||||
|
||||
public class PeertubeActivity extends AppCompatActivity implements CommentListAdapter.AllCommentRemoved {
|
||||
public class PeertubeActivity extends AppCompatActivity implements CommentListAdapter.AllCommentRemoved, Player.EventListener, VideoListener, TorrentListener {
|
||||
|
||||
public static String video_id;
|
||||
private String peertubeInstance, videoUuid;
|
||||
@ -145,7 +160,7 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
private VideoData.Video peertube;
|
||||
private int mode;
|
||||
private Map<String, List<PlaylistExist>> playlists;
|
||||
private boolean playInMinimized;
|
||||
private boolean playInMinimized, autoPlay, autoFullscreen;
|
||||
private boolean onStopCalled;
|
||||
private List<Caption> captions;
|
||||
private String max_id;
|
||||
@ -159,6 +174,52 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
private List<Comment> commentsThread;
|
||||
private BroadcastReceiver mPowerKeyReceiver = null;
|
||||
private boolean isPlayInMinimized;
|
||||
public static List<String> playedVideos = new ArrayList<>();
|
||||
private VideoData.Video nextVideo;
|
||||
private TorrentStream torrentStream;
|
||||
private String show_more_content;
|
||||
|
||||
@Override
|
||||
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
|
||||
if(width < height){
|
||||
videoOrientationType = videoOrientation.PORTRAIT;
|
||||
}else{
|
||||
videoOrientationType = videoOrientation.LANDSCAPE;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStreamPrepared(Torrent torrent) {
|
||||
torrent.startDownload();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStreamStarted(Torrent torrent) {
|
||||
startStream(torrent.getVideoFile().getAbsolutePath(), null, autoPlay, -1, null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStreamError(Torrent torrent, Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStreamReady(Torrent torrent) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStreamProgress(Torrent torrent, StreamStatus status) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStreamStopped() {}
|
||||
|
||||
enum videoOrientation {
|
||||
LANDSCAPE,
|
||||
PORTRAIT
|
||||
}
|
||||
|
||||
private videoOrientation videoOrientationType;
|
||||
|
||||
public static void hideKeyboard(Activity activity) {
|
||||
if (activity != null && activity.getWindow() != null) {
|
||||
@ -177,9 +238,8 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
binding = ActivityPeertubeBinding.inflate(getLayoutInflater());
|
||||
View view = binding.getRoot();
|
||||
setContentView(view);
|
||||
|
||||
videoOrientationType = videoOrientation.LANDSCAPE;
|
||||
max_id = "0";
|
||||
|
||||
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
|
||||
String token = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null);
|
||||
@ -189,6 +249,14 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
Helper.loadGiF(PeertubeActivity.this, account.getAvatar() != null ? account.getAvatar().getPath() : null, binding.myPpReply);
|
||||
}
|
||||
|
||||
TorrentOptions torrentOptions = new TorrentOptions.Builder()
|
||||
.saveLocation(getCacheDir())
|
||||
.autoDownload(true)
|
||||
.removeFilesAfterStop(true)
|
||||
.build();
|
||||
|
||||
torrentStream = TorrentStream.init(torrentOptions);
|
||||
torrentStream.addListener(PeertubeActivity.this);
|
||||
|
||||
if (Helper.isTablet(PeertubeActivity.this)) {
|
||||
|
||||
@ -205,7 +273,9 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
|
||||
mode = sharedpreferences.getInt(Helper.SET_VIDEO_MODE, Helper.VIDEO_MODE_NORMAL);
|
||||
|
||||
Bundle b = getIntent().getExtras();
|
||||
Intent intent = getIntent();
|
||||
|
||||
Bundle b = intent.getExtras();
|
||||
if (b != null) {
|
||||
peertubeInstance = b.getString("peertube_instance", Helper.getLiveInstance(PeertubeActivity.this));
|
||||
videoUuid = b.getString("video_uuid", null);
|
||||
@ -214,20 +284,35 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
peertube = b.getParcelable("video");
|
||||
}
|
||||
|
||||
manageIntentUrl(intent);
|
||||
|
||||
binding.peertubeDescriptionMore.setOnClickListener(v->{
|
||||
if( show_more_content != null && peertube != null) {
|
||||
if( binding.peertubeDescriptionMore.getText().toString().compareTo(getString(R.string.show_more)) == 0) {
|
||||
binding.peertubeDescriptionMore.setText(getString(R.string.show_less));
|
||||
binding.peertubeDescription.setText(show_more_content);
|
||||
}else{
|
||||
binding.peertubeDescriptionMore.setText(getString(R.string.show_more));
|
||||
binding.peertubeDescription.setText(peertube.getDescription());
|
||||
}
|
||||
}
|
||||
});
|
||||
if (!Helper.isLoggedIn(PeertubeActivity.this) || sepiaSearch) {
|
||||
binding.writeCommentContainerReply.setVisibility(View.GONE);
|
||||
binding.writeCommentContainer.setVisibility(View.GONE);
|
||||
}
|
||||
playInMinimized = sharedpreferences.getBoolean(getString(R.string.set_video_minimize_choice), true);
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N
|
||||
&& !getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {
|
||||
autoPlay = sharedpreferences.getBoolean(getString(R.string.set_autoplay_choice), true);
|
||||
autoFullscreen = sharedpreferences.getBoolean(getString(R.string.set_fullscreen_choice), false);
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O
|
||||
|| !getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {
|
||||
playInMinimized = false;
|
||||
}
|
||||
|
||||
if (mode == Helper.VIDEO_MODE_WEBVIEW) {
|
||||
binding.webviewVideo.setVisibility(View.VISIBLE);
|
||||
binding.mediaVideo.setVisibility(View.GONE);
|
||||
binding.doubleTapPlayerView.setVisibility(View.GONE);
|
||||
CustomWebview webview_video = Helper.initializeWebview(PeertubeActivity.this, R.id.webview_video, null);
|
||||
|
||||
MastalabWebChromeClient mastalabWebChromeClient = new MastalabWebChromeClient(PeertubeActivity.this, webview_video, binding.mainMediaFrame, binding.videoLayout);
|
||||
@ -241,7 +326,11 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
getWindow().setAttributes(attrs);
|
||||
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
|
||||
binding.peertubeInformationContainer.setVisibility(View.GONE);
|
||||
if (videoOrientationType == videoOrientation.LANDSCAPE) {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
}else {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
}
|
||||
} else {
|
||||
WindowManager.LayoutParams attrs = getWindow().getAttributes();
|
||||
attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
|
||||
@ -261,15 +350,33 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
binding.webviewVideo.loadUrl("https://" + peertubeInstance + "/videos/embed/" + videoUuid);
|
||||
} else {
|
||||
binding.webviewVideo.setVisibility(View.GONE);
|
||||
binding.mediaVideo.setVisibility(View.VISIBLE);
|
||||
binding.loader.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
if (mode != Helper.VIDEO_MODE_WEBVIEW) {
|
||||
binding.mediaVideo.setControllerShowTimeoutMs(1000);
|
||||
binding.mediaVideo.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIT);
|
||||
binding.doubleTapPlayerView.setControllerShowTimeoutMs(1000);
|
||||
binding.doubleTapPlayerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIT);
|
||||
initFullscreenDialog();
|
||||
initFullscreenButton();
|
||||
|
||||
binding.doubleTapPlayerView
|
||||
.setDoubleTapDelay(500);
|
||||
binding.doubleTapPlayerView.setDoubleTapEnabled(true);
|
||||
binding.mediaVideo.performListener(new YouTubeOverlay.PerformListener() {
|
||||
@Override
|
||||
public void onAnimationStart() {
|
||||
binding.mediaVideo.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd() {
|
||||
binding.mediaVideo.setVisibility(View.GONE);
|
||||
}
|
||||
}) .playerView(binding.doubleTapPlayerView).seekSeconds(10);
|
||||
binding.doubleTapPlayerView.setPlayer(player);
|
||||
binding.doubleTapPlayerView.controller(binding.mediaVideo);
|
||||
if( player != null)
|
||||
binding.mediaVideo.player(player);
|
||||
}
|
||||
flag_loading = true;
|
||||
comments = new ArrayList<>();
|
||||
@ -304,6 +411,14 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
playVideo();
|
||||
}
|
||||
registBroadcastReceiver();
|
||||
if( autoFullscreen && autoPlay) {
|
||||
openFullscreenDialog();
|
||||
if (videoOrientationType == videoOrientation.LANDSCAPE) {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
}else {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -313,6 +428,9 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
return;
|
||||
}
|
||||
peertube = apiResponse.getPeertubes().get(0);
|
||||
if( peertube.getUserHistory() != null) {
|
||||
player.seekTo(peertube.getUserHistory().getCurrentTime()*1000);
|
||||
}
|
||||
sepiaSearch = false;
|
||||
playVideo();
|
||||
}
|
||||
@ -382,30 +500,104 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
if (b != null) {
|
||||
peertubeInstance = b.getString("peertube_instance", Helper.getLiveInstance(PeertubeActivity.this));
|
||||
videoUuid = b.getString("video_uuid", null);
|
||||
if( comments != null && comments.size() > 0) {
|
||||
int number = comments.size();
|
||||
comments.clear();
|
||||
commentListAdapter.notifyItemRangeRemoved(0, number);
|
||||
}
|
||||
playVideo();
|
||||
}
|
||||
manageIntentUrl(intent);
|
||||
}
|
||||
|
||||
private void manageIntentUrl(Intent intent) {
|
||||
if(intent.getData() != null) { //Comes from a link
|
||||
String url = intent.getData().toString();
|
||||
Pattern link = Pattern.compile("(https?://[\\da-z.-]+\\.[a-z.]{2,10})/videos/watch/(\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12})$");
|
||||
Matcher matcherLink = link.matcher(url);
|
||||
if (matcherLink.find()) {
|
||||
String instance = matcherLink.group(1);
|
||||
String uuid = matcherLink.group(2);
|
||||
if(instance != null && uuid != null) {
|
||||
peertubeInstance = instance.replace("https://", "").replace("http://", "");
|
||||
sepiaSearch = true; // Sepia search flag is used because, at this time we don't know if the video is federated.
|
||||
videoUuid = uuid;
|
||||
peertube = new VideoData.Video();
|
||||
peertube.setUuid(uuid);
|
||||
peertube.setEmbedUrl(url);
|
||||
SearchVM viewModelSearch = new ViewModelProvider(PeertubeActivity.this).get(SearchVM.class);
|
||||
viewModelSearch.getVideos("0", peertube.getEmbedUrl()).observe(PeertubeActivity.this, this::manageVIewVideos);
|
||||
}else {
|
||||
Helper.forwardToAnotherApp(PeertubeActivity.this, intent);
|
||||
finish();
|
||||
}
|
||||
}else{
|
||||
Helper.forwardToAnotherApp(PeertubeActivity.this, intent);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void playVideo() {
|
||||
if (player != null) {
|
||||
player.setPlayWhenReady(false);
|
||||
player.release();
|
||||
player = ExoPlayerFactory.newSimpleInstance(PeertubeActivity.this);
|
||||
binding.mediaVideo.setPlayer(player);
|
||||
player = new SimpleExoPlayer.Builder(PeertubeActivity.this).build();
|
||||
binding.mediaVideo.player(player);
|
||||
binding.doubleTapPlayerView.setPlayer(player);
|
||||
binding.loader.setVisibility(View.GONE);
|
||||
player.setPlayWhenReady(true);
|
||||
player.setPlayWhenReady(autoPlay);
|
||||
captions = null;
|
||||
}
|
||||
show_more_content = null;
|
||||
binding.peertubeDescriptionMore.setVisibility(View.GONE);
|
||||
if( autoFullscreen && autoPlay) {
|
||||
fullscreen = FullScreenMediaController.fullscreen.ON;
|
||||
setFullscreen(FullScreenMediaController.fullscreen.ON);
|
||||
fullScreenMode = true;
|
||||
openFullscreenDialog();
|
||||
if (videoOrientationType == videoOrientation.LANDSCAPE) {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
}else {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
}
|
||||
} else {
|
||||
fullscreen = FullScreenMediaController.fullscreen.OFF;
|
||||
setFullscreen(FullScreenMediaController.fullscreen.OFF);
|
||||
fullScreenMode = false;
|
||||
|
||||
}
|
||||
binding.peertubePlaylist.setVisibility(View.VISIBLE);
|
||||
binding.peertubeBookmark.setVisibility(View.GONE);
|
||||
TimelineVM feedsViewModel = new ViewModelProvider(PeertubeActivity.this).get(TimelineVM.class);
|
||||
feedsViewModel.getVideo(sepiaSearch ? peertubeInstance : null, videoUuid, isMyVideo).observe(PeertubeActivity.this, this::manageVIewVideo);
|
||||
CaptionsVM captionsViewModel = new ViewModelProvider(PeertubeActivity.this).get(CaptionsVM.class);
|
||||
captionsViewModel.getCaptions(sepiaSearch ? peertubeInstance : null, videoUuid).observe(PeertubeActivity.this, this::manageCaptions);
|
||||
new Thread(() -> {
|
||||
try {
|
||||
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(PeertubeActivity.this);
|
||||
VideoData.Description description = api.getVideoDescription(videoUuid);
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
Runnable myRunnable = () -> {
|
||||
if( description == null) {
|
||||
binding.peertubeDescriptionMore.setVisibility(View.GONE);
|
||||
show_more_content = null;
|
||||
}else{
|
||||
if( !PeertubeActivity.this.isFinishing()) {
|
||||
if (peertube != null && peertube.getDescription() != null && description.getDescription().compareTo(peertube.getDescription()) > 0) {
|
||||
binding.peertubeDescriptionMore.setVisibility(View.VISIBLE);
|
||||
show_more_content = description.getDescription();
|
||||
} else {
|
||||
binding.peertubeDescriptionMore.setVisibility(View.GONE);
|
||||
show_more_content = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
mainHandler.post(myRunnable);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
public void change() {
|
||||
@ -427,10 +619,9 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == android.R.id.home) {
|
||||
if (playInMinimized && player != null) {
|
||||
enterVideoMode();
|
||||
} else {
|
||||
finish();
|
||||
finishAndRemoveTask();
|
||||
}
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
@ -490,9 +681,37 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
}
|
||||
|
||||
|
||||
public void manageNextVideos(APIResponse apiResponse) {
|
||||
if (apiResponse == null || apiResponse.getError() != null || apiResponse.getPeertubes() == null || apiResponse.getPeertubes().size() == 0) {
|
||||
return;
|
||||
}
|
||||
List<VideoData.Video> suggestedVideos = apiResponse.getPeertubes();
|
||||
for(VideoData.Video video: suggestedVideos) {
|
||||
if(!playedVideos.contains(video.getId())){
|
||||
TimelineVM feedsViewModel = new ViewModelProvider(PeertubeActivity.this).get(TimelineVM.class);
|
||||
feedsViewModel.getVideo(null, suggestedVideos.get(0).getUuid(), false).observe(PeertubeActivity.this, this::nextVideoDetails);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
public void nextVideoDetails(APIResponse apiResponse) {
|
||||
if (apiResponse == null || (apiResponse.getError() != null) || apiResponse.getPeertubes() == null || apiResponse.getPeertubes().size() == 0) {
|
||||
return;
|
||||
}
|
||||
int i = 0;
|
||||
while (i < (apiResponse.getPeertubes().size()-1) && playedVideos.contains(apiResponse.getPeertubes().get(i).getId())) {
|
||||
i++;
|
||||
}
|
||||
nextVideo = apiResponse.getPeertubes().get(i);
|
||||
MediaItem mediaItem = new MediaItem.Builder().setUri(Uri.parse(nextVideo.getFileUrl(null, PeertubeActivity.this))).build();
|
||||
player.addMediaItem(mediaItem);
|
||||
}
|
||||
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
public void manageVIewVideo(APIResponse apiResponse) {
|
||||
|
||||
if (apiResponse == null || (apiResponse.getError() != null) || apiResponse.getPeertubes() == null || apiResponse.getPeertubes().size() == 0) {
|
||||
Toasty.error(PeertubeActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
|
||||
binding.loader.setVisibility(View.GONE);
|
||||
@ -503,9 +722,16 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
binding.loader.setVisibility(View.GONE);
|
||||
return;
|
||||
}
|
||||
|
||||
long position = -1;
|
||||
if( peertube.getUserHistory() != null) {
|
||||
position = peertube.getUserHistory().getCurrentTime() * 1000;
|
||||
}
|
||||
|
||||
peertube = apiResponse.getPeertubes().get(0);
|
||||
if( peertube.getTags() != null && peertube.getTags().size() > 0) {
|
||||
SearchVM searchViewModel = new ViewModelProvider(PeertubeActivity.this).get(SearchVM.class);
|
||||
searchViewModel.searchNextVideos(peertube.getTags()).observe(PeertubeActivity.this, this::manageNextVideos);
|
||||
}
|
||||
if (sepiaSearch) {
|
||||
peertubeInstance = peertube.getAccount().getHost();
|
||||
}
|
||||
@ -547,8 +773,9 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
binding.writeCommentContainerReply.setVisibility(View.VISIBLE);
|
||||
binding.writeCommentContainer.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
binding.peertubeComments.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
binding.peertubeComments.setVisibility(View.GONE);
|
||||
binding.writeCommentContainerReply.setVisibility(View.GONE);
|
||||
binding.writeCommentContainer.setVisibility(View.GONE);
|
||||
binding.noActionText.setText(getString(R.string.comment_no_allowed_peertube));
|
||||
@ -565,6 +792,19 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
binding.peertubeDislikeCount.setText(Helper.withSuffix(peertube.getDislikes()));
|
||||
binding.peertubeLikeCount.setText(Helper.withSuffix(peertube.getLikes()));
|
||||
binding.peertubeViewCount.setText(Helper.withSuffix(peertube.getViews()));
|
||||
loadGiF(PeertubeActivity.this,peertube.getChannel().getAvatar()!=null?peertube.getChannel().getAvatar().getPath():null, binding.ppChannel);
|
||||
binding.ppChannel.setOnClickListener(v->{
|
||||
Intent intent = new Intent(PeertubeActivity.this, ShowChannelActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
b.putParcelable("channel", peertube.getChannel());
|
||||
b.putBoolean("sepia_search", sepiaSearch);
|
||||
if (sepiaSearch) {
|
||||
b.putString("peertube_instance", peertube.getAccount().getHost());
|
||||
}
|
||||
intent.putExtras(b);
|
||||
startActivity(intent);
|
||||
});
|
||||
|
||||
video_id = peertube.getId();
|
||||
|
||||
changeColor();
|
||||
@ -624,31 +864,18 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
|
||||
if (mode == Helper.VIDEO_MODE_NORMAL) {
|
||||
|
||||
int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB);
|
||||
ProgressiveMediaSource videoSource;
|
||||
|
||||
player = ExoPlayerFactory.newSimpleInstance(PeertubeActivity.this);
|
||||
binding.mediaVideo.setPlayer(player);
|
||||
player = new SimpleExoPlayer.Builder(PeertubeActivity.this).build();
|
||||
player.addVideoListener(PeertubeActivity.this);
|
||||
player.addListener(this);
|
||||
binding.mediaVideo.player(player);
|
||||
binding.doubleTapPlayerView.setPlayer(player);
|
||||
binding.loader.setVisibility(View.GONE);
|
||||
|
||||
if (apiResponse.getPeertubes().get(0).getFiles() != null && apiResponse.getPeertubes().get(0).getFiles().size() > 0) {
|
||||
if (video_cache == 0) {
|
||||
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(PeertubeActivity.this,
|
||||
Util.getUserAgent(PeertubeActivity.this, null), null);
|
||||
videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
|
||||
.createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, PeertubeActivity.this)));
|
||||
} else {
|
||||
CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(PeertubeActivity.this);
|
||||
videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory)
|
||||
.createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, PeertubeActivity.this)));
|
||||
}
|
||||
player.prepare(videoSource);
|
||||
} else {
|
||||
HlsMediaSource hlsMediaSource = new HlsMediaSource.Factory(new DefaultHttpDataSourceFactory(System.getProperty("http.agent")))
|
||||
.createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getStreamingPlaylists().get(0).getPlaylistUrl()));
|
||||
player.prepare(hlsMediaSource);
|
||||
}
|
||||
player.setPlayWhenReady(true);
|
||||
startStream(
|
||||
apiResponse.getPeertubes().get(0).getFileUrl(null, PeertubeActivity.this),
|
||||
apiResponse.getPeertubes().get(0).getStreamingPlaylists().size()>0?apiResponse.getPeertubes().get(0).getStreamingPlaylists().get(0).getPlaylistUrl():null,
|
||||
autoPlay,position, null, null);
|
||||
player.prepare();
|
||||
player.setPlayWhenReady(autoPlay);
|
||||
}
|
||||
|
||||
|
||||
@ -663,6 +890,9 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
if (!isMyVideo) {
|
||||
popup.getMenu().findItem(R.id.action_edit).setVisible(false);
|
||||
}
|
||||
|
||||
MenuItem itemDownload = popup.getMenu().findItem(R.id.action_download);
|
||||
itemDownload.setEnabled(peertube != null && peertube.isDownloadEnabled());
|
||||
popup.setOnMenuItemClickListener(item -> {
|
||||
int itemId = item.getItemId();
|
||||
if (itemId == R.id.action_download) {
|
||||
@ -678,15 +908,12 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
} else if (itemId == R.id.action_share) {
|
||||
Intent sendIntent = new Intent(Intent.ACTION_SEND);
|
||||
sendIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.shared_via));
|
||||
String url;
|
||||
|
||||
url = peertube.getFiles().get(0).getFileDownloadUrl();
|
||||
boolean share_details = sharedpreferences.getBoolean(Helper.SET_SHARE_DETAILS, true);
|
||||
String extra_text;
|
||||
if (share_details) {
|
||||
extra_text = "@" + peertube.getAccount().getAcct();
|
||||
extra_text += "\r\n\r\n" + peertube.getName();
|
||||
extra_text += "\n\n\uD83D\uDD17 " + url + "\r\n-\n";
|
||||
extra_text += "\n\n\uD83D\uDD17 https://" + peertube.getChannel().getHost() + "/videos/watch/" + peertube.getUuid() + "\r\n-\n";
|
||||
final String contentToot;
|
||||
if (peertube.getDescription() != null) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
@ -698,7 +925,7 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
}
|
||||
extra_text += contentToot;
|
||||
} else {
|
||||
extra_text = url;
|
||||
extra_text = "https://" + peertube.getChannel().getHost() + "/videos/watch/" + peertube.getUuid();
|
||||
}
|
||||
sendIntent.putExtra(Intent.EXTRA_TEXT, extra_text);
|
||||
sendIntent.setType("text/plain");
|
||||
@ -742,54 +969,23 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
uri = Uri.parse("https://" + peertubeInstance + captions.get(which - 1).getCaptionPath());
|
||||
}
|
||||
}
|
||||
|
||||
int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB);
|
||||
|
||||
long position = player.getCurrentPosition();
|
||||
long newPosition = player.getCurrentPosition();
|
||||
|
||||
if (player != null)
|
||||
player.release();
|
||||
|
||||
TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory());
|
||||
player = ExoPlayerFactory.newSimpleInstance(PeertubeActivity.this, trackSelector);
|
||||
ProgressiveMediaSource videoSource;
|
||||
MediaSource subtitleSource = null;
|
||||
Format subtitleFormat = Format.createTextSampleFormat(
|
||||
TrackSelector trackSelector = new DefaultTrackSelector(PeertubeActivity.this, new AdaptiveTrackSelection.Factory());
|
||||
player = new SimpleExoPlayer.Builder(PeertubeActivity.this).setTrackSelector(trackSelector).build();
|
||||
binding.mediaVideo.player(player);
|
||||
binding.doubleTapPlayerView.setPlayer(player);
|
||||
startStream(
|
||||
apiResponse.getPeertubes().get(0).getFileUrl(null, PeertubeActivity.this),
|
||||
null,
|
||||
MimeTypes.TEXT_VTT,
|
||||
Format.NO_VALUE,
|
||||
itemsKeyLanguage[which]);
|
||||
|
||||
|
||||
if (apiResponse.getPeertubes().get(0).getFiles() != null && apiResponse.getPeertubes().get(0).getFiles().size() > 0) {
|
||||
if (video_cache == 0) {
|
||||
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(PeertubeActivity.this,
|
||||
Util.getUserAgent(PeertubeActivity.this, null), null);
|
||||
videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
|
||||
.createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, PeertubeActivity.this)));
|
||||
if (uri != null)
|
||||
subtitleSource = new SingleSampleMediaSource.Factory(dataSourceFactory).createMediaSource(uri, subtitleFormat, C.TIME_UNSET);
|
||||
|
||||
} else {
|
||||
CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(PeertubeActivity.this);
|
||||
videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory)
|
||||
.createMediaSource(Uri.parse(apiResponse.getPeertubes().get(0).getFileUrl(null, PeertubeActivity.this)));
|
||||
if (uri != null)
|
||||
subtitleSource = new SingleSampleMediaSource.Factory(cacheDataSourceFactory).createMediaSource(uri, subtitleFormat, C.TIME_UNSET);
|
||||
}
|
||||
binding.mediaVideo.setPlayer(player);
|
||||
if (which > 0 && subtitleSource != null) {
|
||||
MergingMediaSource mergedSource =
|
||||
new MergingMediaSource(videoSource, subtitleSource);
|
||||
player.prepare(mergedSource);
|
||||
} else {
|
||||
player.prepare(videoSource);
|
||||
}
|
||||
player.seekTo(0, position);
|
||||
player.setPlayWhenReady(true);
|
||||
}
|
||||
|
||||
|
||||
true,
|
||||
newPosition,
|
||||
uri,
|
||||
itemsKeyLanguage[which]
|
||||
);
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
@ -819,8 +1015,59 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
});
|
||||
popup.show();
|
||||
});
|
||||
}
|
||||
|
||||
private void startStream(String videoURL, String streamingPlaylistsURLS, boolean autoPlay, long position, Uri subtitles, String lang) {
|
||||
|
||||
if (videoURL != null) {
|
||||
if( videoURL.endsWith(".torrent")) {
|
||||
|
||||
torrentStream.startStream(videoURL);
|
||||
return;
|
||||
}else {
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
|
||||
int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB);
|
||||
ProgressiveMediaSource videoSource;
|
||||
SingleSampleMediaSource subtitleSource = null;
|
||||
if (video_cache == 0) {
|
||||
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(PeertubeActivity.this,
|
||||
Util.getUserAgent(PeertubeActivity.this, null), null);
|
||||
|
||||
if (subtitles != null) {
|
||||
MediaItem.Subtitle mediaSubtitle = new MediaItem.Subtitle(subtitles, MimeTypes.TEXT_VTT, lang);
|
||||
subtitleSource = new SingleSampleMediaSource.Factory(dataSourceFactory).createMediaSource(mediaSubtitle, C.TIME_UNSET);
|
||||
}
|
||||
MediaItem mediaItem = new MediaItem.Builder().setUri(videoURL).build();
|
||||
videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(mediaItem);
|
||||
} else {
|
||||
CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(PeertubeActivity.this);
|
||||
MediaItem mediaItem = new MediaItem.Builder().setUri(videoURL).build();
|
||||
videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory)
|
||||
.createMediaSource(mediaItem);
|
||||
if (subtitles != null) {
|
||||
MediaItem.Subtitle mediaSubtitle = new MediaItem.Subtitle(subtitles, MimeTypes.TEXT_VTT, lang, Format.NO_VALUE);
|
||||
subtitleSource = new SingleSampleMediaSource.Factory(cacheDataSourceFactory).createMediaSource(mediaSubtitle, C.TIME_UNSET);
|
||||
}
|
||||
}
|
||||
if (lang != null && subtitleSource != null) {
|
||||
MergingMediaSource mergedSource =
|
||||
new MergingMediaSource(videoSource, subtitleSource);
|
||||
player.setMediaSource(mergedSource);
|
||||
}else {
|
||||
player.setMediaSource(videoSource);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
MediaItem mediaItem = new MediaItem.Builder().setUri(Uri.parse(streamingPlaylistsURLS)).build();
|
||||
HlsMediaSource hlsMediaSource = new HlsMediaSource.Factory(new DefaultHttpDataSourceFactory(System.getProperty("http.agent")))
|
||||
.createMediaSource(mediaItem);
|
||||
player.setMediaSource(hlsMediaSource);
|
||||
}
|
||||
player.prepare();
|
||||
if( position > 0) {
|
||||
player.seekTo(0, position);
|
||||
}
|
||||
player.setPlayWhenReady(autoPlay);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -846,20 +1093,42 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
super.onDestroy();
|
||||
binding = null;
|
||||
if (player != null) {
|
||||
player.setPlayWhenReady(false);
|
||||
player.release();
|
||||
}
|
||||
if( torrentStream != null && torrentStream.isStreaming()) {
|
||||
torrentStream.stopStream();
|
||||
}
|
||||
unregisterReceiver();
|
||||
if (fullScreenDialog != null && fullScreenDialog.isShowing()) {
|
||||
fullScreenDialog.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
onStopCalled = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
onStopCalled = false;
|
||||
if (player != null && !player.isPlaying()) {
|
||||
player.setPlayWhenReady(autoPlay);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
if (player != null && !isPlayInMinimized) {
|
||||
if( player != null) {
|
||||
updateHistory(player.getCurrentPosition()/1000);
|
||||
}
|
||||
if (player != null && (!isPlayInMinimized || !playInMinimized)) {
|
||||
player.setPlayWhenReady(false);
|
||||
}else if (playInMinimized) {
|
||||
enterVideoMode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -867,17 +1136,19 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
final IntentFilter theFilter = new IntentFilter();
|
||||
theFilter.addAction(Intent.ACTION_SCREEN_ON);
|
||||
theFilter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||
|
||||
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
|
||||
mPowerKeyReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String strAction = intent.getAction();
|
||||
if (strAction.equals(Intent.ACTION_SCREEN_OFF)) {
|
||||
if (player != null && isPlayInMinimized) {
|
||||
if( !sharedpreferences.getBoolean(getString(R.string.set_play_screen_lock_choice), false)) {
|
||||
player.setPlayWhenReady(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
getApplicationContext().registerReceiver(mPowerKeyReceiver, theFilter);
|
||||
}
|
||||
@ -905,16 +1176,17 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
}
|
||||
|
||||
private void enterVideoMode() {
|
||||
if (playInMinimized && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && player != null) {
|
||||
if (playInMinimized && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && player != null) {
|
||||
isPlayInMinimized = true;
|
||||
MediaSessionCompat mediaSession = new MediaSessionCompat(this, getPackageName());
|
||||
MediaSessionConnector mediaSessionConnector = new MediaSessionConnector(mediaSession);
|
||||
mediaSessionConnector.setPlayer(player);
|
||||
PlayerControlView controlView = binding.mediaVideo.findViewById(R.id.exo_controller);
|
||||
PlayerControlView controlView = binding.doubleTapPlayerView.findViewById(R.id.exo_controller);
|
||||
controlView.hide();
|
||||
binding.mediaVideo.setControllerAutoShow(false);
|
||||
binding.doubleTapPlayerView.setControllerAutoShow(false);
|
||||
mediaSession.setActive(true);
|
||||
enterPictureInPictureMode();
|
||||
PictureInPictureParams params = new PictureInPictureParams.Builder().build();
|
||||
enterPictureInPictureMode(params);
|
||||
}
|
||||
}
|
||||
|
||||
@ -946,24 +1218,8 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
super.onStop();
|
||||
onStopCalled = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
onStopCalled = false;
|
||||
if (player != null && !player.isPlaying()) {
|
||||
player.setPlayWhenReady(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void displayResolution() {
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
|
||||
|
||||
AlertDialog.Builder builderSingle = new AlertDialog.Builder(PeertubeActivity.this);
|
||||
builderSingle.setTitle(R.string.pickup_resolution);
|
||||
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(PeertubeActivity.this, android.R.layout.select_dialog_item);
|
||||
@ -978,34 +1234,22 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
builderSingle.setAdapter(arrayAdapter, (dialog, which) -> {
|
||||
String res = Objects.requireNonNull(arrayAdapter.getItem(which)).substring(0, Objects.requireNonNull(arrayAdapter.getItem(which)).length() - 1);
|
||||
|
||||
if (binding.mediaVideo != null) {
|
||||
binding.loader.setVisibility(View.VISIBLE);
|
||||
long position = player.getCurrentPosition();
|
||||
PlayerControlView controlView = binding.mediaVideo.findViewById(R.id.exo_controller);
|
||||
PlayerControlView controlView = binding.doubleTapPlayerView.findViewById(R.id.exo_controller);
|
||||
TextView resolution = controlView.findViewById(R.id.resolution);
|
||||
resolution.setText(String.format("%sp", res));
|
||||
if (mode == Helper.VIDEO_MODE_NORMAL) {
|
||||
if (player != null)
|
||||
player.release();
|
||||
player = ExoPlayerFactory.newSimpleInstance(PeertubeActivity.this);
|
||||
binding.mediaVideo.setPlayer(player);
|
||||
player = new SimpleExoPlayer.Builder(PeertubeActivity.this).build();
|
||||
binding.mediaVideo.player(player);
|
||||
binding.doubleTapPlayerView.setPlayer(player);
|
||||
binding.loader.setVisibility(View.GONE);
|
||||
int video_cache = sharedpreferences.getInt(Helper.SET_VIDEO_CACHE, Helper.DEFAULT_VIDEO_CACHE_MB);
|
||||
ProgressiveMediaSource videoSource;
|
||||
if (video_cache == 0) {
|
||||
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(PeertubeActivity.this,
|
||||
Util.getUserAgent(PeertubeActivity.this, null), null);
|
||||
videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
|
||||
.createMediaSource(Uri.parse(peertube.getFileUrl(res, PeertubeActivity.this)));
|
||||
} else {
|
||||
CacheDataSourceFactory cacheDataSourceFactory = new CacheDataSourceFactory(PeertubeActivity.this);
|
||||
videoSource = new ProgressiveMediaSource.Factory(cacheDataSourceFactory)
|
||||
.createMediaSource(Uri.parse(peertube.getFileUrl(res, PeertubeActivity.this)));
|
||||
}
|
||||
player.prepare(videoSource);
|
||||
player.seekTo(0, position);
|
||||
player.setPlayWhenReady(true);
|
||||
}
|
||||
startStream(
|
||||
peertube.getFileUrl(res, PeertubeActivity.this),
|
||||
peertube.getStreamingPlaylists().size()>0?peertube.getStreamingPlaylists().get(0).getPlaylistUrl():null,
|
||||
true, position, null, null);
|
||||
}
|
||||
|
||||
});
|
||||
@ -1017,8 +1261,14 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
|
||||
fullScreenDialog = new Dialog(this, android.R.style.Theme_Black_NoTitleBar_Fullscreen) {
|
||||
public void onBackPressed() {
|
||||
if( player != null && player.isPlaying() && fullScreenMode) {
|
||||
player.setPlayWhenReady(false);
|
||||
}
|
||||
if( fullScreenMode) {
|
||||
closeFullscreenDialog();
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
Handler handler = new Handler();
|
||||
handler.postDelayed(() -> setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR), 2000);
|
||||
}
|
||||
super.onBackPressed();
|
||||
}
|
||||
@ -1027,8 +1277,8 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
|
||||
private void openFullscreenDialog() {
|
||||
|
||||
((ViewGroup) binding.mediaVideo.getParent()).removeView(binding.mediaVideo);
|
||||
fullScreenDialog.addContentView(binding.mediaVideo, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
|
||||
((ViewGroup) binding.doubleTapPlayerView.getParent()).removeView(binding.doubleTapPlayerView);
|
||||
fullScreenDialog.addContentView(binding.doubleTapPlayerView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
|
||||
fullScreenIcon.setImageDrawable(ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_fullscreen_exit_24));
|
||||
fullScreenMode = true;
|
||||
|
||||
@ -1143,8 +1393,8 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
|
||||
private void closeFullscreenDialog() {
|
||||
|
||||
((ViewGroup) binding.mediaVideo.getParent()).removeView(binding.mediaVideo);
|
||||
((FrameLayout) findViewById(R.id.main_media_frame)).addView(binding.mediaVideo);
|
||||
((ViewGroup) binding.doubleTapPlayerView.getParent()).removeView(binding.doubleTapPlayerView);
|
||||
((FrameLayout) findViewById(R.id.main_media_frame)).addView(binding.doubleTapPlayerView);
|
||||
fullScreenMode = false;
|
||||
fullScreenDialog.dismiss();
|
||||
fullScreenIcon.setImageDrawable(ContextCompat.getDrawable(PeertubeActivity.this, R.drawable.ic_baseline_fullscreen_24));
|
||||
@ -1152,13 +1402,17 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
|
||||
private void initFullscreenButton() {
|
||||
|
||||
PlayerControlView controlView = binding.mediaVideo.findViewById(R.id.exo_controller);
|
||||
PlayerControlView controlView = binding.doubleTapPlayerView.findViewById(R.id.exo_controller);
|
||||
fullScreenIcon = controlView.findViewById(R.id.exo_fullscreen_icon);
|
||||
View fullScreenButton = controlView.findViewById(R.id.exo_fullscreen_button);
|
||||
fullScreenButton.setOnClickListener(v -> {
|
||||
if (!fullScreenMode) {
|
||||
openFullscreenDialog();
|
||||
if (videoOrientationType == videoOrientation.LANDSCAPE) {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
}else {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
}
|
||||
} else {
|
||||
closeFullscreenDialog();
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
@ -1167,10 +1421,24 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
|
||||
}
|
||||
});
|
||||
ImageButton playButton = controlView.findViewById(R.id.exo_play);
|
||||
playButton.setOnClickListener(v->{
|
||||
if(autoFullscreen && !fullScreenMode) {
|
||||
openFullscreenDialog();
|
||||
if (videoOrientationType == videoOrientation.LANDSCAPE) {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
}else {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
}
|
||||
}
|
||||
player.setPlayWhenReady(true);
|
||||
});
|
||||
View exo_next = controlView.findViewById(R.id.exo_next);
|
||||
exo_next.setOnClickListener(v -> playNextVideo());
|
||||
}
|
||||
|
||||
private void initResolution() {
|
||||
PlayerControlView controlView = binding.mediaVideo.findViewById(R.id.exo_controller);
|
||||
PlayerControlView controlView = binding.doubleTapPlayerView.findViewById(R.id.exo_controller);
|
||||
TextView resolution = controlView.findViewById(R.id.resolution);
|
||||
if (peertube.getFiles() != null && peertube.getFiles().size() > 0) {
|
||||
resolution.setText(String.format("%s", Helper.defaultFile(PeertubeActivity.this, peertube.getFiles()).getResolutions().getLabel()));
|
||||
@ -1210,7 +1478,7 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
}
|
||||
|
||||
public void manageVIewPlaylists(APIResponse apiResponse) {
|
||||
if (apiResponse.getError() != null) {
|
||||
if (apiResponse == null || apiResponse.getError() != null || playlists == null || peertube == null) {
|
||||
return;
|
||||
}
|
||||
if (apiResponse.getPlaylists() != null && apiResponse.getPlaylists().size() > 0) {
|
||||
@ -1291,8 +1559,59 @@ public class PeertubeActivity extends AppCompatActivity implements CommentListAd
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void updateHistory(long position) {
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
|
||||
boolean storeInHistory = sharedpreferences.getBoolean(getString(R.string.set_store_in_history), true);
|
||||
if( Helper.isLoggedIn(PeertubeActivity.this) && peertube != null && storeInHistory) {
|
||||
new Thread(() -> {
|
||||
try {
|
||||
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(PeertubeActivity.this);
|
||||
api.updateHistory(peertube.getUuid(), position);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAllCommentRemoved() {
|
||||
binding.noActionText.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void playNextVideo() {
|
||||
if( nextVideo != null) {
|
||||
Intent intent = new Intent(PeertubeActivity.this, PeertubeActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
b.putParcelable("video",nextVideo);
|
||||
b.putString("video_id", nextVideo.getId());
|
||||
b.putString("video_uuid", nextVideo.getUuid());
|
||||
playedVideos.add(nextVideo.getId());
|
||||
b.putBoolean("sepia_search", sepiaSearch);
|
||||
intent.putExtras(b);
|
||||
startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onMediaItemTransition(MediaItem mediaItem, int reason) {
|
||||
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
|
||||
boolean autoplayNextVideo = sharedpreferences.getBoolean(getString(R.string.set_autoplay_next_video_choice), true);
|
||||
if (reason == MEDIA_ITEM_TRANSITION_REASON_AUTO && autoplayNextVideo){
|
||||
player.removeMediaItems(0, player.getMediaItemCount());
|
||||
playNextVideo();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onPlayerError(ExoPlaybackException error) {
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -25,17 +25,11 @@ import android.text.method.LinkMovementMethod;
|
||||
import android.util.Patterns;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.google.android.material.textfield.TextInputEditText;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
@ -43,6 +37,7 @@ import java.util.regex.Pattern;
|
||||
import app.fedilab.fedilabtube.client.APIResponse;
|
||||
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
|
||||
import app.fedilab.fedilabtube.client.entities.AccountCreation;
|
||||
import app.fedilab.fedilabtube.databinding.ActivityRegisterPeertubeBinding;
|
||||
import app.fedilab.fedilabtube.helper.Helper;
|
||||
import es.dmoral.toasty.Toasty;
|
||||
|
||||
@ -51,100 +46,89 @@ import static app.fedilab.fedilabtube.MainActivity.PICK_INSTANCE;
|
||||
public class PeertubeRegisterActivity extends AppCompatActivity {
|
||||
|
||||
|
||||
private Button signup;
|
||||
private TextView error_message;
|
||||
private String instance;
|
||||
private TextInputEditText login_instance;
|
||||
private ActivityRegisterPeertubeBinding binding;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.activity_register_peertube);
|
||||
binding = ActivityRegisterPeertubeBinding.inflate(getLayoutInflater());
|
||||
View mainView = binding.getRoot();
|
||||
setContentView(mainView);
|
||||
|
||||
if (getSupportActionBar() != null)
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
signup = findViewById(R.id.signup);
|
||||
|
||||
TextInputLayout login_instance_container = findViewById(R.id.login_instance_container);
|
||||
LinearLayout title_login_instance = findViewById(R.id.title_login_instance);
|
||||
TextInputEditText username = findViewById(R.id.username);
|
||||
TextInputEditText email = findViewById(R.id.email);
|
||||
TextInputEditText password = findViewById(R.id.password);
|
||||
TextInputEditText password_confirm = findViewById(R.id.password_confirm);
|
||||
login_instance = findViewById(R.id.login_instance);
|
||||
CheckBox agreement = findViewById(R.id.agreement);
|
||||
error_message = findViewById(R.id.error_message);
|
||||
|
||||
if (BuildConfig.full_instances) {
|
||||
login_instance_container.setVisibility(View.VISIBLE);
|
||||
title_login_instance.setVisibility(View.VISIBLE);
|
||||
binding.loginInstanceContainer.setVisibility(View.VISIBLE);
|
||||
binding.titleLoginInstance.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
login_instance_container.setVisibility(View.GONE);
|
||||
title_login_instance.setVisibility(View.GONE);
|
||||
binding.loginInstanceContainer.setVisibility(View.GONE);
|
||||
binding.titleLoginInstance.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
username.setOnFocusChangeListener((view, focused) -> {
|
||||
if (!focused && username.getText() != null) {
|
||||
binding.username.setOnFocusChangeListener((view, focused) -> {
|
||||
if (!focused && binding.username.getText() != null) {
|
||||
Pattern patternUsername = Pattern.compile("^[a-z0-9._]{1,50}$");
|
||||
Matcher matcherMaxId = patternUsername.matcher(username.getText().toString());
|
||||
Matcher matcherMaxId = patternUsername.matcher(binding.username.getText().toString());
|
||||
if (!matcherMaxId.matches()) {
|
||||
username.setError(getString(R.string.username_error));
|
||||
binding.username.setError(getString(R.string.username_error));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Button instance_help = findViewById(R.id.instance_help);
|
||||
|
||||
instance_help.setOnClickListener(v -> {
|
||||
binding.instanceHelp.setOnClickListener(v -> {
|
||||
Intent intent = new Intent(PeertubeRegisterActivity.this, InstancePickerActivity.class);
|
||||
startActivityForResult(intent, PICK_INSTANCE);
|
||||
});
|
||||
|
||||
email.setOnFocusChangeListener((view, focused) -> {
|
||||
if (!focused && email.getText() != null) {
|
||||
binding.email.setOnFocusChangeListener((view, focused) -> {
|
||||
if (!focused && binding.email.getText() != null) {
|
||||
Pattern patternUsername = Patterns.EMAIL_ADDRESS;
|
||||
Matcher matcherMaxId = patternUsername.matcher(email.getText().toString());
|
||||
Matcher matcherMaxId = patternUsername.matcher(binding.email.getText().toString());
|
||||
if (!matcherMaxId.matches()) {
|
||||
email.setError(getString(R.string.email_error));
|
||||
binding.email.setError(getString(R.string.email_error));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
password.setOnFocusChangeListener((view, focused) -> {
|
||||
if (!focused && password.getText() != null) {
|
||||
if (password.getText().length() < 6) {
|
||||
password.setError(getString(R.string.password_length_error));
|
||||
binding.password.setOnFocusChangeListener((view, focused) -> {
|
||||
if (!focused && binding.password.getText() != null) {
|
||||
if (binding.password.getText().length() < 6) {
|
||||
binding.password.setError(getString(R.string.password_length_error));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
password_confirm.setOnFocusChangeListener((view, focused) -> {
|
||||
if (!focused && password_confirm.getText() != null && password.getText() != null) {
|
||||
if (password_confirm.getText().toString().compareTo(password.getText().toString()) != 0) {
|
||||
password_confirm.setError(getString(R.string.password));
|
||||
binding.passwordConfirm.setOnFocusChangeListener((view, focused) -> {
|
||||
if (!focused && binding.passwordConfirm.getText() != null && binding.password.getText() != null) {
|
||||
if (binding.passwordConfirm.getText().toString().compareTo(binding.password.getText().toString()) != 0) {
|
||||
binding.passwordConfirm.setError(getString(R.string.password));
|
||||
}
|
||||
}
|
||||
});
|
||||
setTextAgreement();
|
||||
signup.setOnClickListener(view -> {
|
||||
error_message.setVisibility(View.GONE);
|
||||
if (username.getText() == null || email.getText() == null || password.getText() == null || password_confirm.getText() == null || username.getText().toString().trim().length() == 0 || email.getText().toString().trim().length() == 0 ||
|
||||
password.getText().toString().trim().length() == 0 || password_confirm.getText().toString().trim().length() == 0 || !agreement.isChecked()) {
|
||||
binding.signup.setOnClickListener(view -> {
|
||||
binding.errorMessage.setVisibility(View.GONE);
|
||||
if ( binding.username.getText() == null || binding.email.getText() == null || binding.password.getText() == null || binding.passwordConfirm.getText() == null || binding.username.getText().toString().trim().length() == 0 || binding.email.getText().toString().trim().length() == 0 ||
|
||||
binding.password.getText().toString().trim().length() == 0 || binding.passwordConfirm.getText().toString().trim().length() == 0 || ! binding.agreement.isChecked()) {
|
||||
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.all_field_filled)).show();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!password.getText().toString().trim().equals(password_confirm.getText().toString().trim())) {
|
||||
if (! binding.password.getText().toString().trim().equals( binding.passwordConfirm.getText().toString().trim())) {
|
||||
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.password_error)).show();
|
||||
return;
|
||||
}
|
||||
if (!android.util.Patterns.EMAIL_ADDRESS.matcher(email.getText().toString().trim()).matches()) {
|
||||
if (!android.util.Patterns.EMAIL_ADDRESS.matcher( binding.email.getText().toString().trim()).matches()) {
|
||||
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.email_error)).show();
|
||||
return;
|
||||
}
|
||||
String[] emailArray = email.getText().toString().split("@");
|
||||
String[] emailArray = binding.email.getText().toString().split("@");
|
||||
if (!BuildConfig.full_instances) {
|
||||
if (emailArray.length > 1 && !Arrays.asList(Helper.valideEmails).contains(emailArray[1])) {
|
||||
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.email_error_domain, emailArray[1])).show();
|
||||
@ -152,23 +136,23 @@ public class PeertubeRegisterActivity extends AppCompatActivity {
|
||||
}
|
||||
}
|
||||
|
||||
if (password.getText().toString().trim().length() < 8) {
|
||||
if ( binding.password.getText().toString().trim().length() < 8) {
|
||||
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.password_too_short)).show();
|
||||
return;
|
||||
}
|
||||
if (username.getText().toString().matches("[a-z0-9_]")) {
|
||||
if ( binding.username.getText().toString().matches("[a-z0-9_]")) {
|
||||
Toasty.error(PeertubeRegisterActivity.this, getString(R.string.username_error)).show();
|
||||
return;
|
||||
}
|
||||
signup.setEnabled(false);
|
||||
binding.signup.setEnabled(false);
|
||||
|
||||
if (BuildConfig.full_instances) {
|
||||
if (login_instance.getText() != null) {
|
||||
instance = login_instance.getText().toString();
|
||||
if ( binding.loginInstance.getText() != null) {
|
||||
instance = binding.loginInstance.getText().toString();
|
||||
} else {
|
||||
instance = "";
|
||||
}
|
||||
login_instance.setOnFocusChangeListener((view1, focus) -> {
|
||||
binding.loginInstance.setOnFocusChangeListener((view1, focus) -> {
|
||||
if (!focus) {
|
||||
setTextAgreement();
|
||||
}
|
||||
@ -182,10 +166,10 @@ public class PeertubeRegisterActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
AccountCreation accountCreation = new AccountCreation();
|
||||
accountCreation.setEmail(email.getText().toString().trim());
|
||||
accountCreation.setPassword(password.getText().toString().trim());
|
||||
accountCreation.setPasswordConfirm(password_confirm.getText().toString().trim());
|
||||
accountCreation.setUsername(username.getText().toString().trim());
|
||||
accountCreation.setEmail( binding.email.getText().toString().trim());
|
||||
accountCreation.setPassword( binding.password.getText().toString().trim());
|
||||
accountCreation.setPasswordConfirm( binding.passwordConfirm.getText().toString().trim());
|
||||
accountCreation.setUsername( binding.username.getText().toString().trim());
|
||||
accountCreation.setInstance(instance);
|
||||
|
||||
new Thread(() -> {
|
||||
@ -210,9 +194,9 @@ public class PeertubeRegisterActivity extends AppCompatActivity {
|
||||
} else {
|
||||
errorMessage = getString(R.string.toast_error);
|
||||
}
|
||||
error_message.setText(errorMessage);
|
||||
error_message.setVisibility(View.VISIBLE);
|
||||
signup.setEnabled(true);
|
||||
binding.errorMessage.setText(errorMessage);
|
||||
binding.errorMessage.setVisibility(View.VISIBLE);
|
||||
binding.signup.setEnabled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -260,8 +244,8 @@ public class PeertubeRegisterActivity extends AppCompatActivity {
|
||||
if (requestCode == PICK_INSTANCE && resultCode == Activity.RESULT_OK) {
|
||||
if (data != null && data.getData() != null) {
|
||||
String instance = String.valueOf(data.getData());
|
||||
login_instance.setText(instance);
|
||||
login_instance.setSelection(instance.length());
|
||||
binding.loginInstance.setText(instance);
|
||||
binding.loginInstance.setSelection(instance.length());
|
||||
setTextAgreement();
|
||||
}
|
||||
}
|
||||
@ -275,9 +259,9 @@ public class PeertubeRegisterActivity extends AppCompatActivity {
|
||||
agreement_text.setMovementMethod(null);
|
||||
agreement_text.setText(null);
|
||||
if (BuildConfig.full_instances) {
|
||||
if (login_instance.getText() != null) {
|
||||
if ( binding.loginInstance.getText() != null) {
|
||||
content_agreement = getString(R.string.agreement_check_peertube,
|
||||
"<a href='https://" + login_instance.getText().toString() + "/about/instance#terms-section' >" + tos + "</a>"
|
||||
"<a href='https://" + binding.loginInstance.getText().toString() + "/about/instance#terms-section' >" + tos + "</a>"
|
||||
);
|
||||
}
|
||||
} else {
|
||||
|
@ -67,7 +67,7 @@ public class PeertubeUploadActivity extends AppCompatActivity {
|
||||
|
||||
|
||||
private final int PICK_IVDEO = 52378;
|
||||
private final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 724;
|
||||
public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 724;
|
||||
private Button set_upload_file, set_upload_submit;
|
||||
private Spinner set_upload_privacy, set_upload_channel;
|
||||
private TextView set_upload_file_name;
|
||||
|
@ -14,6 +14,7 @@ package app.fedilab.fedilabtube;
|
||||
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.Html;
|
||||
@ -133,6 +134,17 @@ public class ShowAccountActivity extends AppCompatActivity {
|
||||
});
|
||||
AlertDialog alertDialog = dialogBuilder.create();
|
||||
alertDialog.show();
|
||||
}else if( item.getItemId() == R.id.action_share && account != null) {
|
||||
Intent sendIntent = new Intent(Intent.ACTION_SEND);
|
||||
sendIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.shared_via));
|
||||
String extra_text = account.getUrl();
|
||||
sendIntent.putExtra(Intent.EXTRA_TEXT, extra_text);
|
||||
sendIntent.setType("text/plain");
|
||||
try {
|
||||
startActivity(Intent.createChooser(sendIntent, getString(R.string.share_with)));
|
||||
} catch (Exception e) {
|
||||
Toasty.error(ShowAccountActivity.this, getString(R.string.toast_error), Toasty.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
@ -159,6 +159,17 @@ public class ShowChannelActivity extends AppCompatActivity {
|
||||
});
|
||||
androidx.appcompat.app.AlertDialog alertDialog = dialogBuilder.create();
|
||||
alertDialog.show();
|
||||
} else if( item.getItemId() == R.id.action_share && channel != null) {
|
||||
Intent sendIntent = new Intent(Intent.ACTION_SEND);
|
||||
sendIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.shared_via));
|
||||
String extra_text = channel.getUrl();
|
||||
sendIntent.putExtra(Intent.EXTRA_TEXT, extra_text);
|
||||
sendIntent.setType("text/plain");
|
||||
try {
|
||||
startActivity(Intent.createChooser(sendIntent, getString(R.string.share_with)));
|
||||
} catch (Exception e) {
|
||||
Toasty.error(ShowChannelActivity.this, getString(R.string.toast_error), Toasty.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
@ -29,6 +29,7 @@ import app.fedilab.fedilabtube.client.data.VideoData;
|
||||
import app.fedilab.fedilabtube.client.data.VideoPlaylistData;
|
||||
import app.fedilab.fedilabtube.client.entities.CaptionsParams;
|
||||
import app.fedilab.fedilabtube.client.entities.ChannelParams;
|
||||
import app.fedilab.fedilabtube.client.entities.NotificationSettings;
|
||||
import app.fedilab.fedilabtube.client.entities.Oauth;
|
||||
import app.fedilab.fedilabtube.client.entities.OverviewVideo;
|
||||
import app.fedilab.fedilabtube.client.entities.PlaylistExist;
|
||||
@ -114,6 +115,35 @@ public interface PeertubeService {
|
||||
@GET("users/me")
|
||||
Call<UserMe> verifyCredentials(@Header("Authorization") String credentials);
|
||||
|
||||
|
||||
@FormUrlEncoded
|
||||
@PUT("videos/{id}/watching")
|
||||
Call<String> addToHistory(
|
||||
@Header("Authorization") String credentials,
|
||||
@Path("id") String id,
|
||||
@Field("currentTime") long currentTime);
|
||||
|
||||
|
||||
@FormUrlEncoded
|
||||
@PUT("users/me")
|
||||
Call<String> updateUser(
|
||||
@Header("Authorization") String credentials,
|
||||
@Field("videosHistoryEnabled") Boolean videosHistoryEnabled,
|
||||
@Field("autoPlayVideo") Boolean autoPlayVideo,
|
||||
@Field("autoPlayNextVideo") Boolean autoPlayNextVideo,
|
||||
@Field("webTorrentEnabled") Boolean webTorrentEnabled,
|
||||
@Field("videoLanguages") List<String> videoLanguages,
|
||||
@Field("description") String description,
|
||||
@Field("displayName") String displayName,
|
||||
@Field("nsfwPolicy") String nsfwPolicy
|
||||
);
|
||||
|
||||
@Multipart
|
||||
@POST("users/me/avatar/pick")
|
||||
Call<UserMe.AvatarResponse> updateProfilePicture(
|
||||
@Header("Authorization") String credentials,
|
||||
@Part MultipartBody.Part avatarfile);
|
||||
|
||||
//Timelines Authenticated
|
||||
//Subscriber timeline
|
||||
@GET("users/me/subscriptions/videos?sort=-publishedAt")
|
||||
@ -121,23 +151,23 @@ public interface PeertubeService {
|
||||
|
||||
//Overview videos
|
||||
@GET("overviews/videos")
|
||||
Call<OverviewVideo> getOverviewVideos(@Query("page") String page, @Query("languageOneOf") List<String> languageOneOf);
|
||||
Call<OverviewVideo> getOverviewVideos(@Header("Authorization") String credentials, @Query("page") String page, @Query("languageOneOf") List<String> languageOneOf);
|
||||
|
||||
//Most liked videos
|
||||
@GET("videos?sort=-likes")
|
||||
Call<VideoData> getMostLikedVideos(@Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
|
||||
Call<VideoData> getMostLikedVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
|
||||
|
||||
//Most liked videos
|
||||
//Trending videos
|
||||
@GET("videos?sort=-trending")
|
||||
Call<VideoData> getTrendingVideos(@Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
|
||||
Call<VideoData> getTrendingVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
|
||||
|
||||
//Recently added videos
|
||||
@GET("videos?sort=-publishedAt")
|
||||
Call<VideoData> getRecentlyAddedVideos(@Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
|
||||
Call<VideoData> getRecentlyAddedVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
|
||||
|
||||
//Local videos
|
||||
@GET("videos?sort=-publishedAt&filter=local")
|
||||
Call<VideoData> getLocalVideos(@Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
|
||||
Call<VideoData> getLocalVideos(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("languageOneOf") List<String> languageOneOf);
|
||||
|
||||
//History
|
||||
@GET("users/me/history/videos")
|
||||
@ -145,17 +175,38 @@ public interface PeertubeService {
|
||||
|
||||
//Search
|
||||
@GET("search/videos")
|
||||
Call<VideoData> searchVideos(@Query("search") String search, @Query("start") String maxId, @Query("count") String count);
|
||||
Call<VideoData> searchVideos(
|
||||
@Header("Authorization") String credentials,
|
||||
@Query("search") String search,
|
||||
@Query("start") String maxId,
|
||||
@Query("count") String count);
|
||||
|
||||
|
||||
//Search
|
||||
@GET("search/videos")
|
||||
Call<VideoData> searchNextVideo(
|
||||
@Header("Authorization") String credentials,
|
||||
@Query("tagsOneOf") List<String> tagsOneOf,
|
||||
@Query("start") String maxId,
|
||||
@Query("count") String count);
|
||||
|
||||
//Get notifications
|
||||
@GET("users/me/notifications")
|
||||
Call<NotificationData> getNotifications(@Header("Authorization") String credentials, @Query("start") String maxId, @Query("count") String count, @Query("since_id") String sinceId);
|
||||
|
||||
//Update Notification settings
|
||||
@PUT("users/me/notification-settings")
|
||||
Call<String> updateNotifications(@Header("Authorization") String credentials, @Body NotificationSettings notificationSettings);
|
||||
|
||||
//Get/Post/Update/Delete video
|
||||
//Get a video
|
||||
@GET("videos/{id}")
|
||||
Call<VideoData.Video> getVideo(@Path("id") String id);
|
||||
|
||||
//Get a video description
|
||||
@GET("videos/{uuid}/description")
|
||||
Call<VideoData.Description> getVideoDescription(@Path("uuid") String uuid);
|
||||
|
||||
@GET("videos/{id}")
|
||||
Call<VideoData.Video> getMyVideo(@Header("Authorization") String credentials, @Path("id") String id);
|
||||
|
||||
|
@ -21,9 +21,12 @@ import android.content.SharedPreferences;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.webkit.MimeTypeMap;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URL;
|
||||
import java.net.URLDecoder;
|
||||
@ -61,6 +64,7 @@ import app.fedilab.fedilabtube.client.entities.Rating;
|
||||
import app.fedilab.fedilabtube.client.entities.Report;
|
||||
import app.fedilab.fedilabtube.client.entities.Token;
|
||||
import app.fedilab.fedilabtube.client.entities.UserMe;
|
||||
import app.fedilab.fedilabtube.client.entities.UserSettings;
|
||||
import app.fedilab.fedilabtube.client.entities.VideoParams;
|
||||
import app.fedilab.fedilabtube.client.entities.WellKnownNodeinfo;
|
||||
import app.fedilab.fedilabtube.helper.Helper;
|
||||
@ -106,6 +110,7 @@ public class RetrofitPeertubeAPI {
|
||||
count = String.valueOf(sharedpreferences.getInt(Helper.SET_VIDEOS_PER_PAGE, Helper.VIDEOS_PER_PAGE));
|
||||
}
|
||||
|
||||
|
||||
public static void updateCredential(Activity activity, String token, String client_id, String client_secret, String refresh_token, String host) {
|
||||
new Thread(() -> {
|
||||
AccountData.Account account;
|
||||
@ -161,7 +166,11 @@ public class RetrofitPeertubeAPI {
|
||||
}
|
||||
|
||||
private String getToken() {
|
||||
if( token != null) {
|
||||
return "Bearer " + token;
|
||||
}else{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private PeertubeService init() {
|
||||
@ -228,6 +237,33 @@ public class RetrofitPeertubeAPI {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve notifications
|
||||
*
|
||||
* @return APIResponse
|
||||
*/
|
||||
public APIResponse getNotifications() {
|
||||
APIResponse apiResponse = new APIResponse();
|
||||
PeertubeService peertubeService = init();
|
||||
|
||||
Call<NotificationData> notificationsCall = peertubeService.getNotifications("Bearer " + token, "0", "40", null);
|
||||
try {
|
||||
Response<NotificationData> response = notificationsCall.execute();
|
||||
if (response.isSuccessful() && response.body() != null) {
|
||||
apiResponse.setPeertubeNotifications(response.body().data);
|
||||
} else {
|
||||
setError(apiResponse, response.code(), response.errorBody());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Error error = new Error();
|
||||
error.setError(_context.getString(R.string.toast_error));
|
||||
apiResponse.setError(error);
|
||||
e.printStackTrace();
|
||||
}
|
||||
return apiResponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve notifications
|
||||
*
|
||||
@ -331,19 +367,19 @@ public class RetrofitPeertubeAPI {
|
||||
}
|
||||
break;
|
||||
case MOST_LIKED:
|
||||
videoCall = peertubeService.getMostLikedVideos(max_id, count, filter);
|
||||
videoCall = peertubeService.getMostLikedVideos(getToken(), max_id, count, filter);
|
||||
break;
|
||||
case LOCAL:
|
||||
videoCall = peertubeService.getLocalVideos(max_id, count, filter);
|
||||
videoCall = peertubeService.getLocalVideos(getToken(), max_id, count, filter);
|
||||
break;
|
||||
case TRENDING:
|
||||
videoCall = peertubeService.getTrendingVideos(max_id, count, filter);
|
||||
videoCall = peertubeService.getTrendingVideos(getToken(), max_id, count, filter);
|
||||
break;
|
||||
case HISTORY:
|
||||
videoCall = peertubeService.getHistory(getToken(), max_id, count);
|
||||
break;
|
||||
case RECENT:
|
||||
videoCall = peertubeService.getRecentlyAddedVideos(max_id, count, filter);
|
||||
videoCall = peertubeService.getRecentlyAddedVideos(getToken(), max_id, count, filter);
|
||||
break;
|
||||
}
|
||||
if (videoCall != null) {
|
||||
@ -374,7 +410,7 @@ public class RetrofitPeertubeAPI {
|
||||
APIResponse apiResponse = new APIResponse();
|
||||
PeertubeService peertubeService = init();
|
||||
ArrayList<String> filter = selection != null ? new ArrayList<>(selection) : null;
|
||||
Call<OverviewVideo> overviewVideoCall = peertubeService.getOverviewVideos(page, filter);
|
||||
Call<OverviewVideo> overviewVideoCall = peertubeService.getOverviewVideos(getToken(), page, filter);
|
||||
try {
|
||||
Response<OverviewVideo> response = overviewVideoCall.execute();
|
||||
if (response.isSuccessful() && response.body() != null) {
|
||||
@ -415,6 +451,103 @@ public class RetrofitPeertubeAPI {
|
||||
return apiResponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update history
|
||||
*
|
||||
* @param videoId String
|
||||
* @param currentTime int
|
||||
*/
|
||||
public void updateHistory(String videoId, long currentTime) {
|
||||
APIResponse apiResponse = new APIResponse();
|
||||
PeertubeService peertubeService = init();
|
||||
Call<String> updateUser = peertubeService.addToHistory(getToken(),
|
||||
videoId,
|
||||
currentTime
|
||||
);
|
||||
try {
|
||||
Response<String> response = updateUser.execute();
|
||||
if (response.isSuccessful()) {
|
||||
apiResponse.setActionReturn(response.body());
|
||||
} else {
|
||||
setError(apiResponse, response.code(), response.errorBody());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update account information
|
||||
*
|
||||
* @param userSettings UserSettings
|
||||
*/
|
||||
public UserMe.AvatarResponse updateUser(UserSettings userSettings) throws IOException, Error {
|
||||
APIResponse apiResponse = new APIResponse();
|
||||
UserMe.AvatarResponse avatarResponse = null;
|
||||
PeertubeService peertubeService = init();
|
||||
|
||||
Call<String> updateNotifications = peertubeService.updateNotifications(getToken(), userSettings.getNotificationSettings());
|
||||
Response<String> responseNotif = updateNotifications.execute();
|
||||
Call<String> updateUser = peertubeService.updateUser(getToken(),
|
||||
userSettings.isVideosHistoryEnabled(),
|
||||
userSettings.isAutoPlayVideo(),
|
||||
userSettings.isAutoPlayNextVideo(),
|
||||
userSettings.isWebTorrentEnabled(),
|
||||
userSettings.getVideoLanguages(),
|
||||
userSettings.getDescription(),
|
||||
userSettings.getDisplayName(),
|
||||
userSettings.getNsfwPolicy()
|
||||
);
|
||||
Response<String> response = updateUser.execute();
|
||||
if (response.isSuccessful()) {
|
||||
apiResponse.setActionReturn(response.body());
|
||||
} else {
|
||||
setError(apiResponse, response.code(), response.errorBody());
|
||||
Error error = new Error();
|
||||
error.setStatusCode(response.code());
|
||||
if (response.errorBody() != null) {
|
||||
error.setError(response.errorBody().string());
|
||||
} else {
|
||||
|
||||
error.setError(_context.getString(R.string.toast_error));
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
if (userSettings.getAvatarfile() != null) {
|
||||
InputStream inputStream = _context.getContentResolver().openInputStream(userSettings.getAvatarfile());
|
||||
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
|
||||
int bufferSize = 1024;
|
||||
byte[] buffer = new byte[bufferSize];
|
||||
|
||||
int len;
|
||||
while ((len = inputStream.read(buffer)) != -1) {
|
||||
byteBuffer.write(buffer, 0, len);
|
||||
}
|
||||
byte[] imageBytes = byteBuffer.toByteArray();
|
||||
String mime = MimeTypeMap.getFileExtensionFromUrl(userSettings.getAvatarfile().toString());
|
||||
if( mime == null || mime.trim().length() == 0) {
|
||||
mime = "png";
|
||||
}
|
||||
RequestBody requestFile = RequestBody.create(MediaType.parse("image/"+mime), imageBytes);
|
||||
MultipartBody.Part bodyThumbnail = MultipartBody.Part.createFormData("avatarfile", userSettings.getFileName(), requestFile);
|
||||
Call<UserMe.AvatarResponse> updateProfilePicture = peertubeService.updateProfilePicture(getToken(), bodyThumbnail);
|
||||
Response<UserMe.AvatarResponse> responseAvatar = updateProfilePicture.execute();
|
||||
if (response.isSuccessful()) {
|
||||
avatarResponse = responseAvatar.body();
|
||||
} else {
|
||||
setError(apiResponse, response.code(), response.errorBody());
|
||||
Error error = new Error();
|
||||
error.setStatusCode(response.code());
|
||||
if (response.errorBody() != null) {
|
||||
error.setError(response.errorBody().string());
|
||||
} else {
|
||||
error.setError(_context.getString(R.string.toast_error));
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
return avatarResponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if users via their uris are following the authenticated user
|
||||
@ -639,6 +772,33 @@ public class RetrofitPeertubeAPI {
|
||||
return apiResponse;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieves next peertube videos *synchronously*
|
||||
*
|
||||
* @param tags List<String> search
|
||||
* @return APIResponse
|
||||
*/
|
||||
public APIResponse searchNextVideos(List<String> tags) {
|
||||
PeertubeService peertubeService = init();
|
||||
Call<VideoData> searchVideosCall = peertubeService.searchNextVideo(getToken(), tags, "0" , "20");
|
||||
APIResponse apiResponse = new APIResponse();
|
||||
try {
|
||||
Response<VideoData> response = searchVideosCall.execute();
|
||||
if (response.isSuccessful() && response.body() != null) {
|
||||
apiResponse.setPeertubes(response.body().data);
|
||||
} else {
|
||||
setError(apiResponse, response.code(), response.errorBody());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Error error = new Error();
|
||||
error.setError(_context.getString(R.string.toast_error));
|
||||
apiResponse.setError(error);
|
||||
e.printStackTrace();
|
||||
}
|
||||
return apiResponse;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves peertube search *synchronously*
|
||||
*
|
||||
@ -647,7 +807,7 @@ public class RetrofitPeertubeAPI {
|
||||
*/
|
||||
public APIResponse searchPeertube(String query, String max_id) {
|
||||
PeertubeService peertubeService = init();
|
||||
Call<VideoData> searchVideosCall = peertubeService.searchVideos(query, max_id, count);
|
||||
Call<VideoData> searchVideosCall = peertubeService.searchVideos(getToken(), query, max_id, count);
|
||||
APIResponse apiResponse = new APIResponse();
|
||||
try {
|
||||
Response<VideoData> response = searchVideosCall.execute();
|
||||
@ -879,6 +1039,25 @@ public class RetrofitPeertubeAPI {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get video description
|
||||
*
|
||||
* @param uuid String (pagination)
|
||||
* @return APIResponse
|
||||
*/
|
||||
public VideoData.Description getVideoDescription(String uuid) {
|
||||
PeertubeService peertubeService = init();
|
||||
Call<VideoData.Description> videoDescription = peertubeService.getVideoDescription(uuid);
|
||||
try {
|
||||
Response<VideoData.Description> response = videoDescription.execute();
|
||||
if (response.isSuccessful() && response.body() != null) {
|
||||
return response.body();
|
||||
}
|
||||
} catch (IOException ignored) {}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get muted accounts
|
||||
*
|
||||
|
@ -121,6 +121,8 @@ public class VideoData {
|
||||
private List<String> trackerUrls;
|
||||
@SerializedName("updatedAt")
|
||||
private Date updatedAt;
|
||||
@SerializedName("userHistory")
|
||||
private UserHistory userHistory;
|
||||
@SerializedName("uuid")
|
||||
private String uuid;
|
||||
@SerializedName("views")
|
||||
@ -178,6 +180,7 @@ public class VideoData {
|
||||
this.trackerUrls = in.createStringArrayList();
|
||||
long tmpUpdatedAt = in.readLong();
|
||||
this.updatedAt = tmpUpdatedAt == -1 ? null : new Date(tmpUpdatedAt);
|
||||
this.userHistory = in.readParcelable(UserHistory.class.getClassLoader());
|
||||
this.uuid = in.readString();
|
||||
this.views = in.readInt();
|
||||
this.waitTranscoding = in.readByte() != 0;
|
||||
@ -186,27 +189,29 @@ public class VideoData {
|
||||
|
||||
public String getFileUrl(String resolution, Context context) {
|
||||
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
boolean streamService = sharedpreferences.getInt(Helper.SET_VIDEO_MODE, Helper.VIDEO_MODE_NORMAL) == Helper.VIDEO_MODE_STREAMING;
|
||||
int mode = sharedpreferences.getInt(Helper.SET_VIDEO_MODE, Helper.VIDEO_MODE_NORMAL);
|
||||
if (files != null && files.size() > 0) {
|
||||
if (resolution != null) {
|
||||
for (File file : files) {
|
||||
if (file.getResolutions().getLabel().compareTo(resolution) == 0) {
|
||||
if (streamService) {
|
||||
if (mode == Helper.VIDEO_MODE_MAGNET) {
|
||||
return file.getMagnetUri();
|
||||
} else if (mode == Helper.VIDEO_MODE_TORRENT) {
|
||||
return file.getTorrentUrl();
|
||||
}else {
|
||||
return file.getFileUrl();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File file = Helper.defaultFile(context, files);
|
||||
if (file != null) {
|
||||
if (streamService) {
|
||||
if (mode == Helper.VIDEO_MODE_MAGNET) {
|
||||
return file.getMagnetUri();
|
||||
} else if (mode == Helper.VIDEO_MODE_TORRENT) {
|
||||
return file.getTorrentUrl();
|
||||
} else {
|
||||
return file.getFileUrl();
|
||||
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
@ -576,6 +581,14 @@ public class VideoData {
|
||||
this.playlistExists = playlistExists;
|
||||
}
|
||||
|
||||
public UserHistory getUserHistory() {
|
||||
return userHistory;
|
||||
}
|
||||
|
||||
public void setUserHistory(UserHistory userHistory) {
|
||||
this.userHistory = userHistory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
@ -616,6 +629,7 @@ public class VideoData {
|
||||
dest.writeString(this.thumbnailPath);
|
||||
dest.writeStringList(this.trackerUrls);
|
||||
dest.writeLong(this.updatedAt != null ? this.updatedAt.getTime() : -1);
|
||||
dest.writeParcelable(this.userHistory, flags);
|
||||
dest.writeString(this.uuid);
|
||||
dest.writeInt(this.views);
|
||||
dest.writeByte(this.waitTranscoding ? (byte) 1 : (byte) 0);
|
||||
@ -683,4 +697,62 @@ public class VideoData {
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static class UserHistory implements Parcelable{
|
||||
|
||||
public static final Creator<UserHistory> CREATOR = new Creator<UserHistory>() {
|
||||
@Override
|
||||
public UserHistory createFromParcel(Parcel in) {
|
||||
return new UserHistory(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserHistory[] newArray(int size) {
|
||||
return new UserHistory[size];
|
||||
}
|
||||
};
|
||||
|
||||
@SerializedName("currentTime")
|
||||
long currentTime;
|
||||
|
||||
public UserHistory() {
|
||||
}
|
||||
|
||||
protected UserHistory(Parcel in) {
|
||||
this.currentTime = in.readLong();
|
||||
}
|
||||
|
||||
|
||||
public long getCurrentTime() {
|
||||
return currentTime;
|
||||
}
|
||||
|
||||
public void setCurrentTime(long currentTime) {
|
||||
this.currentTime = currentTime;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel parcel, int i) {
|
||||
parcel.writeLong(currentTime);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class Description{
|
||||
@SerializedName("description")
|
||||
private String description;
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,13 @@
|
||||
package app.fedilab.fedilabtube.client.entities;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
|
||||
|
||||
@SuppressWarnings({"unused", "RedundantSuppression"})
|
||||
public class File {
|
||||
public class File implements Parcelable {
|
||||
|
||||
@SerializedName("fileDownloadUrl")
|
||||
private String fileDownloadUrl;
|
||||
@ -96,4 +99,50 @@ public class File {
|
||||
public void setTorrentUrl(String torrentUrl) {
|
||||
this.torrentUrl = torrentUrl;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeString(this.fileDownloadUrl);
|
||||
dest.writeString(this.fileUrl);
|
||||
dest.writeInt(this.fps);
|
||||
dest.writeString(this.magnetUri);
|
||||
dest.writeString(this.metadataUrl);
|
||||
dest.writeParcelable(this.resolutions, flags);
|
||||
dest.writeLong(this.size);
|
||||
dest.writeString(this.torrentDownloadUrl);
|
||||
dest.writeString(this.torrentUrl);
|
||||
}
|
||||
|
||||
public File() {
|
||||
}
|
||||
|
||||
protected File(Parcel in) {
|
||||
this.fileDownloadUrl = in.readString();
|
||||
this.fileUrl = in.readString();
|
||||
this.fps = in.readInt();
|
||||
this.magnetUri = in.readString();
|
||||
this.metadataUrl = in.readString();
|
||||
this.resolutions = in.readParcelable(Item.class.getClassLoader());
|
||||
this.size = in.readLong();
|
||||
this.torrentDownloadUrl = in.readString();
|
||||
this.torrentUrl = in.readString();
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<File> CREATOR = new Parcelable.Creator<File>() {
|
||||
@Override
|
||||
public File createFromParcel(Parcel source) {
|
||||
return new File(source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public File[] newArray(int size) {
|
||||
return new File[size];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -31,6 +31,8 @@ public class UserMe {
|
||||
private boolean autoPlayNextVideo;
|
||||
@SerializedName("autoPlayNextVideoPlaylist")
|
||||
private boolean autoPlayNextVideoPlaylist;
|
||||
@SerializedName("autoPlayVideo")
|
||||
private boolean autoPlayVideo;
|
||||
@SerializedName("blocked")
|
||||
private boolean blocked;
|
||||
@SerializedName("blockedReason")
|
||||
@ -255,4 +257,26 @@ public class UserMe {
|
||||
public void setWebTorrentEnabled(boolean webTorrentEnabled) {
|
||||
this.webTorrentEnabled = webTorrentEnabled;
|
||||
}
|
||||
|
||||
public boolean isAutoPlayVideo() {
|
||||
return autoPlayVideo;
|
||||
}
|
||||
|
||||
public void setAutoPlayVideo(boolean autoPlayVideo) {
|
||||
this.autoPlayVideo = autoPlayVideo;
|
||||
}
|
||||
|
||||
|
||||
public static class AvatarResponse {
|
||||
@SerializedName("avatar")
|
||||
private Avatar avatar;
|
||||
|
||||
public Avatar getAvatar() {
|
||||
return avatar;
|
||||
}
|
||||
|
||||
public void setAvatar(Avatar avatar) {
|
||||
this.avatar = avatar;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,144 @@
|
||||
package app.fedilab.fedilabtube.client.entities;
|
||||
/* Copyright 2020 Thomas Schneider
|
||||
*
|
||||
* This file is a part of TubeLab
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* TubeLab 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 TubeLab; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
|
||||
import android.net.Uri;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings({"unused", "RedundantSuppression"})
|
||||
public class UserSettings {
|
||||
|
||||
private Boolean videosHistoryEnabled;
|
||||
private Boolean autoPlayVideo;
|
||||
private Boolean webTorrentEnabled;
|
||||
private Boolean autoPlayNextVideo;
|
||||
private List<String> videoLanguages;
|
||||
private String description;
|
||||
private String displayName;
|
||||
private Uri avatarfile;
|
||||
private String fileName;
|
||||
private NotificationSettings notificationSettings;
|
||||
private String nsfwPolicy;
|
||||
|
||||
public Boolean isVideosHistoryEnabled() {
|
||||
return videosHistoryEnabled;
|
||||
}
|
||||
|
||||
public void setVideosHistoryEnabled(Boolean videosHistoryEnabled) {
|
||||
this.videosHistoryEnabled = videosHistoryEnabled;
|
||||
}
|
||||
|
||||
public Boolean isAutoPlayVideo() {
|
||||
return autoPlayVideo;
|
||||
}
|
||||
|
||||
public void setAutoPlayVideo(Boolean autoPlayVideo) {
|
||||
this.autoPlayVideo = autoPlayVideo;
|
||||
}
|
||||
|
||||
public Boolean isWebTorrentEnabled() {
|
||||
return webTorrentEnabled;
|
||||
}
|
||||
|
||||
public void setWebTorrentEnabled(Boolean webTorrentEnabled) {
|
||||
this.webTorrentEnabled = webTorrentEnabled;
|
||||
}
|
||||
|
||||
public List<String> getVideoLanguages() {
|
||||
return videoLanguages;
|
||||
}
|
||||
|
||||
public void setVideoLanguages(List<String> videoLanguages) {
|
||||
this.videoLanguages = videoLanguages;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getDisplayName() {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
public void setDisplayName(String displayName) {
|
||||
this.displayName = displayName;
|
||||
}
|
||||
|
||||
public Uri getAvatarfile() {
|
||||
return avatarfile;
|
||||
}
|
||||
|
||||
public void setAvatarfile(Uri avatarfile) {
|
||||
this.avatarfile = avatarfile;
|
||||
}
|
||||
|
||||
public Boolean getVideosHistoryEnabled() {
|
||||
return videosHistoryEnabled;
|
||||
}
|
||||
|
||||
public Boolean getAutoPlayVideo() {
|
||||
return autoPlayVideo;
|
||||
}
|
||||
|
||||
public Boolean getWebTorrentEnabled() {
|
||||
return webTorrentEnabled;
|
||||
}
|
||||
|
||||
public Boolean isAutoPlayNextVideo() {
|
||||
return autoPlayNextVideo;
|
||||
}
|
||||
|
||||
public void setAutoPlayNextVideo(Boolean autoPlayNextVideo) {
|
||||
this.autoPlayNextVideo = autoPlayNextVideo;
|
||||
}
|
||||
|
||||
public Boolean getAutoPlayNextVideo() {
|
||||
return autoPlayNextVideo;
|
||||
}
|
||||
|
||||
public String getFileName() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public void setFileName(String fileName) {
|
||||
if( fileName == null) {
|
||||
this.fileName = "avatar.png";
|
||||
} else {
|
||||
this.fileName = fileName;
|
||||
}
|
||||
}
|
||||
|
||||
public NotificationSettings getNotificationSettings() {
|
||||
return notificationSettings;
|
||||
}
|
||||
|
||||
public void setNotificationSettings(NotificationSettings notificationSettings) {
|
||||
this.notificationSettings = notificationSettings;
|
||||
}
|
||||
|
||||
public String getNsfwPolicy() {
|
||||
return nsfwPolicy;
|
||||
}
|
||||
|
||||
public void setNsfwPolicy(String nsfwPolicy) {
|
||||
this.nsfwPolicy = nsfwPolicy;
|
||||
}
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.PopupMenu;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.lifecycle.ViewModelStoreOwner;
|
||||
@ -105,6 +106,7 @@ public class PeertubeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
||||
|
||||
assert userId != null;
|
||||
|
||||
boolean videoInList = sharedpreferences.getBoolean(context.getString(R.string.set_video_in_list_choice), false);
|
||||
|
||||
boolean ownVideos;
|
||||
if (timelineType == TimelineVM.TimelineType.MY_VIDEOS) {
|
||||
@ -126,7 +128,16 @@ public class PeertubeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
||||
holder.peertube_date.setText(String.format(" - %s", Helper.dateDiff(context, video.getCreatedAt())));
|
||||
holder.peertube_views.setText(context.getString(R.string.number_view_video, Helper.withSuffix(video.getViews())));
|
||||
|
||||
Helper.loadGiF(context, instance, video.getThumbnailPath(), holder.peertube_video_image);
|
||||
boolean blur = sharedpreferences.getString(context.getString(R.string.set_video_sensitive_choice), Helper.BLUR).compareTo("blur") == 0 && video.isNsfw();
|
||||
if(videoInList) {
|
||||
Helper.loadGiF(context, instance, video.getThumbnailPath(), holder.peertube_video_image_small, blur);
|
||||
holder.peertube_video_image_small.setVisibility(View.VISIBLE);
|
||||
holder.preview_container.setVisibility(View.GONE);
|
||||
}else{
|
||||
Helper.loadGiF(context, instance, video.getThumbnailPath(), holder.peertube_video_image, blur);
|
||||
holder.peertube_video_image_small.setVisibility(View.GONE);
|
||||
holder.preview_container.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
//For Overview Videos: boolean values for displaying title is managed in the fragment
|
||||
if (video.isHasTitle()) {
|
||||
@ -377,13 +388,15 @@ public class PeertubeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
||||
|
||||
static class ViewHolder extends RecyclerView.ViewHolder {
|
||||
LinearLayout main_container, bottom_container;
|
||||
ImageView peertube_profile, peertube_video_image;
|
||||
ImageView peertube_profile, peertube_video_image, peertube_video_image_small;
|
||||
TextView peertube_account_name, peertube_views, peertube_duration;
|
||||
TextView peertube_title, peertube_date, header_title, more_actions;
|
||||
ConstraintLayout preview_container;
|
||||
|
||||
public ViewHolder(@NonNull View itemView) {
|
||||
super(itemView);
|
||||
peertube_account_name = itemView.findViewById(R.id.peertube_account_name);
|
||||
peertube_video_image_small = itemView.findViewById(R.id.peertube_video_image_small);
|
||||
peertube_title = itemView.findViewById(R.id.peertube_title);
|
||||
peertube_video_image = itemView.findViewById(R.id.peertube_video_image);
|
||||
peertube_profile = itemView.findViewById(R.id.peertube_profile);
|
||||
@ -394,6 +407,7 @@ public class PeertubeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
||||
header_title = itemView.findViewById(R.id.header_title);
|
||||
bottom_container = itemView.findViewById(R.id.bottom_container);
|
||||
more_actions = itemView.findViewById(R.id.more_actions);
|
||||
preview_container = itemView.findViewById(R.id.preview_container);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -42,16 +42,28 @@ import app.fedilab.fedilabtube.viewmodel.NotificationsVM;
|
||||
import es.dmoral.toasty.Toasty;
|
||||
|
||||
|
||||
@SuppressWarnings({"unused", "RedundantSuppression"})
|
||||
public class DisplayNotificationsFragment extends Fragment {
|
||||
|
||||
//Peertube notification type
|
||||
public static int NEW_VIDEO_FROM_SUBSCRIPTION = 1;
|
||||
public static int UNBLACKLIST_ON_MY_VIDEO = 5;
|
||||
public static int BLACKLIST_ON_MY_VIDEO = 4;
|
||||
public static int MY_VIDEO_PUBLISHED = 6;
|
||||
public static int MY_VIDEO_IMPORT_SUCCESS = 7;
|
||||
public static int MY_VIDEO_IMPORT_ERROR = 8;
|
||||
public static int MY_VIDEO_REPPORT_SUCCESS = 15;
|
||||
public final static int NEW_VIDEO_FROM_SUBSCRIPTION = 1;
|
||||
public final static int NEW_COMMENT_ON_MY_VIDEO = 2;
|
||||
public final static int NEW_ABUSE_FOR_MODERATORS = 3;
|
||||
public final static int BLACKLIST_ON_MY_VIDEO = 4;
|
||||
public final static int UNBLACKLIST_ON_MY_VIDEO = 5;
|
||||
public final static int MY_VIDEO_PUBLISHED = 6;
|
||||
public final static int MY_VIDEO_IMPORT_SUCCESS = 7;
|
||||
public final static int MY_VIDEO_IMPORT_ERROR = 8;
|
||||
public final static int NEW_USER_REGISTRATION = 9;
|
||||
public final static int NEW_FOLLOW = 10;
|
||||
public final static int COMMENT_MENTION = 11;
|
||||
public final static int VIDEO_AUTO_BLACKLIST_FOR_MODERATORS = 12;
|
||||
public final static int NEW_INSTANCE_FOLLOWER = 13;
|
||||
public final static int AUTO_INSTANCE_FOLLOWING = 14;
|
||||
public final static int MY_VIDEO_REPPORT_SUCCESS = 15;
|
||||
public final static int ABUSE_NEW_MESSAGE = 16;
|
||||
|
||||
|
||||
private boolean flag_loading;
|
||||
private Context context;
|
||||
private PeertubeNotificationsListAdapter peertubeNotificationsListAdapter;
|
||||
|
@ -1,32 +1,26 @@
|
||||
package app.fedilab.fedilabtube.fragment;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.res.ResourcesCompat;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.MultiSelectListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.SeekBarPreference;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import app.fedilab.fedilabtube.R;
|
||||
import app.fedilab.fedilabtube.helper.Helper;
|
||||
import app.fedilab.fedilabtube.helper.ThemeHelper;
|
||||
import es.dmoral.toasty.Toasty;
|
||||
|
||||
import static app.fedilab.fedilabtube.MainActivity.peertubeInformation;
|
||||
|
||||
/* Copyright 2020 Thomas Schneider
|
||||
*
|
||||
* This file is a part of TubeLab
|
||||
@ -42,6 +36,30 @@ import static app.fedilab.fedilabtube.MainActivity.peertubeInformation;
|
||||
* You should have received a copy of the GNU General Public License along with TubeLab; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.target.CustomTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import app.fedilab.fedilabtube.MainActivity;
|
||||
import app.fedilab.fedilabtube.R;
|
||||
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
|
||||
import app.fedilab.fedilabtube.client.entities.Error;
|
||||
import app.fedilab.fedilabtube.client.entities.UserSettings;
|
||||
import app.fedilab.fedilabtube.helper.Helper;
|
||||
import app.fedilab.fedilabtube.helper.ThemeHelper;
|
||||
import es.dmoral.toasty.Toasty;
|
||||
|
||||
import static app.fedilab.fedilabtube.MainActivity.peertubeInformation;
|
||||
import static app.fedilab.fedilabtube.MainActivity.userMe;
|
||||
|
||||
public class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||
|
||||
@Override
|
||||
@ -81,11 +99,14 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Shared
|
||||
editor.putInt(Helper.SET_VIDEO_MODE, Helper.VIDEO_MODE_NORMAL);
|
||||
break;
|
||||
case "1":
|
||||
editor.putInt(Helper.SET_VIDEO_MODE, Helper.VIDEO_MODE_STREAMING);
|
||||
editor.putInt(Helper.SET_VIDEO_MODE, Helper.VIDEO_MODE_MAGNET);
|
||||
break;
|
||||
case "2":
|
||||
editor.putInt(Helper.SET_VIDEO_MODE, Helper.VIDEO_MODE_WEBVIEW);
|
||||
break;
|
||||
case "3":
|
||||
editor.putInt(Helper.SET_VIDEO_MODE, Helper.VIDEO_MODE_TORRENT);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
@ -109,6 +130,26 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Shared
|
||||
ThemeHelper.switchTo(choice);
|
||||
}
|
||||
}
|
||||
if (key.compareTo(getString(R.string.set_video_sensitive_choice)) == 0) {
|
||||
ListPreference set_video_sensitive_choice = findPreference(getString(R.string.set_video_sensitive_choice));
|
||||
if (set_video_sensitive_choice != null) {
|
||||
editor.putString(getString(R.string.set_video_sensitive_choice), set_video_sensitive_choice.getValue());
|
||||
editor.apply();
|
||||
if(Helper.isLoggedIn(getActivity())) {
|
||||
new Thread(() -> {
|
||||
UserSettings userSettings = new UserSettings();
|
||||
userSettings.setNsfwPolicy(set_video_sensitive_choice.getValue());
|
||||
try {
|
||||
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(getActivity());
|
||||
api.updateUser(userSettings);
|
||||
userMe.setNsfwPolicy(set_video_sensitive_choice.getValue());
|
||||
} catch (Exception | Error e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (key.compareTo(getString(R.string.set_video_quality_choice)) == 0) {
|
||||
ListPreference set_video_quality_choice = findPreference(getString(R.string.set_video_quality_choice));
|
||||
if (set_video_quality_choice != null) {
|
||||
@ -137,10 +178,74 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Shared
|
||||
assert set_video_minimize_choice != null;
|
||||
editor.putBoolean(getString(R.string.set_video_minimize_choice), set_video_minimize_choice.isChecked());
|
||||
}
|
||||
if (key.compareTo(getString(R.string.set_autoplay_choice)) == 0) {
|
||||
SwitchPreference set_autoplay_choice = findPreference(getString(R.string.set_autoplay_choice));
|
||||
assert set_autoplay_choice != null;
|
||||
editor.putBoolean(getString(R.string.set_autoplay_choice), set_autoplay_choice.isChecked());
|
||||
if(Helper.isLoggedIn(getActivity())) {
|
||||
new Thread(() -> {
|
||||
UserSettings userSettings = new UserSettings();
|
||||
userSettings.setAutoPlayVideo(set_autoplay_choice.isChecked());
|
||||
try {
|
||||
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(getActivity());
|
||||
api.updateUser(userSettings);
|
||||
} catch (Exception | Error e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
if (key.compareTo(getString(R.string.set_fullscreen_choice)) == 0) {
|
||||
SwitchPreference set_fullscreen_choice = findPreference(getString(R.string.set_fullscreen_choice));
|
||||
assert set_fullscreen_choice != null;
|
||||
editor.putBoolean(getString(R.string.set_fullscreen_choice), set_fullscreen_choice.isChecked());
|
||||
}
|
||||
if (key.compareTo(getString(R.string.set_autoplay_next_video_choice)) == 0) {
|
||||
SwitchPreference set_autoplay_next_video_choice = findPreference(getString(R.string.set_autoplay_next_video_choice));
|
||||
assert set_autoplay_next_video_choice != null;
|
||||
editor.putBoolean(getString(R.string.set_autoplay_next_video_choice), set_autoplay_next_video_choice.isChecked());
|
||||
if(Helper.isLoggedIn(getActivity())) {
|
||||
new Thread(() -> {
|
||||
UserSettings userSettings = new UserSettings();
|
||||
userSettings.setAutoPlayNextVideo(set_autoplay_next_video_choice.isChecked());
|
||||
try {
|
||||
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(getActivity());
|
||||
api.updateUser(userSettings);
|
||||
} catch (Exception | Error e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
if (key.compareTo(getString(R.string.set_play_screen_lock_choice)) == 0) {
|
||||
SwitchPreference set_play_screen_lock_choice = findPreference(getString(R.string.set_play_screen_lock_choice));
|
||||
assert set_play_screen_lock_choice != null;
|
||||
editor.putBoolean(getString(R.string.set_play_screen_lock_choice), set_play_screen_lock_choice.isChecked());
|
||||
}
|
||||
if (key.compareTo(getString(R.string.set_video_in_list_choice)) == 0) {
|
||||
SwitchPreference set_video_in_list_choice = findPreference(getString(R.string.set_video_in_list_choice));
|
||||
assert set_video_in_list_choice != null;
|
||||
editor.putBoolean(getString(R.string.set_video_in_list_choice), set_video_in_list_choice.isChecked());
|
||||
Intent intent = new Intent(getActivity(), MainActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
if (key.compareTo(getString(R.string.set_video_language_choice)) == 0) {
|
||||
MultiSelectListPreference set_video_language_choice = findPreference(getString(R.string.set_video_language_choice));
|
||||
assert set_video_language_choice != null;
|
||||
editor.putStringSet(getString(R.string.set_video_language_choice), set_video_language_choice.getValues());
|
||||
if(Helper.isLoggedIn(getActivity())) {
|
||||
new Thread(() -> {
|
||||
UserSettings userSettings = new UserSettings();
|
||||
Set<String> language_choiceValues = set_video_language_choice.getValues();
|
||||
userSettings.setVideoLanguages(new ArrayList<>(language_choiceValues));
|
||||
try {
|
||||
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(getActivity());
|
||||
api.updateUser(userSettings);
|
||||
} catch (Exception | Error e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
editor.apply();
|
||||
}
|
||||
@ -157,6 +262,34 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Shared
|
||||
return;
|
||||
}
|
||||
|
||||
//****** My Account ******
|
||||
|
||||
Preference my_account = findPreference("my_account");
|
||||
assert my_account != null;
|
||||
if(!Helper.isLoggedIn(getActivity()) || userMe == null) {
|
||||
my_account.setVisible(false);
|
||||
} else {
|
||||
my_account.setTitle(userMe.getUsername());
|
||||
my_account.setSummary(userMe.getEmail());
|
||||
Resources resources = getResources();
|
||||
Drawable defaultAvatar = ResourcesCompat.getDrawable(resources, R.drawable.missing_peertube, null);
|
||||
my_account.setIcon(defaultAvatar);
|
||||
Glide.with(getActivity())
|
||||
.asDrawable()
|
||||
.load("https://" + Helper.getLiveInstance(context) + userMe.getAccount().getAvatar().getPath())
|
||||
.into(new CustomTarget<Drawable>() {
|
||||
@Override
|
||||
public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
|
||||
my_account.setIcon(resource);
|
||||
}
|
||||
@Override
|
||||
public void onLoadCleared(@Nullable Drawable placeholder) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//****** App theme *******
|
||||
ListPreference set_theme_choice = findPreference(getString(R.string.set_theme_choice));
|
||||
List<String> arrayTheme = Arrays.asList(getResources().getStringArray(R.array.settings_theme));
|
||||
@ -173,15 +306,18 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Shared
|
||||
set_theme_choice.setValueIndex(currentTheme);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//****** Video mode *******
|
||||
ListPreference set_video_mode_choice = findPreference(getString(R.string.set_video_mode_choice));
|
||||
List<String> array = Arrays.asList(getResources().getStringArray(R.array.settings_video_mode));
|
||||
CharSequence[] entries = array.toArray(new CharSequence[0]);
|
||||
CharSequence[] entryValues = new CharSequence[3];
|
||||
CharSequence[] entryValues = new CharSequence[4];
|
||||
int video_mode = sharedpref.getInt(Helper.SET_VIDEO_MODE, Helper.VIDEO_MODE_NORMAL);
|
||||
entryValues[0] = String.valueOf(Helper.VIDEO_MODE_NORMAL);
|
||||
entryValues[1] = String.valueOf(Helper.VIDEO_MODE_STREAMING);
|
||||
entryValues[1] = String.valueOf(Helper.VIDEO_MODE_MAGNET);
|
||||
entryValues[2] = String.valueOf(Helper.VIDEO_MODE_WEBVIEW);
|
||||
entryValues[3] = String.valueOf(Helper.VIDEO_MODE_TORRENT);
|
||||
if (set_video_mode_choice != null) {
|
||||
set_video_mode_choice.setEntries(entries);
|
||||
set_video_mode_choice.setEntryValues(entryValues);
|
||||
@ -208,12 +344,51 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Shared
|
||||
assert set_video_cache_choice != null;
|
||||
set_video_cache_choice.setValue(video_cache / 10);
|
||||
|
||||
//****** Minimized videos *******
|
||||
boolean minimized = sharedpref.getBoolean(getString(R.string.set_video_minimize_choice), true);
|
||||
SwitchPreference set_video_minimize_choice = findPreference(getString(R.string.set_video_minimize_choice));
|
||||
assert set_video_minimize_choice != null;
|
||||
set_video_minimize_choice.setChecked(minimized);
|
||||
if ( Build.VERSION.SDK_INT < Build.VERSION_CODES.O
|
||||
|| !getActivity().getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {
|
||||
set_video_minimize_choice.setVisible(false);
|
||||
}
|
||||
|
||||
|
||||
//****** Autoplay videos *******
|
||||
boolean autoplay = sharedpref.getBoolean(getString(R.string.set_autoplay_choice), true);
|
||||
SwitchPreference set_autoplay_choice = findPreference(getString(R.string.set_autoplay_choice));
|
||||
assert set_autoplay_choice != null;
|
||||
set_autoplay_choice.setChecked(autoplay);
|
||||
|
||||
|
||||
//****** Fullscreen videos *******
|
||||
boolean fullscreen = sharedpref.getBoolean(getString(R.string.set_fullscreen_choice), false);
|
||||
SwitchPreference set_fullscreen_choice = findPreference(getString(R.string.set_fullscreen_choice));
|
||||
assert set_fullscreen_choice != null;
|
||||
set_fullscreen_choice.setChecked(fullscreen);
|
||||
|
||||
//****** Autoplay next videos *******
|
||||
boolean autoplayNextVideo = sharedpref.getBoolean(getString(R.string.set_autoplay_next_video_choice), false);
|
||||
SwitchPreference set_autoplay_next_video_choice = findPreference(getString(R.string.set_autoplay_next_video_choice));
|
||||
assert set_autoplay_next_video_choice != null;
|
||||
set_autoplay_next_video_choice.setChecked(autoplayNextVideo);
|
||||
|
||||
|
||||
//****** Screen lock *******
|
||||
boolean playScreenLock = sharedpref.getBoolean(getString(R.string.set_play_screen_lock_choice), false);
|
||||
SwitchPreference set_play_screen_lock_choice = findPreference(getString(R.string.set_play_screen_lock_choice));
|
||||
assert set_play_screen_lock_choice != null;
|
||||
set_play_screen_lock_choice.setChecked(playScreenLock);
|
||||
|
||||
|
||||
//****** Display videos in a list *******
|
||||
boolean videosInList = sharedpref.getBoolean(getString(R.string.set_video_in_list_choice), false);
|
||||
SwitchPreference set_video_in_list_choice = findPreference(getString(R.string.set_video_in_list_choice));
|
||||
assert set_video_in_list_choice != null;
|
||||
set_video_in_list_choice.setChecked(videosInList);
|
||||
|
||||
//****** Language filter *********
|
||||
LinkedHashMap<String, String> languages = new LinkedHashMap<>(peertubeInformation.getLanguages());
|
||||
List<CharSequence> entriesLanguages = new ArrayList<>();
|
||||
List<CharSequence> valuesLanguages = new ArrayList<>();
|
||||
@ -233,6 +408,31 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Shared
|
||||
if (selection != null) {
|
||||
set_video_language_choice.setValues(selection);
|
||||
}
|
||||
|
||||
//****** Display sensitive content *******
|
||||
ListPreference set_video_sensitive_choice = findPreference(getString(R.string.set_video_sensitive_choice));
|
||||
List<String> arraySensitive = new ArrayList<>();
|
||||
arraySensitive.add(getString(R.string.do_not_list));
|
||||
arraySensitive.add(getString(R.string.blur));
|
||||
arraySensitive.add(getString(R.string.display));
|
||||
CharSequence[] entriesSensitive = arraySensitive.toArray(new CharSequence[0]);
|
||||
CharSequence[] entryValuesSensitive = new CharSequence[3];
|
||||
String currentSensitive = sharedpref.getString(getString(R.string.set_video_sensitive_choice), Helper.BLUR);
|
||||
entryValuesSensitive[0] = Helper.DO_NOT_LIST.toLowerCase();
|
||||
entryValuesSensitive[1] = Helper.BLUR.toLowerCase();
|
||||
entryValuesSensitive[2] = Helper.DISPLAY.toLowerCase();
|
||||
int currentSensitivePosition = 0;
|
||||
for(CharSequence val : entryValuesSensitive) {
|
||||
if(val.equals(currentSensitive)) {
|
||||
break;
|
||||
}
|
||||
currentSensitivePosition++;
|
||||
}
|
||||
if (set_video_sensitive_choice != null) {
|
||||
set_video_sensitive_choice.setEntries(entriesSensitive);
|
||||
set_video_sensitive_choice.setEntryValues(entryValuesSensitive);
|
||||
set_video_sensitive_choice.setValueIndex(currentSensitivePosition);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -17,16 +17,20 @@ package app.fedilab.fedilabtube.helper;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.DownloadManager;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.res.Resources;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.os.Parcelable;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
@ -42,12 +46,15 @@ import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.RequestBuilder;
|
||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
|
||||
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
|
||||
import com.bumptech.glide.request.RequestOptions;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
@ -66,6 +73,7 @@ import app.fedilab.fedilabtube.sqlite.Sqlite;
|
||||
import app.fedilab.fedilabtube.webview.CustomWebview;
|
||||
import app.fedilab.fedilabtube.webview.ProxyHelper;
|
||||
import es.dmoral.toasty.Toasty;
|
||||
import jp.wasabeef.glide.transformations.BlurTransformation;
|
||||
|
||||
import static android.content.Context.DOWNLOAD_SERVICE;
|
||||
|
||||
@ -78,15 +86,21 @@ public class Helper {
|
||||
public static final int LIGHT_MODE = 0;
|
||||
public static final int DARK_MODE = 1;
|
||||
public static final int DEFAULT_MODE = 2;
|
||||
public static final String DO_NOT_LIST = "do_not_list";
|
||||
public static final String BLUR = "blur";
|
||||
public static final String DISPLAY = "display";
|
||||
public static final String TIMELINE_TYPE = "timeline_type";
|
||||
public static final int VIDEO_MODE_NORMAL = 0;
|
||||
public static final int VIDEO_MODE_STREAMING = 2;
|
||||
public static final int VIDEO_MODE_MAGNET = 2;
|
||||
public static final int VIDEO_MODE_TORRENT = 3;
|
||||
public static final int VIDEO_MODE_WEBVIEW = 1;
|
||||
public static final int QUALITY_HIGH = 0;
|
||||
public static final int QUALITY_MEDIUM = 1;
|
||||
public static final int QUALITY_LOW = 2;
|
||||
public static final int ADD_USER_INTENT = 5;
|
||||
public static final String SET_SHARE_DETAILS = "set_share_details";
|
||||
public static final String NOTIFICATION_INTERVAL = "notification_interval";
|
||||
public static final String LAST_NOTIFICATION_READ = "last_notification_read";
|
||||
public static final int DEFAULT_VIDEO_CACHE_MB = 100;
|
||||
@SuppressWarnings({"unused", "RedundantSuppression"})
|
||||
public static final String TAG = "mastodon_etalab";
|
||||
@ -431,16 +445,21 @@ public class Helper {
|
||||
loadGiF(context, url, imageView, 10);
|
||||
}
|
||||
|
||||
public static void loadGiF(final Context context, String instance, String url, final ImageView imageView, boolean blur) {
|
||||
loadGif(context, instance, url, imageView, 10, blur);
|
||||
}
|
||||
|
||||
public static void loadGiF(final Context context, String instance, String url, final ImageView imageView) {
|
||||
loadGif(context, instance, url, imageView, 10);
|
||||
loadGif(context, instance, url, imageView, 10, false);
|
||||
}
|
||||
|
||||
public static void loadGiF(final Context context, String url, final ImageView imageView, int round) {
|
||||
loadGif(context, null, url, imageView, round);
|
||||
loadGif(context, null, url, imageView, round, false);
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
@SuppressWarnings("SameParameterValue")
|
||||
private static void loadGif(final Context context, String instance, String url, final ImageView imageView, int round) {
|
||||
private static void loadGif(final Context context, String instance, String url, final ImageView imageView, int round, boolean blur) {
|
||||
if (url == null || url.trim().toLowerCase().compareTo("null") == 0 || url.endsWith("null")) {
|
||||
Glide.with(imageView.getContext())
|
||||
.asDrawable()
|
||||
@ -456,11 +475,15 @@ public class Helper {
|
||||
url = "https://" + url;
|
||||
}
|
||||
try {
|
||||
Glide.with(imageView.getContext())
|
||||
RequestBuilder<Drawable> requestBuilder = Glide.with(imageView.getContext())
|
||||
.load(url)
|
||||
.thumbnail(0.1f)
|
||||
.apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(round)))
|
||||
.into(imageView);
|
||||
.thumbnail(0.1f);
|
||||
if( blur ) {
|
||||
requestBuilder.apply(new RequestOptions().transform(new BlurTransformation(50, 3), new CenterCrop(), new RoundedCorners(10)));
|
||||
}else {
|
||||
requestBuilder.apply(new RequestOptions().transform(new CenterCrop(), new RoundedCorners(round)));
|
||||
}
|
||||
requestBuilder.into(imageView);
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
Glide.with(imageView.getContext())
|
||||
@ -661,6 +684,9 @@ public class Helper {
|
||||
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
String userName = sharedpreferences.getString(Helper.PREF_KEY_NAME, "");
|
||||
String instance = sharedpreferences.getString(Helper.PREF_INSTANCE, "");
|
||||
if( video == null) {
|
||||
return false;
|
||||
}
|
||||
Account account = video.getAccount();
|
||||
ChannelData.Channel channel = video.getChannel();
|
||||
if (account != null && instance != null && userName != null) {
|
||||
@ -697,4 +723,44 @@ public class Helper {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Forward the intent (open an URL) to another app
|
||||
* @param activity Activity
|
||||
* @param i Intent
|
||||
*/
|
||||
public static void forwardToAnotherApp(Activity activity, Intent i) {
|
||||
Intent intent = new Intent();
|
||||
intent.setAction(android.content.Intent.ACTION_VIEW);
|
||||
intent.setDataAndType(i.getData(), i.getType());
|
||||
List<ResolveInfo> activities = activity.getPackageManager().queryIntentActivities(intent, 0);
|
||||
ArrayList<Intent> targetIntents = new ArrayList<>();
|
||||
String thisPackageName = activity.getPackageName();
|
||||
for (ResolveInfo currentInfo : activities) {
|
||||
String packageName = currentInfo.activityInfo.packageName;
|
||||
if (!thisPackageName.equals(packageName)) {
|
||||
Intent targetIntent = new Intent(android.content.Intent.ACTION_VIEW);
|
||||
targetIntent.setDataAndType(intent.getData(), intent.getType());
|
||||
targetIntent.setPackage(intent.getPackage());
|
||||
targetIntent.setComponent(new ComponentName(packageName, currentInfo.activityInfo.name));
|
||||
targetIntents.add(targetIntent);
|
||||
}
|
||||
}
|
||||
if (targetIntents.size() > 0) {
|
||||
Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), activity.getString(R.string.open_with));
|
||||
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));
|
||||
activity.startActivity(chooserIntent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static boolean instanceOnline(String host) {
|
||||
try {
|
||||
InetAddress ipAddr = InetAddress.getByName(host);
|
||||
return ipAddr.toString().trim().compareTo("") != 0;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,88 @@
|
||||
package app.fedilab.fedilabtube.helper;
|
||||
|
||||
/* Copyright 2020 Thomas Schneider
|
||||
*
|
||||
* This file is a part of TubeLab
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* TubeLab 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 TubeLab; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.media.RingtoneManager;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.core.app.NotificationManagerCompat;
|
||||
|
||||
import app.fedilab.fedilabtube.R;
|
||||
import app.fedilab.fedilabtube.client.data.AccountData;
|
||||
|
||||
import static app.fedilab.fedilabtube.worker.NotificationsWorker.FETCH_NOTIFICATION_CHANNEL_ID;
|
||||
|
||||
public class NotificationHelper {
|
||||
|
||||
|
||||
/**
|
||||
* Sends notification with intent
|
||||
*
|
||||
* @param context Context
|
||||
* @param intent Intent associated to the notifcation
|
||||
* @param icon Bitmap profile picture
|
||||
* @param title String title of the notification
|
||||
* @param message String message for the notification
|
||||
*/
|
||||
public static void notify_user(Context context, AccountData.Account account, Intent intent, Bitmap icon, String title, String message) {
|
||||
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
|
||||
int notificationId = (int) System.currentTimeMillis();
|
||||
PendingIntent pIntent = PendingIntent.getActivity(context, notificationId, intent, PendingIntent.FLAG_ONE_SHOT);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
|
||||
|
||||
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, FETCH_NOTIFICATION_CHANNEL_ID)
|
||||
.setSmallIcon(R.drawable.ic_notification_tubelab).setTicker(message)
|
||||
.setWhen(System.currentTimeMillis());
|
||||
notificationBuilder.setGroup(account.getAcct())
|
||||
.setContentIntent(pIntent)
|
||||
.setAutoCancel(true)
|
||||
.setContentText(message);
|
||||
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
NotificationChannel channel;
|
||||
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
channel = new NotificationChannel(FETCH_NOTIFICATION_CHANNEL_ID, context.getString(R.string.fetch_notification_channel_name), NotificationManager.IMPORTANCE_DEFAULT);
|
||||
mNotificationManager.createNotificationChannel(channel);
|
||||
}
|
||||
notificationBuilder.setContentTitle(title);
|
||||
notificationBuilder.setLargeIcon(icon);
|
||||
notificationManager.notify(notificationId, notificationBuilder.build());
|
||||
|
||||
Notification summaryNotification =
|
||||
new NotificationCompat.Builder(context, FETCH_NOTIFICATION_CHANNEL_ID)
|
||||
.setContentTitle(title)
|
||||
.setContentText(context.getApplicationContext().getString(R.string.fetch_notification_channel_name))
|
||||
.setContentIntent(pIntent)
|
||||
.setLargeIcon(icon)
|
||||
.setAutoCancel(true)
|
||||
.setSmallIcon(R.drawable.ic_notification_tubelab)
|
||||
.setGroup(account.getAcct())
|
||||
.setGroupSummary(true)
|
||||
.build();
|
||||
notificationManager.notify(0, summaryNotification);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -127,6 +127,7 @@ public class RetrieveInfoService extends Service implements NetworkStateReceiver
|
||||
@Override
|
||||
public void run() {
|
||||
EmojiHelper.fillMapEmoji(getApplicationContext());
|
||||
if( peertubeInformation == null || peertubeInformation.getCategories().size() == 0) {
|
||||
peertubeInformation = new PeertubeInformation();
|
||||
peertubeInformation.setCategories(new LinkedHashMap<>());
|
||||
peertubeInformation.setLanguages(new LinkedHashMap<>());
|
||||
@ -135,6 +136,7 @@ public class RetrieveInfoService extends Service implements NetworkStateReceiver
|
||||
peertubeInformation.setPlaylistPrivacies(new LinkedHashMap<>());
|
||||
peertubeInformation.setTranslations(new LinkedHashMap<>());
|
||||
peertubeInformation = new RetrofitPeertubeAPI(RetrieveInfoService.this).getPeertubeInformation();
|
||||
}
|
||||
stopForeground(true);
|
||||
}
|
||||
};
|
||||
|
@ -249,7 +249,23 @@ public class AccountDAO {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an Account by id and instance
|
||||
*
|
||||
* @param id String
|
||||
* @param instance String
|
||||
* @return Account
|
||||
*/
|
||||
public Account getAccountByIdInstance(String id, String instance) {
|
||||
|
||||
try {
|
||||
Cursor c = db.query(Sqlite.TABLE_USER_ACCOUNT, null, Sqlite.COL_USER_ID + " = \"" + id + "\" AND " + Sqlite.COL_INSTANCE + " = \"" + instance + "\"", null, null, null, null, "1");
|
||||
return cursorToUser(c);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Test if the current user is already stored in data base
|
||||
*
|
||||
|
@ -24,6 +24,8 @@ import androidx.lifecycle.AndroidViewModel;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import app.fedilab.fedilabtube.client.APIResponse;
|
||||
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
|
||||
|
||||
@ -41,6 +43,12 @@ public class SearchVM extends AndroidViewModel {
|
||||
return apiResponseMutableLiveData;
|
||||
}
|
||||
|
||||
public LiveData<APIResponse> searchNextVideos(List<String> tags) {
|
||||
apiResponseMutableLiveData = new MutableLiveData<>();
|
||||
loadNextVideos(tags);
|
||||
return apiResponseMutableLiveData;
|
||||
}
|
||||
|
||||
private void loadVideos(String max_id, String query) {
|
||||
Context _mContext = getApplication().getApplicationContext();
|
||||
new Thread(() -> {
|
||||
@ -55,4 +63,20 @@ public class SearchVM extends AndroidViewModel {
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
|
||||
private void loadNextVideos(List<String> tags) {
|
||||
Context _mContext = getApplication().getApplicationContext();
|
||||
new Thread(() -> {
|
||||
try {
|
||||
RetrofitPeertubeAPI api = new RetrofitPeertubeAPI(_mContext);
|
||||
APIResponse apiResponse = api.searchNextVideos(tags);
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
Runnable myRunnable = () -> apiResponseMutableLiveData.setValue(apiResponse);
|
||||
mainHandler.post(myRunnable);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,328 @@
|
||||
package app.fedilab.fedilabtube.worker;
|
||||
/* Copyright 2020 Thomas Schneider
|
||||
*
|
||||
* This file is a part of TubeLab
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* TubeLab 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 TubeLab; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.Html;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.work.ForegroundInfo;
|
||||
import androidx.work.Worker;
|
||||
import androidx.work.WorkerParameters;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.FutureTarget;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import app.fedilab.fedilabtube.MainActivity;
|
||||
import app.fedilab.fedilabtube.PeertubeActivity;
|
||||
import app.fedilab.fedilabtube.R;
|
||||
import app.fedilab.fedilabtube.ShowAccountActivity;
|
||||
import app.fedilab.fedilabtube.client.APIResponse;
|
||||
import app.fedilab.fedilabtube.client.RetrofitPeertubeAPI;
|
||||
import app.fedilab.fedilabtube.client.data.AccountData;
|
||||
import app.fedilab.fedilabtube.client.data.NotificationData;
|
||||
import app.fedilab.fedilabtube.client.entities.Actor;
|
||||
import app.fedilab.fedilabtube.client.entities.Error;
|
||||
import app.fedilab.fedilabtube.client.entities.NotificationSettings;
|
||||
import app.fedilab.fedilabtube.client.entities.UserMe;
|
||||
import app.fedilab.fedilabtube.fragment.DisplayNotificationsFragment;
|
||||
import app.fedilab.fedilabtube.helper.Helper;
|
||||
import app.fedilab.fedilabtube.helper.NotificationHelper;
|
||||
import app.fedilab.fedilabtube.sqlite.AccountDAO;
|
||||
import app.fedilab.fedilabtube.sqlite.Sqlite;
|
||||
|
||||
import static android.content.Context.NOTIFICATION_SERVICE;
|
||||
|
||||
public class NotificationsWorker extends Worker {
|
||||
|
||||
private final NotificationManager notificationManager;
|
||||
public static String FETCH_NOTIFICATION_CHANNEL_ID = "fetch_notification_peertube";
|
||||
public static int pendingNotificationID = 1;
|
||||
|
||||
public NotificationsWorker(
|
||||
@NonNull Context context,
|
||||
@NonNull WorkerParameters params) {
|
||||
super(context, params);
|
||||
notificationManager = (NotificationManager)
|
||||
context.getSystemService(NOTIFICATION_SERVICE);
|
||||
}
|
||||
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Result doWork() {
|
||||
Context applicationContext = getApplicationContext();
|
||||
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||
List<AccountData.Account> accounts = new AccountDAO(applicationContext, db).getAllAccount();
|
||||
if( accounts == null || accounts.size() == 0) {
|
||||
return Result.success();
|
||||
}
|
||||
setForegroundAsync(createForegroundInfo());
|
||||
fetchNotification();
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings({"SwitchStatementWithoutDefaultBranch", "DuplicateBranchesInSwitch"})
|
||||
private void fetchNotification() {
|
||||
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
|
||||
List<AccountData.Account> accounts = new AccountDAO(getApplicationContext(), db).getAllAccount();
|
||||
SharedPreferences sharedpreferences = getApplicationContext().getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
|
||||
SharedPreferences.Editor editor = sharedpreferences.edit();
|
||||
for(AccountData.Account account: accounts) {
|
||||
RetrofitPeertubeAPI retrofitPeertubeAPI = new RetrofitPeertubeAPI(getApplicationContext(), account.getHost(), account.getToken());
|
||||
APIResponse apiResponse = retrofitPeertubeAPI.getNotifications();
|
||||
if( apiResponse == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
UserMe userMe = retrofitPeertubeAPI.verifyCredentials();
|
||||
if( userMe != null) {
|
||||
List<NotificationData.Notification> notifications = apiResponse.getPeertubeNotifications();
|
||||
NotificationSettings notificationSettings = userMe.getNotificationSettings();
|
||||
if( apiResponse.getPeertubeNotifications() != null && apiResponse.getPeertubeNotifications().size() > 0 ) {
|
||||
String last_read = sharedpreferences.getString(Helper.LAST_NOTIFICATION_READ + account.getId() + account.getHost(), null);
|
||||
editor.putString(Helper.LAST_NOTIFICATION_READ + account.getId() + account.getHost(), apiResponse.getPeertubeNotifications().get(0).getId());
|
||||
editor.apply();
|
||||
if( last_read != null) {
|
||||
for(NotificationData.Notification notification: notifications) {
|
||||
String title = "";
|
||||
String message = "";
|
||||
FutureTarget<Bitmap> futureBitmap = Glide.with(getApplicationContext())
|
||||
.asBitmap()
|
||||
.load("https://"+account.getHost()+account.getAvatar()).submit();
|
||||
Bitmap icon;
|
||||
try {
|
||||
icon = futureBitmap.get();
|
||||
} catch (Exception e) {
|
||||
icon = BitmapFactory.decodeResource(getApplicationContext().getResources(),
|
||||
R.drawable.missing_peertube);
|
||||
}
|
||||
|
||||
Intent intent = null;
|
||||
if(notification.getId().compareTo(last_read) > 0) {
|
||||
switch (notification.getType()) {
|
||||
case DisplayNotificationsFragment.NEW_VIDEO_FROM_SUBSCRIPTION:
|
||||
if(notificationSettings.getNewVideoFromSubscription() == 1 || notificationSettings.getNewVideoFromSubscription() == 3) {
|
||||
if( notification.getVideo().getChannel().getAvatar() != null ) {
|
||||
FutureTarget<Bitmap> futureBitmapChannel = Glide.with(getApplicationContext())
|
||||
.asBitmap()
|
||||
.load("https://"+account.getHost()+notification.getVideo().getChannel().getAvatar().getPath()).submit();
|
||||
try {
|
||||
icon = futureBitmapChannel.get();
|
||||
} catch (Exception e) {
|
||||
icon = BitmapFactory.decodeResource(getApplicationContext().getResources(),
|
||||
R.drawable.missing_peertube);
|
||||
}
|
||||
|
||||
}else{
|
||||
icon = BitmapFactory.decodeResource(getApplicationContext().getResources(),
|
||||
R.drawable.missing_peertube);
|
||||
}
|
||||
title = getApplicationContext().getString(R.string.new_video);
|
||||
message = getApplicationContext().getString(R.string.peertube_video_from_subscription, notification.getVideo().getChannel().getDisplayName(), notification.getVideo().getName());
|
||||
intent = new Intent(getApplicationContext(), PeertubeActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
b.putParcelable("video", notification.getVideo());
|
||||
b.putString("peertube_instance", notification.getVideo().getChannel().getHost());
|
||||
b.putBoolean("isMyVideo", false);
|
||||
b.putString("video_id", notification.getVideo().getId());
|
||||
b.putString("video_uuid", notification.getVideo().getUuid());
|
||||
intent.putExtras(b);
|
||||
}
|
||||
break;
|
||||
case DisplayNotificationsFragment.NEW_COMMENT_ON_MY_VIDEO:
|
||||
if(notificationSettings.getNewCommentOnMyVideo() == 1 || notificationSettings.getNewCommentOnMyVideo() == 3) {
|
||||
if( notification.getComment().getAccount().getAvatar() != null ) {
|
||||
FutureTarget<Bitmap> futureBitmapChannel = Glide.with(getApplicationContext())
|
||||
.asBitmap()
|
||||
.load("https://"+account.getHost()+ notification.getComment().getAccount().getAvatar().getPath()).submit();
|
||||
try {
|
||||
icon = futureBitmapChannel.get();
|
||||
} catch (Exception e) {
|
||||
icon = BitmapFactory.decodeResource(getApplicationContext().getResources(),
|
||||
R.drawable.missing_peertube);
|
||||
}
|
||||
|
||||
}else{
|
||||
icon = BitmapFactory.decodeResource(getApplicationContext().getResources(),
|
||||
R.drawable.missing_peertube);
|
||||
}
|
||||
title = getApplicationContext().getString(R.string.new_comment);
|
||||
message = getApplicationContext().getString(R.string.peertube_comment_on_video, notification.getComment().getAccount().getDisplayName(), notification.getComment().getAccount().getUsername());
|
||||
intent = new Intent(getApplicationContext(), PeertubeActivity.class);
|
||||
Bundle b = new Bundle();
|
||||
b.putParcelable("video", notification.getVideo());
|
||||
b.putString("peertube_instance", notification.getVideo().getChannel().getHost());
|
||||
b.putBoolean("isMyVideo", false);
|
||||
b.putString("video_id", notification.getVideo().getId());
|
||||
b.putString("video_uuid", notification.getVideo().getUuid());
|
||||
intent.putExtras(b);
|
||||
}
|
||||
|
||||
break;
|
||||
case DisplayNotificationsFragment.NEW_ABUSE_FOR_MODERATORS:
|
||||
|
||||
break;
|
||||
case DisplayNotificationsFragment.BLACKLIST_ON_MY_VIDEO:
|
||||
if(notificationSettings.getBlacklistOnMyVideo() == 1 || notificationSettings.getBlacklistOnMyVideo() == 3) {
|
||||
title = getApplicationContext().getString(R.string.new_blacklist);
|
||||
message = getApplicationContext().getString(R.string.peertube_video_blacklist, notification.getVideo().getName());
|
||||
}
|
||||
break;
|
||||
case DisplayNotificationsFragment.UNBLACKLIST_ON_MY_VIDEO:
|
||||
if(notificationSettings.getBlacklistOnMyVideo() == 1 || notificationSettings.getBlacklistOnMyVideo() == 3) {
|
||||
title = getApplicationContext().getString(R.string.new_blacklist);
|
||||
message = getApplicationContext().getString(R.string.peertube_video_unblacklist, notification.getVideo().getName());
|
||||
}
|
||||
break;
|
||||
case DisplayNotificationsFragment.MY_VIDEO_PUBLISHED:
|
||||
if(notificationSettings.getMyVideoPublished() == 1 || notificationSettings.getMyVideoPublished() == 3) {
|
||||
title = getApplicationContext().getString(R.string.new_my_video_published);
|
||||
message = getApplicationContext().getString(R.string.peertube_video_published, notification.getVideo().getName());
|
||||
}
|
||||
break;
|
||||
case DisplayNotificationsFragment.MY_VIDEO_IMPORT_SUCCESS:
|
||||
if(notificationSettings.getMyVideoPublished() == 1 || notificationSettings.getMyVideoPublished() == 3) {
|
||||
message = getApplicationContext().getString(R.string.peertube_video_import_success, notification.getVideo().getName());
|
||||
title = getApplicationContext().getString(R.string.new_my_video_error);
|
||||
}
|
||||
break;
|
||||
case DisplayNotificationsFragment.MY_VIDEO_IMPORT_ERROR:
|
||||
if(notificationSettings.getMyVideoPublished() == 1 || notificationSettings.getMyVideoPublished() == 3) {
|
||||
message = getApplicationContext().getString(R.string.peertube_video_import_error, notification.getVideo().getName());
|
||||
title = getApplicationContext().getString(R.string.new_my_video_error);
|
||||
}
|
||||
break;
|
||||
case DisplayNotificationsFragment.NEW_USER_REGISTRATION:
|
||||
|
||||
break;
|
||||
case DisplayNotificationsFragment.NEW_FOLLOW:
|
||||
if(notificationSettings.getNewFollow() == 1 || notificationSettings.getNewFollow() == 3) {
|
||||
if( notification.getVideo().getChannel().getAvatar() != null ) {
|
||||
FutureTarget<Bitmap> futureBitmapChannel = Glide.with(getApplicationContext())
|
||||
.asBitmap()
|
||||
.load("https://"+account.getHost()+notification.getVideo().getChannel().getAvatar().getPath()).submit();
|
||||
icon = futureBitmapChannel.get();
|
||||
|
||||
}else{
|
||||
icon = BitmapFactory.decodeResource(getApplicationContext().getResources(),
|
||||
R.drawable.missing_peertube);
|
||||
}
|
||||
title = getApplicationContext().getString(R.string.new_video);
|
||||
String type = notification.getActorFollow().getFollowing().getType();
|
||||
if (type != null && type.compareTo("channel") == 0) {
|
||||
message = getApplicationContext().getString(R.string.peertube_follow_channel, notification.getActorFollow().getFollower().getDisplayName(), notification.getActorFollow().getFollowing().getDisplayName());
|
||||
} else {
|
||||
message = getApplicationContext().getString(R.string.peertube_follow_account, notification.getActorFollow().getFollower().getDisplayName());
|
||||
}
|
||||
Bundle b = new Bundle();
|
||||
Actor actor = notification.getActorFollow().getFollower();
|
||||
AccountData.Account accountAction = new AccountData.Account();
|
||||
accountAction.setAvatar(actor.getAvatar());
|
||||
accountAction.setDisplayName(actor.getDisplayName());
|
||||
accountAction.setHost(actor.getHost());
|
||||
accountAction.setUsername(actor.getName());
|
||||
intent = new Intent(getApplicationContext(), ShowAccountActivity.class);
|
||||
b.putParcelable("account", accountAction);
|
||||
b.putString("accountAcct", accountAction.getUsername() + "@" + accountAction.getHost());
|
||||
intent.putExtras(b);
|
||||
}
|
||||
break;
|
||||
case DisplayNotificationsFragment.COMMENT_MENTION:
|
||||
|
||||
break;
|
||||
case DisplayNotificationsFragment.VIDEO_AUTO_BLACKLIST_FOR_MODERATORS:
|
||||
|
||||
break;
|
||||
case DisplayNotificationsFragment.NEW_INSTANCE_FOLLOWER:
|
||||
|
||||
break;
|
||||
case DisplayNotificationsFragment.AUTO_INSTANCE_FOLLOWING:
|
||||
|
||||
break;
|
||||
case DisplayNotificationsFragment.MY_VIDEO_REPPORT_SUCCESS:
|
||||
|
||||
break;
|
||||
case DisplayNotificationsFragment.ABUSE_NEW_MESSAGE:
|
||||
|
||||
break;
|
||||
}
|
||||
if( message != null && icon != null && title != null) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
|
||||
message = Html.fromHtml(message, Html.FROM_HTML_MODE_LEGACY).toString();
|
||||
else
|
||||
message = Html.fromHtml(message).toString();
|
||||
NotificationHelper.notify_user(getApplicationContext(), account, intent, icon, title, message);
|
||||
}
|
||||
}else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Error | InterruptedException | ExecutionException error) {
|
||||
error.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private ForegroundInfo createForegroundInfo() {
|
||||
|
||||
String title = getApplicationContext().getString(R.string.fetch_notification_channel_name);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
NotificationChannel channel = new NotificationChannel(FETCH_NOTIFICATION_CHANNEL_ID,
|
||||
getApplicationContext().getString(R.string.fetch_notification_channel_name),
|
||||
NotificationManager.IMPORTANCE_LOW);
|
||||
channel.setSound(null, null);
|
||||
notificationManager.createNotificationChannel(channel);
|
||||
}
|
||||
Intent myIntent = new Intent(getApplicationContext(), MainActivity.class);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(
|
||||
getApplicationContext(),
|
||||
0,
|
||||
myIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT);
|
||||
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getApplicationContext(), FETCH_NOTIFICATION_CHANNEL_ID)
|
||||
.setContentTitle(title)
|
||||
.setTicker(title)
|
||||
.setProgress(100, 0, false)
|
||||
.setOnlyAlertOnce(true)
|
||||
.setContentIntent(pendingIntent)
|
||||
.setSmallIcon(R.drawable.ic_notification_tubelab)
|
||||
.setSound(null)
|
||||
.setAutoCancel(true)
|
||||
.setOngoing(true);
|
||||
return new ForegroundInfo(pendingNotificationID, notificationBuilder.build());
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package app.fedilab.fedilabtube.worker;
|
||||
/* Copyright 2020 Thomas Schneider
|
||||
*
|
||||
* This file is a part of TubeLab
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* TubeLab 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 TubeLab; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
import android.app.Application;
|
||||
import androidx.work.BackoffPolicy;
|
||||
import androidx.work.Constraints;
|
||||
import androidx.work.ExistingPeriodicWorkPolicy;
|
||||
import androidx.work.NetworkType;
|
||||
import androidx.work.PeriodicWorkRequest;
|
||||
import androidx.work.WorkManager;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class WorkHelper {
|
||||
|
||||
public static String NOTIFICATION_WORKER = "NOTIFICATION_WORKER";
|
||||
|
||||
public static void fetchNotifications(Application application, int interval) {
|
||||
|
||||
// Create Network constraint
|
||||
Constraints constraints = new Constraints.Builder()
|
||||
.setRequiredNetworkType(NetworkType.CONNECTED)
|
||||
.build();
|
||||
|
||||
WorkManager workManager = WorkManager.getInstance(application.getApplicationContext());
|
||||
PeriodicWorkRequest periodicSyncDataWork =
|
||||
new PeriodicWorkRequest.Builder(NotificationsWorker.class, interval, TimeUnit.MINUTES)
|
||||
.setConstraints(constraints)
|
||||
// setting a backoff on case the work needs to retry
|
||||
.setBackoffCriteria(BackoffPolicy.LINEAR, PeriodicWorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS)
|
||||
.build();
|
||||
workManager.enqueueUniquePeriodicWork(
|
||||
NOTIFICATION_WORKER,
|
||||
ExistingPeriodicWorkPolicy.KEEP, //Existing Periodic Work policy
|
||||
periodicSyncDataWork //work request
|
||||
);
|
||||
|
||||
}
|
||||
}
|
10
app/src/main/res/drawable/ic_baseline_blur_on_24.xml
Normal file
10
app/src/main/res/drawable/ic_baseline_blur_on_24.xml
Normal 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="M6,13c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1zM6,17c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1zM6,9c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1zM3,9.5c-0.28,0 -0.5,0.22 -0.5,0.5s0.22,0.5 0.5,0.5 0.5,-0.22 0.5,-0.5 -0.22,-0.5 -0.5,-0.5zM6,5c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1zM21,10.5c0.28,0 0.5,-0.22 0.5,-0.5s-0.22,-0.5 -0.5,-0.5 -0.5,0.22 -0.5,0.5 0.22,0.5 0.5,0.5zM14,7c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1 -1,0.45 -1,1 0.45,1 1,1zM14,3.5c0.28,0 0.5,-0.22 0.5,-0.5s-0.22,-0.5 -0.5,-0.5 -0.5,0.22 -0.5,0.5 0.22,0.5 0.5,0.5zM3,13.5c-0.28,0 -0.5,0.22 -0.5,0.5s0.22,0.5 0.5,0.5 0.5,-0.22 0.5,-0.5 -0.22,-0.5 -0.5,-0.5zM10,20.5c-0.28,0 -0.5,0.22 -0.5,0.5s0.22,0.5 0.5,0.5 0.5,-0.22 0.5,-0.5 -0.22,-0.5 -0.5,-0.5zM10,3.5c0.28,0 0.5,-0.22 0.5,-0.5s-0.22,-0.5 -0.5,-0.5 -0.5,0.22 -0.5,0.5 0.22,0.5 0.5,0.5zM10,7c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1 -1,0.45 -1,1 0.45,1 1,1zM10,12.5c-0.83,0 -1.5,0.67 -1.5,1.5s0.67,1.5 1.5,1.5 1.5,-0.67 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM18,13c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1zM18,17c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1zM18,9c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1zM18,5c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1zM21,13.5c-0.28,0 -0.5,0.22 -0.5,0.5s0.22,0.5 0.5,0.5 0.5,-0.22 0.5,-0.5 -0.22,-0.5 -0.5,-0.5zM14,17c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1zM14,20.5c-0.28,0 -0.5,0.22 -0.5,0.5s0.22,0.5 0.5,0.5 0.5,-0.22 0.5,-0.5 -0.22,-0.5 -0.5,-0.5zM10,8.5c-0.83,0 -1.5,0.67 -1.5,1.5s0.67,1.5 1.5,1.5 1.5,-0.67 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM10,17c-0.55,0 -1,0.45 -1,1s0.45,1 1,1 1,-0.45 1,-1 -0.45,-1 -1,-1zM14,12.5c-0.83,0 -1.5,0.67 -1.5,1.5s0.67,1.5 1.5,1.5 1.5,-0.67 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM14,8.5c-0.83,0 -1.5,0.67 -1.5,1.5s0.67,1.5 1.5,1.5 1.5,-0.67 1.5,-1.5 -0.67,-1.5 -1.5,-1.5z"/>
|
||||
</vector>
|
@ -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="M21,3L3,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h18c1.1,0 2,-0.9 2,-2L23,5c0,-1.1 -0.9,-2 -2,-2zM12,11L3,11L3,9h9v2zM12,7L3,7L3,5h9v2z"/>
|
||||
</vector>
|
@ -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="M15.1,19.37l1,1.74c-0.96,0.44 -2.01,0.73 -3.1,0.84v-2.02C13.74,19.84 14.44,19.65 15.1,19.37zM4.07,13H2.05c0.11,1.1 0.4,2.14 0.84,3.1l1.74,-1C4.35,14.44 4.16,13.74 4.07,13zM15.1,4.63l1,-1.74C15.14,2.45 14.1,2.16 13,2.05v2.02C13.74,4.16 14.44,4.35 15.1,4.63zM19.93,11h2.02c-0.11,-1.1 -0.4,-2.14 -0.84,-3.1l-1.74,1C19.65,9.56 19.84,10.26 19.93,11zM8.9,19.37l-1,1.74c0.96,0.44 2.01,0.73 3.1,0.84v-2.02C10.26,19.84 9.56,19.65 8.9,19.37zM11,4.07V2.05c-1.1,0.11 -2.14,0.4 -3.1,0.84l1,1.74C9.56,4.35 10.26,4.16 11,4.07zM18.36,7.17l1.74,-1.01c-0.63,-0.87 -1.4,-1.64 -2.27,-2.27l-1.01,1.74C17.41,6.08 17.92,6.59 18.36,7.17zM4.63,8.9l-1.74,-1C2.45,8.86 2.16,9.9 2.05,11h2.02C4.16,10.26 4.35,9.56 4.63,8.9zM19.93,13c-0.09,0.74 -0.28,1.44 -0.56,2.1l1.74,1c0.44,-0.96 0.73,-2.01 0.84,-3.1H19.93zM16.83,18.36l1.01,1.74c0.87,-0.63 1.64,-1.4 2.27,-2.27l-1.74,-1.01C17.92,17.41 17.41,17.92 16.83,18.36zM7.17,5.64L6.17,3.89C5.29,4.53 4.53,5.29 3.9,6.17l1.74,1.01C6.08,6.59 6.59,6.08 7.17,5.64zM5.64,16.83L3.9,17.83c0.63,0.87 1.4,1.64 2.27,2.27l1.01,-1.74C6.59,17.92 6.08,17.41 5.64,16.83zM13,7h-2v5.41l4.29,4.29l1.41,-1.41L13,11.59V7z"/>
|
||||
</vector>
|
10
app/src/main/res/drawable/ic_baseline_open_in_full_24.xml
Normal file
10
app/src/main/res/drawable/ic_baseline_open_in_full_24.xml
Normal 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="M21,11l0,-8l-8,0l3.29,3.29l-10,10l-3.29,-3.29l0,8l8,0l-3.29,-3.29l10,-10z"/>
|
||||
</vector>
|
10
app/src/main/res/drawable/ic_baseline_play_arrow_24.xml
Normal file
10
app/src/main/res/drawable/ic_baseline_play_arrow_24.xml
Normal 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="M8,5v14l11,-7z"/>
|
||||
</vector>
|
@ -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="M10,16h4c0.55,0 1,-0.45 1,-1v-3c0,-0.55 -0.45,-1 -1,-1v-1c0,-1.11 -0.9,-2 -2,-2 -1.11,0 -2,0.9 -2,2v1c-0.55,0 -1,0.45 -1,1v3c0,0.55 0.45,1 1,1zM10.8,10c0,-0.66 0.54,-1.2 1.2,-1.2 0.66,0 1.2,0.54 1.2,1.2v1h-2.4v-1zM17,1L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2L19,3c0,-1.1 -0.9,-2 -2,-2zM17,19L7,19L7,5h10v14z"/>
|
||||
</vector>
|
10
app/src/main/res/drawable/ic_baseline_view_list_24.xml
Normal file
10
app/src/main/res/drawable/ic_baseline_view_list_24.xml
Normal 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="M4,14h4v-4L4,10v4zM4,19h4v-4L4,15v4zM4,9h4L8,5L4,5v4zM9,14h12v-4L9,10v4zM9,19h12v-4L9,15v4zM9,5v4h12L21,5L9,5z"/>
|
||||
</vector>
|
@ -258,7 +258,7 @@
|
||||
android:layout_marginStart="5dp"
|
||||
android:layout_weight="3"
|
||||
android:autoLink="web"
|
||||
android:text="https://framagit.org/tom79/fedilab-tube/-/issues"
|
||||
android:text="https://github.com/stom79/TubeLab/issues"
|
||||
tools:ignore="HardcodedText" />
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -56,59 +56,55 @@
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="20dp"
|
||||
android:paddingStart="50dp"
|
||||
android:paddingEnd="50dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/instance_chosen"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="20dp"
|
||||
android:textColor="?colorAccent"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
|
||||
android:id="@+id/login_instance_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/instance_chosen">
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:labelText="@string/title_instance_login"
|
||||
app:secondaryColor="?attr/colorAccent"
|
||||
app:primaryColor="?attr/colorAccent">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||
android:id="@+id/login_instance"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/title_instance_login"
|
||||
android:paddingTop="2dp"
|
||||
android:inputType="textWebEmailAddress"
|
||||
android:singleLine="true" />
|
||||
android:singleLine="true"
|
||||
android:importantForAutofill="no" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
|
||||
android:id="@+id/login_uid_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/login_instance_container">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
app:layout_constraintTop_toBottomOf="@id/login_instance_container"
|
||||
app:labelText="@string/email_address"
|
||||
app:secondaryColor="?attr/colorAccent"
|
||||
app:primaryColor="?attr/colorAccent"
|
||||
>
|
||||
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||
android:id="@+id/login_uid"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/email_address"
|
||||
android:inputType="textEmailAddress"
|
||||
android:singleLine="true" />
|
||||
android:singleLine="true"
|
||||
android:importantForAutofill="no" />
|
||||
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
|
||||
android:id="@+id/login_passwd_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
@ -116,17 +112,19 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/login_uid_container"
|
||||
app:passwordToggleEnabled="true">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
app:passwordToggleEnabled="true"
|
||||
app:labelText="@string/password"
|
||||
app:secondaryColor="?attr/colorAccent"
|
||||
app:primaryColor="?attr/colorAccent"
|
||||
>
|
||||
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||
android:id="@+id/login_passwd"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/password"
|
||||
android:inputType="textPassword"
|
||||
android:singleLine="true" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
android:singleLine="true"
|
||||
android:importantForAutofill="no" />
|
||||
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
|
||||
|
||||
<Button
|
||||
android:id="@+id/login_button"
|
||||
|
345
app/src/main/res/layout/activity_my_account_settings.xml
Normal file
345
app/src/main/res/layout/activity_my_account_settings.xml
Normal file
@ -0,0 +1,345 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
>
|
||||
<ImageView
|
||||
android:layout_marginTop="20dp"
|
||||
android:id="@+id/profile_picture"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:contentDescription="@string/profile_picture"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"/>
|
||||
<Button
|
||||
android:id="@+id/select_file"
|
||||
style="@style/Widget.AppCompat.Button.Borderless"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:singleLine="true"
|
||||
android:layout_marginStart="20dp"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:text="@string/change_profile_picture"
|
||||
app:layout_constraintStart_toEndOf="@+id/profile_picture"
|
||||
app:layout_constraintBottom_toBottomOf="@id/profile_picture" />
|
||||
|
||||
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
|
||||
android:id="@+id/displayname_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
app:secondaryColor="?attr/colorAccent"
|
||||
app:primaryColor="?attr/colorAccent"
|
||||
app:labelText="@string/display_name"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/profile_picture">
|
||||
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||
android:id="@+id/displayname"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="text"
|
||||
android:singleLine="true"
|
||||
android:importantForAutofill="no" />
|
||||
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
|
||||
|
||||
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
|
||||
android:id="@+id/description_container"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
app:secondaryColor="?attr/colorAccent"
|
||||
app:primaryColor="?attr/colorAccent"
|
||||
app:labelText="@string/description"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/displayname_container">
|
||||
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="textMultiLine"
|
||||
android:gravity="top"
|
||||
android:lines="4"
|
||||
android:minLines="4"
|
||||
android:maxLines="6"
|
||||
android:singleLine="false"
|
||||
android:importantForAutofill="no" />
|
||||
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
|
||||
|
||||
<TextView
|
||||
android:layout_marginStart="20dp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/description_container"
|
||||
android:id="@+id/notification_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:textSize="18sp"
|
||||
android:textAllCaps="true"
|
||||
android:layout_marginTop="20dp"
|
||||
android:text="@string/title_notifications"/>
|
||||
|
||||
<TextView
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:id="@+id/spinner_indication"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:text="@string/refresh_every"
|
||||
android:labelFor="@+id/refresh_every"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/refresh_time"
|
||||
android:gravity="center_vertical"
|
||||
app:layout_constraintTop_toBottomOf="@+id/notification_title"/>
|
||||
<Spinner
|
||||
android:layout_marginTop="20dp"
|
||||
android:layout_marginStart="20dp"
|
||||
android:text="@string/refresh_every"
|
||||
app:layout_constraintStart_toEndOf="@+id/spinner_indication"
|
||||
app:layout_constraintTop_toBottomOf="@+id/notification_title"
|
||||
android:id="@+id/refresh_time"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"/>
|
||||
<LinearLayout
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/refresh_time"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_margin="20dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_weight="10"
|
||||
android:textStyle="bold"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/activity"/>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:textStyle="bold"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/app"/>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:textStyle="bold"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/email"/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="10"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/notif_new_video"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_new_video_app"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_new_video_mail"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="10"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/notif_new_comment"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_new_comment_app"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_new_comment_mail"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="10"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/notif_blocked"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_blocked_app"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_blocked_mail"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="10"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/notif_video_published"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_video_published_app"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_video_published_mail"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="10"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/notif_video_imported"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_video_imported_app"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_video_imported_mail"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="10"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/notif_new_followers"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_new_followers_app"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_new_followers_mail"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="10"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/notif_video_mention"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_video_mention_app"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_video_mention_mail"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="10"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/notif_abuse_received"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_abuse_received_app"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_abuse_received_mail"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="10"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/notif_abuse_accepted"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_abuse_accepted_app"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/notif_abuse_accepted_mail"
|
||||
android:layout_weight="1"
|
||||
/>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</ScrollView>
|
@ -45,11 +45,20 @@
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent">
|
||||
|
||||
<com.google.android.exoplayer2.ui.PlayerView
|
||||
<com.github.vkay94.dtpv.DoubleTapPlayerView
|
||||
android:id="@+id/doubleTapPlayerView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:use_controller="true"
|
||||
app:dtpv_controller="@+id/media_video" />
|
||||
|
||||
<com.github.vkay94.dtpv.youtube.YouTubeOverlay
|
||||
android:id="@+id/media_video"
|
||||
android:animateLayoutChanges="true"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="invisible"
|
||||
app:yt_playerView="@+id/doubleTapPlayerView"
|
||||
android:gravity="center" />
|
||||
|
||||
<app.fedilab.fedilabtube.webview.CustomWebview
|
||||
@ -112,6 +121,16 @@
|
||||
android:layout_marginTop="5dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="50dp"
|
||||
android:layout_height="50dp"
|
||||
android:id="@+id/pp_channel"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginLeft="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginRight="10dp"
|
||||
android:contentDescription="@string/profile_picture"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/peertube_view_count"
|
||||
android:layout_width="wrap_content"
|
||||
@ -216,7 +235,14 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/peertube_description_more"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/show_more"
|
||||
android:visibility="gone"
|
||||
android:textColor="?attr/colorAccent"
|
||||
android:layout_marginTop="2dp" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/write_comment_container"
|
||||
|
@ -62,20 +62,32 @@
|
||||
|
||||
|
||||
<LinearLayout
|
||||
android:visibility="gone"
|
||||
android:id="@+id/title_login_instance"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<TextView
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:gravity="center_vertical"
|
||||
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
|
||||
android:id="@+id/login_instance_container"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
app:secondaryColor="?attr/colorAccent"
|
||||
app:primaryColor="?attr/colorAccent"
|
||||
app:labelText="@string/title_instance_login"
|
||||
app:layout_constraintEnd_toEndOf="parent">
|
||||
|
||||
android:labelFor="@+id/login_instance"
|
||||
android:text="@string/title_instance_login" />
|
||||
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||
android:id="@+id/login_instance"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="textWebEditText"
|
||||
android:singleLine="true"
|
||||
android:importantForAutofill="no" />
|
||||
|
||||
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
|
||||
|
||||
<Button
|
||||
android:id="@+id/instance_help"
|
||||
@ -88,118 +100,94 @@
|
||||
</LinearLayout>
|
||||
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/login_instance_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/login_instance"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="textWebEditText"
|
||||
android:singleLine="true" />
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
|
||||
<TextView
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="20dp"
|
||||
android:labelFor="@+id/username"
|
||||
android:text="@string/username" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:secondaryColor="?attr/colorAccent"
|
||||
app:primaryColor="?attr/colorAccent"
|
||||
app:labelText="@string/username"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||
android:id="@+id/username"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLength="50" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
android:maxLength="50"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="text" />
|
||||
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="12sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
|
||||
android:layout_marginTop="10dp"
|
||||
android:labelFor="@+id/email"
|
||||
android:text="@string/email" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:secondaryColor="?attr/colorAccent"
|
||||
app:primaryColor="?attr/colorAccent"
|
||||
app:labelText="@string/email"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||
android:id="@+id/email"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
android:layout_height="wrap_content"
|
||||
android:importantForAutofill="no"
|
||||
android:inputType="textEmailAddress" />
|
||||
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
|
||||
|
||||
<TextView
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/email_indicator"
|
||||
android:textSize="12sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:labelFor="@+id/password"
|
||||
android:text="@string/password" />
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:secondaryColor="?attr/colorAccent"
|
||||
app:primaryColor="?attr/colorAccent"
|
||||
app:labelText="@string/password"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||
android:id="@+id/password"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
android:inputType="textPassword"
|
||||
android:hint="@string/password"
|
||||
android:importantForAutofill="no" />
|
||||
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
|
||||
|
||||
|
||||
<TextView
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/password_indicator"
|
||||
android:textSize="12sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="150dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="10dp"
|
||||
android:labelFor="@+id/password_confirm"
|
||||
android:text="@string/password_confirm" />
|
||||
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
<studio.carbonylgroup.textfieldboxes.TextFieldBoxes
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:secondaryColor="?attr/colorAccent"
|
||||
app:primaryColor="?attr/colorAccent"
|
||||
app:labelText="@string/password_confirm"
|
||||
app:errorEnabled="true">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
<studio.carbonylgroup.textfieldboxes.ExtendedEditText
|
||||
android:id="@+id/password_confirm"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="textPassword" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
android:inputType="textPassword"
|
||||
android:importantForAutofill="no" />
|
||||
</studio.carbonylgroup.textfieldboxes.TextFieldBoxes>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
@ -218,6 +206,7 @@
|
||||
</LinearLayout>
|
||||
|
||||
<Button
|
||||
android:layout_marginTop="10dp"
|
||||
android:id="@+id/signup"
|
||||
style="@style/Base.Widget.AppCompat.Button.Colored"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -42,6 +42,7 @@
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:id="@+id/preview_container"
|
||||
android:layout_height="200dp">
|
||||
|
||||
<ImageView
|
||||
@ -127,6 +128,17 @@
|
||||
android:layout_marginStart="5dp" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
<ImageView
|
||||
android:id="@+id/peertube_video_image_small"
|
||||
android:layout_width="80dp"
|
||||
android:layout_height="80dp"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:contentDescription="@string/image_preview"
|
||||
android:gravity="center"
|
||||
android:visibility="gone"
|
||||
android:scaleType="centerCrop"
|
||||
/>
|
||||
<TextView
|
||||
android:id="@+id/more_actions"
|
||||
android:layout_width="wrap_content"
|
||||
|
@ -10,15 +10,12 @@
|
||||
limitations under the License.
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:background="#CC000000"
|
||||
android:animateLayoutChanges="true"
|
||||
android:layoutDirection="ltr"
|
||||
android:orientation="vertical"
|
||||
tools:targetApi="28">
|
||||
android:orientation="vertical">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
9
app/src/main/res/layout/save_button.xml
Normal file
9
app/src/main/res/layout/save_button.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Button android:id="@+id/set_preview"
|
||||
style="@style/Widget.AppCompat.Button.Colored"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:gravity="center"
|
||||
android:text="@string/save"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
@ -11,4 +11,9 @@
|
||||
android:icon="@drawable/ic_baseline_report_24"
|
||||
android:title="@string/report"
|
||||
app:showAsAction="never" />
|
||||
<item
|
||||
android:id="@+id/action_share"
|
||||
android:icon="@drawable/ic_baseline_share_24"
|
||||
android:title="@string/share"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
||||
|
@ -55,6 +55,13 @@
|
||||
android:icon="@drawable/ic_baseline_search_24"
|
||||
android:title="@string/sepia_search"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/action_incognito"
|
||||
android:icon="@drawable/ic_baseline_history_toggle_off_24"
|
||||
android:title="@string/enable_history"
|
||||
android:checkable="true"
|
||||
app:actionViewClass="android.widget.CheckBox"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/action_about"
|
||||
android:icon="@drawable/ic_baseline_info_24"
|
||||
|
9
app/src/main/res/menu/main_my_account.xml
Normal file
9
app/src/main/res/menu/main_my_account.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_validate"
|
||||
android:icon="@drawable/ic_check_white_24dp"
|
||||
android:title="@string/validate"
|
||||
app:showAsAction="always" />
|
||||
</menu>
|
@ -3,6 +3,14 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:key="app_prefs">
|
||||
|
||||
<Preference
|
||||
android:key="my_account">
|
||||
<intent
|
||||
android:action="android.intent.action.VIEW"
|
||||
android:targetPackage="@string/app_id"
|
||||
android:targetClass="app.fedilab.fedilabtube.MyAccountActivity" />
|
||||
</Preference>
|
||||
<PreferenceCategory android:title="@string/video_settings">
|
||||
<androidx.preference.ListPreference
|
||||
android:icon="@drawable/ic_baseline_slow_motion_video_24"
|
||||
@ -21,6 +29,30 @@
|
||||
android:summary="@string/set_video_quality_description"
|
||||
android:title="@string/set_quality_mode" />
|
||||
|
||||
<androidx.preference.SwitchPreference
|
||||
android:icon="@drawable/ic_baseline_play_arrow_24"
|
||||
android:key="@string/set_autoplay_choice"
|
||||
android:summary="@string/set_autoplay_description"
|
||||
android:title="@string/set_autoplay" />
|
||||
|
||||
<androidx.preference.SwitchPreference
|
||||
android:icon="@drawable/ic_baseline_open_in_full_24"
|
||||
android:key="@string/set_fullscreen_choice"
|
||||
android:summary="@string/set_fullscreen_description"
|
||||
android:title="@string/set_fullscreen" />
|
||||
|
||||
<androidx.preference.SwitchPreference
|
||||
android:icon="@drawable/ic_baseline_featured_play_list_24"
|
||||
android:key="@string/set_autoplay_next_video_choice"
|
||||
android:summary="@string/set_autoplay_next_video_description"
|
||||
android:title="@string/set_autoplay_next_video" />
|
||||
|
||||
<androidx.preference.SwitchPreference
|
||||
android:icon="@drawable/ic_baseline_screen_lock_portrait_24"
|
||||
android:key="@string/set_play_screen_lock_choice"
|
||||
android:summary="@string/set_play_screen_lock_description"
|
||||
android:title="@string/set_play_screen_lock" />
|
||||
|
||||
<androidx.preference.SeekBarPreference
|
||||
android:icon="@drawable/ic_baseline_storage_24"
|
||||
android:defaultValue="10"
|
||||
@ -36,10 +68,19 @@
|
||||
android:key="@string/set_theme_choice"
|
||||
android:summary="@string/set_theme_description"
|
||||
android:title="@string/set_theme" />
|
||||
<androidx.preference.ListPreference
|
||||
android:icon="@drawable/ic_baseline_blur_on_24"
|
||||
android:key="@string/set_video_sensitive_choice"
|
||||
android:title="@string/sepia_element_nsfw" />
|
||||
<androidx.preference.MultiSelectListPreference
|
||||
android:icon="@drawable/ic_baseline_language_24"
|
||||
android:key="@string/set_video_language_choice"
|
||||
android:summary="@string/set_video_language_description"
|
||||
android:title="@string/set_video_language" />
|
||||
<androidx.preference.SwitchPreference
|
||||
android:icon="@drawable/ic_baseline_view_list_24"
|
||||
android:key="@string/set_video_in_list_choice"
|
||||
android:summary="@string/set_video_in_list_description"
|
||||
android:title="@string/set_video_in_list" />
|
||||
</PreferenceCategory>
|
||||
</androidx.preference.PreferenceScreen>
|
BIN
images/get-it-on-fdroid.png
Normal file
BIN
images/get-it-on-fdroid.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
images/get-it-on-play.png
Normal file
BIN
images/get-it-on-play.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
25
issue_template.md
Normal file
25
issue_template.md
Normal file
@ -0,0 +1,25 @@
|
||||
### Issue
|
||||
<!-- Please, describe the issue here -->
|
||||
|
||||
|
||||
|
||||
### Steps for reproducing the issue
|
||||
<!-- Step, to reproduce it -->
|
||||
|
||||
|
||||
---
|
||||
<!-- The instance you are using -->
|
||||
Instance:
|
||||
|
||||
<!-- The app you are using -->
|
||||
<!-- Put a x between brackets like: - [x] TubeLab -->
|
||||
- [ ] TubeLab
|
||||
- [ ] TubeAcad
|
||||
|
||||
|
||||
<!-- If you know the version of TubeLab that you are using (can be found in about page) -->
|
||||
Version of TubeLab:
|
||||
|
||||
|
||||
<!-- Your Android version -->
|
||||
Android version:
|
Reference in New Issue
Block a user