273 lines
10 KiB
Kotlin
273 lines
10 KiB
Kotlin
package org.moire.ultrasonic.fragment;
|
|
|
|
import android.os.Bundle;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ListView;
|
|
import android.widget.TextView;
|
|
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.fragment.app.Fragment;
|
|
import androidx.navigation.Navigation;
|
|
|
|
import org.moire.ultrasonic.R;
|
|
import org.moire.ultrasonic.data.ActiveServerProvider;
|
|
import org.moire.ultrasonic.data.ServerSetting;
|
|
import org.moire.ultrasonic.util.Constants;
|
|
import org.moire.ultrasonic.util.MergeAdapter;
|
|
import org.moire.ultrasonic.util.Util;
|
|
|
|
import java.util.Collections;
|
|
|
|
import kotlin.Lazy;
|
|
|
|
import static java.util.Arrays.asList;
|
|
import static org.koin.java.KoinJavaComponent.inject;
|
|
|
|
/**
|
|
* Displays the Main screen of Ultrasonic, where the music library can be browsed
|
|
*/
|
|
public class MainFragment extends Fragment {
|
|
|
|
private static boolean shouldUseId3;
|
|
private static String lastActiveServerProperties;
|
|
|
|
private ListView list;
|
|
|
|
private final Lazy<ActiveServerProvider> activeServerProvider = inject(ActiveServerProvider.class);
|
|
|
|
@Override
|
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
|
Util.applyTheme(this.getContext());
|
|
super.onCreate(savedInstanceState);
|
|
}
|
|
|
|
@Override
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
Bundle savedInstanceState) {
|
|
return inflater.inflate(R.layout.main, container, false);
|
|
}
|
|
|
|
@Override
|
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
|
|
|
list = view.findViewById(R.id.main_list);
|
|
setupMenuList(list);
|
|
|
|
super.onViewCreated(view, savedInstanceState);
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
boolean shouldRestart = false;
|
|
|
|
boolean id3 = Util.getShouldUseId3Tags();
|
|
String currentActiveServerProperties = getActiveServerProperties();
|
|
|
|
if (id3 != shouldUseId3)
|
|
{
|
|
shouldUseId3 = id3;
|
|
shouldRestart = true;
|
|
}
|
|
|
|
if (!currentActiveServerProperties.equals(lastActiveServerProperties))
|
|
{
|
|
lastActiveServerProperties = currentActiveServerProperties;
|
|
shouldRestart = true;
|
|
}
|
|
|
|
if (shouldRestart) {
|
|
setupMenuList(list);
|
|
}
|
|
}
|
|
|
|
private void setupMenuList(ListView list)
|
|
{
|
|
final View buttons = getLayoutInflater().inflate(R.layout.main_buttons, list, false);
|
|
final View serverButton = buttons.findViewById(R.id.main_select_server);
|
|
final TextView serverTextView = serverButton.findViewById(R.id.main_select_server_2);
|
|
|
|
lastActiveServerProperties = getActiveServerProperties();
|
|
String name = activeServerProvider.getValue().getActiveServer().getName();
|
|
|
|
serverTextView.setText(name);
|
|
|
|
final View musicTitle = buttons.findViewById(R.id.main_music);
|
|
final View artistsButton = buttons.findViewById(R.id.main_artists_button);
|
|
final View albumsButton = buttons.findViewById(R.id.main_albums_button);
|
|
final View genresButton = buttons.findViewById(R.id.main_genres_button);
|
|
final View videosTitle = buttons.findViewById(R.id.main_videos_title);
|
|
final View songsTitle = buttons.findViewById(R.id.main_songs);
|
|
final View randomSongsButton = buttons.findViewById(R.id.main_songs_button);
|
|
final View songsStarredButton = buttons.findViewById(R.id.main_songs_starred);
|
|
final View albumsTitle = buttons.findViewById(R.id.main_albums);
|
|
final View albumsNewestButton = buttons.findViewById(R.id.main_albums_newest);
|
|
final View albumsRandomButton = buttons.findViewById(R.id.main_albums_random);
|
|
final View albumsHighestButton = buttons.findViewById(R.id.main_albums_highest);
|
|
final View albumsStarredButton = buttons.findViewById(R.id.main_albums_starred);
|
|
final View albumsRecentButton = buttons.findViewById(R.id.main_albums_recent);
|
|
final View albumsFrequentButton = buttons.findViewById(R.id.main_albums_frequent);
|
|
final View albumsAlphaByNameButton = buttons.findViewById(R.id.main_albums_alphaByName);
|
|
final View albumsAlphaByArtistButton = buttons.findViewById(R.id.main_albums_alphaByArtist);
|
|
final View videosButton = buttons.findViewById(R.id.main_videos);
|
|
|
|
final MergeAdapter adapter = new MergeAdapter();
|
|
adapter.addViews(Collections.singletonList(serverButton), true);
|
|
|
|
shouldUseId3 = Util.getShouldUseId3Tags();
|
|
|
|
if (!ActiveServerProvider.Companion.isOffline())
|
|
{
|
|
adapter.addView(musicTitle, false);
|
|
adapter.addViews(asList(artistsButton, albumsButton, genresButton), true);
|
|
|
|
adapter.addView(songsTitle, false);
|
|
adapter.addViews(asList(randomSongsButton, songsStarredButton), true);
|
|
|
|
adapter.addView(albumsTitle, false);
|
|
adapter.addViews(asList(albumsNewestButton, albumsRecentButton, albumsFrequentButton), true);
|
|
if (!shouldUseId3)
|
|
adapter.addView(albumsHighestButton, true);
|
|
adapter.addViews(asList(albumsRandomButton, albumsStarredButton, albumsAlphaByNameButton, albumsAlphaByArtistButton), true);
|
|
|
|
adapter.addView(videosTitle, false);
|
|
adapter.addViews(Collections.singletonList(videosButton), true);
|
|
}
|
|
else // Offline supported calls
|
|
{
|
|
adapter.addView(musicTitle, false);
|
|
adapter.addViews(asList(artistsButton, genresButton), true);
|
|
|
|
adapter.addView(songsTitle, false);
|
|
adapter.addView(randomSongsButton, true);
|
|
|
|
adapter.addView(videosTitle, false);
|
|
adapter.addViews(Collections.singletonList(videosButton), true);
|
|
}
|
|
|
|
list.setAdapter(adapter);
|
|
list.setOnItemClickListener((parent, view, position, id) -> {
|
|
if (view == serverButton)
|
|
{
|
|
showServers();
|
|
}
|
|
else if (view == albumsNewestButton)
|
|
{
|
|
showAlbumList("newest", R.string.main_albums_newest);
|
|
}
|
|
else if (view == albumsRandomButton)
|
|
{
|
|
showAlbumList("random", R.string.main_albums_random);
|
|
}
|
|
else if (view == albumsHighestButton)
|
|
{
|
|
showAlbumList("highest", R.string.main_albums_highest);
|
|
}
|
|
else if (view == albumsRecentButton)
|
|
{
|
|
showAlbumList("recent", R.string.main_albums_recent);
|
|
}
|
|
else if (view == albumsFrequentButton)
|
|
{
|
|
showAlbumList("frequent", R.string.main_albums_frequent);
|
|
}
|
|
else if (view == albumsStarredButton)
|
|
{
|
|
showAlbumList(Constants.STARRED, R.string.main_albums_starred);
|
|
}
|
|
else if (view == albumsAlphaByNameButton)
|
|
{
|
|
showAlbumList(Constants.ALPHABETICAL_BY_NAME, R.string.main_albums_alphaByName);
|
|
}
|
|
else if (view == albumsAlphaByArtistButton)
|
|
{
|
|
showAlbumList("alphabeticalByArtist", R.string.main_albums_alphaByArtist);
|
|
}
|
|
else if (view == songsStarredButton)
|
|
{
|
|
showStarredSongs();
|
|
}
|
|
else if (view == artistsButton)
|
|
{
|
|
showArtists();
|
|
}
|
|
else if (view == albumsButton)
|
|
{
|
|
showAlbumList(Constants.ALPHABETICAL_BY_NAME, R.string.main_albums_title);
|
|
}
|
|
else if (view == randomSongsButton)
|
|
{
|
|
showRandomSongs();
|
|
}
|
|
else if (view == genresButton)
|
|
{
|
|
showGenres();
|
|
}
|
|
else if (view == videosButton)
|
|
{
|
|
showVideos();
|
|
}
|
|
});
|
|
}
|
|
|
|
private String getActiveServerProperties()
|
|
{
|
|
ServerSetting currentSetting = activeServerProvider.getValue().getActiveServer();
|
|
return String.format("%s;%s;%s;%s;%s;%s", currentSetting.getUrl(), currentSetting.getUserName(),
|
|
currentSetting.getPassword(), currentSetting.getAllowSelfSignedCertificate(),
|
|
currentSetting.getLdapSupport(), currentSetting.getMinimumApiVersion());
|
|
}
|
|
|
|
private void showStarredSongs()
|
|
{
|
|
Bundle bundle = new Bundle();
|
|
bundle.putInt(Constants.INTENT_EXTRA_NAME_STARRED, 1);
|
|
Navigation.findNavController(getView()).navigate(R.id.mainToTrackCollection, bundle);
|
|
}
|
|
|
|
private void showRandomSongs()
|
|
{
|
|
Bundle bundle = new Bundle();
|
|
bundle.putInt(Constants.INTENT_EXTRA_NAME_RANDOM, 1);
|
|
bundle.putInt(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_SIZE, Util.getMaxSongs());
|
|
Navigation.findNavController(getView()).navigate(R.id.mainToTrackCollection, bundle);
|
|
}
|
|
|
|
private void showArtists()
|
|
{
|
|
Bundle bundle = new Bundle();
|
|
bundle.putString(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TITLE, getContext().getResources().getString(R.string.main_artists_title));
|
|
Navigation.findNavController(getView()).navigate(R.id.mainToArtistList, bundle);
|
|
}
|
|
|
|
private void showAlbumList(final String type, final int titleIndex) {
|
|
Bundle bundle = new Bundle();
|
|
String title = getContext().getResources().getString(titleIndex, "");
|
|
bundle.putString(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TYPE, type);
|
|
bundle.putString(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_TITLE, title);
|
|
bundle.putInt(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_SIZE, Util.getMaxAlbums());
|
|
bundle.putInt(Constants.INTENT_EXTRA_NAME_ALBUM_LIST_OFFSET, 0);
|
|
Navigation.findNavController(getView()).navigate(R.id.mainToAlbumList, bundle);
|
|
}
|
|
|
|
private void showGenres()
|
|
{
|
|
Navigation.findNavController(getView()).navigate(R.id.mainToSelectGenre);
|
|
}
|
|
|
|
private void showVideos()
|
|
{
|
|
Bundle bundle = new Bundle();
|
|
bundle.putInt(Constants.INTENT_EXTRA_NAME_VIDEOS, 1);
|
|
Navigation.findNavController(getView()).navigate(R.id.mainToTrackCollection, bundle);
|
|
}
|
|
|
|
private void showServers()
|
|
{
|
|
Navigation.findNavController(getView()).navigate(R.id.mainToServerSelector);
|
|
}
|
|
}
|