Merge branch 'develop'

This commit is contained in:
Óscar García Amor 2021-01-19 09:07:22 +01:00
commit 3c0485c98b
No known key found for this signature in database
GPG Key ID: E18B2370D3D566EE
7 changed files with 116 additions and 17 deletions

View File

@ -29,7 +29,7 @@ and test.
### Pull Request Process
1. Ensure all commits are signed-off.
1. Ensure [all commits are signed-off](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/about-commit-signature-verification).
2. Check tests for the new code are added.
3. Check code style is passing.
4. Check code static analysis is passing.

View File

@ -10,6 +10,12 @@ Ultrasonic is free and open-source music streaming Android client for [Subsonic]
We currently don't have that much time to spend developing Subsonic, so any
contributions or active developers are always welcomed.
### BIG FAT WARNING
At this moment all new features and enhancements are blocked by #310, this
means that no new PR will be accepted until this issue is closed. Obviously
any PR to fix #310 are welcomed and celebrated.
## Download
App is available to download at following stores:

View File

@ -9,8 +9,8 @@ android {
defaultConfig {
applicationId "org.moire.ultrasonic"
versionCode 87
versionName "2.17.3"
versionCode 88
versionName "2.18.0"
minSdkVersion versions.minSdk
targetSdkVersion versions.targetSdk

View File

@ -806,6 +806,11 @@ public class SelectAlbumActivity extends SubsonicTabActivity
new LoadTask()
{
@Override
protected boolean sortableCollection() {
return false;
}
@Override
protected MusicDirectory load(MusicService service) throws Exception
{
@ -882,6 +887,16 @@ public class SelectAlbumActivity extends SubsonicTabActivity
new LoadTask()
{
@Override
protected boolean sortableCollection() {
if (albumListType.equals("newest") || albumListType.equals("random") ||
albumListType.equals("highest") || albumListType.equals("recent") ||
albumListType.equals("frequent")) {
return false;
}
return true;
}
@Override
protected MusicDirectory load(MusicService service) throws Exception
{
@ -1096,6 +1111,10 @@ public class SelectAlbumActivity extends SubsonicTabActivity
protected abstract MusicDirectory load(MusicService service) throws Exception;
protected boolean sortableCollection() {
return true;
}
@Override
protected Pair<MusicDirectory, Boolean> doInBackground() throws Throwable
{
@ -1111,7 +1130,7 @@ public class SelectAlbumActivity extends SubsonicTabActivity
MusicDirectory musicDirectory = result.getFirst();
List<MusicDirectory.Entry> entries = musicDirectory.getChildren();
if (Util.getShouldSortByDisc(SelectAlbumActivity.this))
if (sortableCollection() && Util.getShouldSortByDisc(SelectAlbumActivity.this))
{
Collections.sort(entries, new EntryByDiscAndTrackComparator());
}

View File

@ -170,6 +170,9 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen
restart();
}
// This must be filled here because onCreate is called before the derived objects would call setContentView
getNowPlayingView();
if (!nowPlayingHidden)
{
showNowPlaying();
@ -242,6 +245,19 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen
return destroyed;
}
private void getNowPlayingView()
{
if (nowPlayingView == null)
{
try {
nowPlayingView = findViewById(R.id.now_playing);
}
catch (Exception exception) {
Timber.w(exception, "An exception has occurred while trying to get the nowPlayingView by findViewById");
}
}
}
public void showNowPlaying()
{
this.runOnUiThread(new Runnable()
@ -260,8 +276,6 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen
return null;
}
nowPlayingView = findViewById(R.id.now_playing);
if (nowPlayingView != null)
{
PlayerState playerState = mediaPlayerControllerLazy.getValue().getPlayerState();
@ -307,11 +321,6 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen
return;
}
if (nowPlayingView == null)
{
nowPlayingView = findViewById(R.id.now_playing);
}
if (nowPlayingView != null)
{
try
@ -407,11 +416,6 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen
{
try
{
if (nowPlayingView == null)
{
nowPlayingView = findViewById(R.id.now_playing);
}
if (nowPlayingView != null)
{
setVisibilityOnUiThread(nowPlayingView, View.GONE);

View File

@ -18,6 +18,8 @@ public class EntryByDiscAndTrackComparator implements Comparator<MusicDirectory.
Integer trackY = y.getTrack();
String albumX = x.getAlbum();
String albumY = y.getAlbum();
String pathX = x.getPath();
String pathY = y.getPath();
int albumComparison = compare(albumX, albumY);
@ -33,7 +35,14 @@ public class EntryByDiscAndTrackComparator implements Comparator<MusicDirectory.
return discComparison;
}
return compare(trackX == null ? 0 : trackX, trackY == null ? 0 : trackY);
int trackComparison = compare(trackX == null ? 0 : trackX, trackY == null ? 0 : trackY);
if (trackComparison != 0)
{
return trackComparison;
}
return compare(pathX == null ? "" : pathX, pathY == null ? "" : pathY);
}
private static int compare(long a, long b)

View File

@ -3,6 +3,7 @@
<string name="background_task.loading">Chargement&#8230;</string>
<string name="background_task.network_error">Une erreur réseau est survenue. Veuillez vérifier l\'adresse du serveur ou réessayer plus tard.</string>
<string name="background_task.unsupported_api">LAPI v%1$s du serveur ne supporte pas cette fonction.</string>
<string name="background_task.no_network">Cette application requiert un accès au réseau. Veuillez activer le Wi-Fi ou le réseau mobile.</string>
<string name="background_task.not_found">Ressources introuvables. Veuillez vérifier l\'adresse du serveur.</string>
<string name="background_task.parse_error">Réponse incorrecte. Veuillez vérifier l\'adresse du serveur.</string>
@ -313,6 +314,8 @@
<string name="settings.use_folder_for_album_artist_summary">Dossier de niveau supérieur devient le nom de l\'artiste de l\'album</string>
<string name="settings.use_id3">Naviguer en utilisant ID3 Tags</string>
<string name="settings.use_id3_summary">Utiliser ID3 tag à la place du système de fichier basique</string>
<string name="settings.show_artist_picture">Afficher limage de lartiste dans la liste</string>
<string name="settings.show_artist_picture_summary">Affiche limage de lartiste dans la liste des artistes si celle-ci est disponible</string>
<string name="settings.video_title">Vidéo</string>
<string name="settings.video_player">Lecteur vidéo</string>
<string name="settings.view_refresh">Actualisation de la vue</string>
@ -382,6 +385,8 @@
<string name="settings.show_all_songs_by_artist_summary">Ajouter une nouvelle entrée de l\'affichage de l\'artiste pour accéder à toutes les titres pour un artiste</string>
<string name="download.menu_show_artist">Afficher l\'artiste</string>
<string name="settings.scan_media">Scan Media After Download</string>
<string name="settings.scan_media_summary">Balayer automatiquement les médias après téléchargement</string>
<string name="settings.image_loader_concurrency">Chargements dimages simultanés</string>
<string name="settings.image_loader_concurrency_1">1</string>
<string name="settings.image_loader_concurrency_2">2</string>
<string name="settings.image_loader_concurrency_3">3</string>
@ -394,7 +399,59 @@
<string name="settings.image_loader_concurrency_10">10</string>
<string name="settings.image_loader_concurrency_11">11</string>
<string name="settings.image_loader_concurrency_12">12</string>
<string name="albumArt">albumArt</string>
<string name="common_multiple_years">Années multiples</string>
<string name="settings.playback.resume_on_bluetooth_device">Reprendre lorsquun appareil Bluetooth se connecte</string>
<string name="settings.playback.pause_on_bluetooth_device">Mettre en pause lorsquun appareil Bluetooth se déconnecte</string>
<string name="settings.playback.bluetooth_all">Tous les appareils Bluetooth</string>
<string name="settings.playback.bluetooth_a2dp">Seulement les appareils audio (A2DP)</string>
<string name="settings.playback.bluetooth_disabled">Désactivé</string>
<string name="settings.playback.single_button_bluetooth_device">Bouton unique Lecture/Pause en Bluetooth</string>
<string name="settings.playback.single_button_bluetooth_device_summary">Activer cela peut aider sur les anciens appareils Bluetooth lorsque Lecture/Pause ne fonctionne pas correctement</string>
<string name="settings.debug.title">Paramètres de debug</string>
<string name="settings.debug.log_to_file">Enregistrer les logs de debug dans des fichiers</string>
<string name="settings.debug.log_path">Les fichiers de log sont disponibles dans %1$s/%2$s</string>
<string name="settings.debug.log_summary">Il y a %1$s fichiers de logs prenant %2$s MB despace dans le répertoire %3$s. Souhaitez-vous les conserver?</string>
<string name="settings.debug.log_keep">Conserver les fichiers</string>
<string name="settings.debug.log_delete">Supprimer les fichiers</string>
<string name="settings.debug.log_deleted">Fichiers de log supprimés</string>
<string name="permissions.access_error">Ultrasonic ne peut pas accéder au cache. Le répertoire de cache a été réinitialisé sur le chemin par défaut.</string>
<string name="permissions.message_box_title">Attention</string>
<string name="permissions.permission_missing">Ultrasonic requiert les droits de lecture/écriture sur le répertoire de cache. Le répertoire de cache a été réinitialisé sur le chemin par défaut.</string>
<string name="permissions.rationale_title">Demande de permission</string>
<string name="permissions.rationale_description_failed">Ultrasonic requiert les droits de lecture/écriture sur le répertoire de cache. Veuillez autoriser Ultrasonic à accéder au système de fichiers.</string>
<string name="permissions.permanent_denial_title">Permissions refusées de manière permanente</string>
<string name="permissions.permanent_denial_description">Ultrasonic requiert les droits de lecture/écriture sur le répertoire de cache. Vous pouvez les activer dans les paramètres Android de lapplication. Si vous rejetez cette permission, le répertoire par défaut sera utilisé pour le cache.</string>
<string name="permissions.open_settings">Ouvrir les paramètres</string>
<string name="permissions.rationale_description_initial">Afin de pouvoir modifier le répertoire de cache, Ultrasonic requiert les droits de lecture/écriture sur le système de fichiers.</string>
<string name="filepicker.select_folder">Sélectionner un dossier</string>
<string name="filepicker.create_folder">Créer un dossier</string>
<string name="filepicker.create_folder_failed">Impossible de créer un dossier</string>
<string name="filepicker.internal">%1$s (Interne)</string>
<string name="filepicker.default_app_folder">Répertoire par défaut de lapplication : %1$s (Mémoire externe)</string>
<string name="filepicker.enter_folder_name">Saisir le nom du dossier</string>
<string name="filepicker.create">Créer</string>
<string name="filepicker.name_invalid">Veuillez entrer un nom de dossier valide</string>
<string name="filepicker.already_exists">Ce dossier existe déjà.\nVeuillez donner un autre nom</string>
<string name="filepicker.select">Sélectionner</string>
<string name="filepicker.default">Utiliser la valeur par défaut</string>
<string name="filepicker.available_drives">Emplacements de stockage disponibles:</string>
<string name="server_selector.label">Serveurs configurés</string>
<string name="server_selector.delete_confirmation">Êtes-vous sûr de vouloir supprimer ce serveur?</string>
<string name="server_editor.label">Édition du serveur</string>
<string name="server_editor.new_label">Ajouter un serveur</string>
<string name="server_editor.leave_confirmation">Êtes-vous sûr de vouloir quitter et perdre vos modifications?</string>
<string name="server_editor.required">Ce champ est requis</string>
<string name="server_menu.edit">Éditer</string>
<string name="server_menu.delete">Supprimer</string>
<string name="server_menu.move_up">Déplacer vers le haut</string>
<string name="server_menu.move_down">Déplacer vers le bas</string>
<string name="server_editor.authentication">Authentification</string>
<string name="server_editor.advanced">Paramètres avancés</string>
<plurals name="select_album_n_songs">
<item quantity="one">%d titre</item>
<item quantity="other">%d titres</item>
@ -403,6 +460,10 @@
<item quantity="one">%d titre sélectionnée pour être épinglé.</item>
<item quantity="other">%d titres sélectionnée pour être épinglé.</item>
</plurals>
<plurals name="select_album_n_songs_downloaded">
<item quantity="one">1 titre sélectionné pour être téléchargé.</item>
<item quantity="other">%d titres sélectionnés pour être téléchargés.</item>
</plurals>
<plurals name="select_album_n_songs_unpinned">
<item quantity="one">%d titre sélectionné pour être dégoupillé.</item>
<item quantity="other">%d titres sélectionnés pour être dégoupillé.</item>