project upload

This commit is contained in:
Antonio Cappiello 2020-11-20 15:38:08 +01:00
parent e1749a3123
commit 6eff64e7e1
105 changed files with 5907 additions and 0 deletions

View file

@ -0,0 +1,117 @@
package com.cappielloantonio.play.ui.activities;
import android.os.Bundle;
import android.view.View;
import androidx.fragment.app.FragmentManager;
import androidx.navigation.NavController;
import androidx.navigation.fragment.NavHostFragment;
import androidx.navigation.ui.NavigationUI;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.databinding.ActivityMainBinding;
import com.cappielloantonio.play.ui.activities.base.BaseActivity;
import com.cappielloantonio.play.util.PreferenceUtil;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import org.jellyfin.apiclient.interaction.EmptyResponse;
import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.session.ClientCapabilities;
import org.jellyfin.apiclient.model.system.SystemInfo;
import java.util.Objects;
public class MainActivity extends BaseActivity {
private static final String TAG = "MainActivity";
private ActivityMainBinding activityMainBinding;
private FragmentManager fragmentManager;
private NavHostFragment navHostFragment;
private BottomNavigationView bottomNavigationView;
public NavController navController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activityMainBinding = ActivityMainBinding.inflate(getLayoutInflater());
View view = activityMainBinding.getRoot();
setContentView(view);
init();
}
public void init() {
fragmentManager = getSupportFragmentManager();
bottomNavigationView = findViewById(R.id.bottom_navigation);
navHostFragment = (NavHostFragment) fragmentManager.findFragmentById(R.id.nav_host_fragment);
navController = navHostFragment.getNavController();
NavigationUI.setupWithNavController(bottomNavigationView, navController);
if (PreferenceUtil.getInstance(this).getToken() != null) {
checkPreviousSession();
} else {
goToLogin();
}
}
private void checkPreviousSession() {
App.getApiClientInstance(getApplicationContext()).ChangeServerLocation(PreferenceUtil.getInstance(this).getServer());
App.getApiClientInstance(getApplicationContext()).SetAuthenticationInfo(PreferenceUtil.getInstance(this).getToken(), PreferenceUtil.getInstance(this).getUser());
App.getApiClientInstance(getApplicationContext()).GetSystemInfoAsync(new Response<SystemInfo>() {
@Override
public void onResponse(SystemInfo result) {
ClientCapabilities clientCapabilities = new ClientCapabilities();
clientCapabilities.setSupportsMediaControl(true);
clientCapabilities.setSupportsPersistentIdentifier(true);
App.getApiClientInstance(getApplicationContext()).ensureWebSocket();
App.getApiClientInstance(getApplicationContext()).ReportCapabilities(clientCapabilities, new EmptyResponse());
goFromLogin();
}
@Override
public void onError(Exception exception) {
goToLogin();
}
});
}
public void goToLogin() {
if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.landingFragment)
navController.navigate(R.id.action_landingFragment_to_loginFragment);
}
public void goToSync() {
if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.landingFragment) {
navController.navigate(R.id.action_landingFragment_to_syncFragment);
} else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.loginFragment) {
navController.navigate(R.id.action_loginFragment_to_syncFragment);
} else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.homeFragment) {
navController.navigate(R.id.action_homeFragment_to_syncFragment);
}
}
public void goToHome() {
bottomNavigationView.setVisibility(View.VISIBLE);
if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.landingFragment) {
navController.navigate(R.id.action_landingFragment_to_homeFragment);
} else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.syncFragment) {
navController.navigate(R.id.action_syncFragment_to_homeFragment);
} else if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.loginFragment) {
navController.navigate(R.id.action_loginFragment_to_homeFragment);
}
}
public void goFromLogin() {
if (PreferenceUtil.getInstance(getApplicationContext()).getSync()) {
goToHome();
} else {
goToSync();
}
}
}

View file

@ -0,0 +1,83 @@
package com.cappielloantonio.play.ui.activities.base;
import android.Manifest;
import android.content.Intent;
import android.os.PowerManager;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import com.cappielloantonio.play.R;
import java.util.List;
import pub.devrel.easypermissions.AppSettingsDialog;
import pub.devrel.easypermissions.EasyPermissions;
public class BaseActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks {
public static final int REQUEST_PERM_ACCESS = 1;
@Override
protected void onResume() {
super.onResume();
checkPermissions();
// checkBatteryOptimization();
}
private void checkBatteryOptimization() {
if (detectBatteryOptimization()) {
showBatteryOptimizationDialog();
}
}
private boolean detectBatteryOptimization() {
String packageName = getPackageName();
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
return !powerManager.isIgnoringBatteryOptimizations(packageName);
}
private void showBatteryOptimizationDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.battery_optimizations_message)
.setTitle(R.string.battery_optimizations_title)
.setNegativeButton(R.string.ignore, null)
.setPositiveButton(R.string.disable, (dialog, id) -> openPowerSettings())
.show();
}
private void openPowerSettings() {
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
startActivity(intent);
}
private void checkPermissions() {
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (!EasyPermissions.hasPermissions(this, permissions)) {
EasyPermissions.requestPermissions(this, getString(R.string.storage_permission_rationale), REQUEST_PERM_ACCESS, permissions);
}
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
new AppSettingsDialog.Builder(this).build().show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
}

View file

@ -0,0 +1,91 @@
package com.cappielloantonio.play.ui.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.cappielloantonio.play.adapter.DiscoverSongAdapter;
import com.cappielloantonio.play.adapter.RecentMusicAdapter;
import com.cappielloantonio.play.databinding.FragmentHomeBinding;
import com.cappielloantonio.play.ui.activities.MainActivity;
import com.cappielloantonio.play.util.PreferenceUtil;
import com.cappielloantonio.play.viewmodel.HomeViewModel;
public class HomeFragment extends Fragment implements RecentMusicAdapter.ItemClickListener {
private static final String TAG = "CategoriesFragment";
private FragmentHomeBinding bind;
private MainActivity activity;
private HomeViewModel homeViewModel;
private DiscoverSongAdapter discoverSongAdapter;
private RecentMusicAdapter recentMusicAdapter;
private RecentMusicAdapter mostPlayedMusicAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
activity = (MainActivity) getActivity();
bind = FragmentHomeBinding.inflate(inflater, container, false);
View view = bind.getRoot();
homeViewModel = new ViewModelProvider(requireActivity()).get(HomeViewModel.class);
init();
initDiscoverSongSlideView();
initRecentPlayedSongView();
initMostPlayedSongView();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void init() {
bind.resyncButton.setOnClickListener(v -> {
PreferenceUtil.getInstance(requireContext()).setSync(false);
activity.goToSync();
});
}
private void initDiscoverSongSlideView() {
discoverSongAdapter = new DiscoverSongAdapter(requireContext(), homeViewModel.getDiscoverSongList());
bind.discoverSongViewPager.setAdapter(discoverSongAdapter);
bind.discoverSongViewPager.setPageMargin(20);
}
private void initRecentPlayedSongView() {
bind.recentlyPlayedTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
bind.recentlyPlayedTracksRecyclerView.setHasFixedSize(true);
recentMusicAdapter = new RecentMusicAdapter(requireContext(), homeViewModel.getRecentSongList());
recentMusicAdapter.setClickListener(this);
bind.recentlyPlayedTracksRecyclerView.setAdapter(recentMusicAdapter);
}
private void initMostPlayedSongView() {
bind.mostPlayedTracksRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
bind.mostPlayedTracksRecyclerView.setHasFixedSize(true);
mostPlayedMusicAdapter = new RecentMusicAdapter(requireContext(), homeViewModel.getMostPlayedSongList());
mostPlayedMusicAdapter.setClickListener(this);
bind.mostPlayedTracksRecyclerView.setAdapter(mostPlayedMusicAdapter);
}
@Override
public void onItemClick(View view, int position) {
Toast.makeText(requireContext(), "Click: " + position, Toast.LENGTH_SHORT).show();
}
}

View file

@ -0,0 +1,17 @@
package com.cappielloantonio.play.ui.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.fragment.app.Fragment;
import com.cappielloantonio.play.R;
public class LandingFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_landing, container, false);
}
}

View file

@ -0,0 +1,101 @@
package com.cappielloantonio.play.ui.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.cappielloantonio.play.adapter.AlbumAdapter;
import com.cappielloantonio.play.adapter.ArtistAdapter;
import com.cappielloantonio.play.adapter.GenreAdapter;
import com.cappielloantonio.play.adapter.PlaylistAdapter;
import com.cappielloantonio.play.databinding.FragmentLibraryBinding;
import com.cappielloantonio.play.model.Genre;
import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.ui.activities.MainActivity;
import com.cappielloantonio.play.viewmodel.LibraryViewModel;
import java.util.ArrayList;
import java.util.List;
public class LibraryFragment extends Fragment {
private static final String TAG = "LibraryFragment";
private FragmentLibraryBinding bind;
private MainActivity activity;
private LibraryViewModel libraryViewModel;
private AlbumAdapter albumAdapter;
private ArtistAdapter artistAdapter;
private GenreAdapter genreAdapter;
private PlaylistAdapter playlistAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
activity = (MainActivity) getActivity();
bind = FragmentLibraryBinding.inflate(inflater, container, false);
View view = bind.getRoot();
libraryViewModel = new ViewModelProvider(requireActivity()).get(LibraryViewModel.class);
initAlbumView();
initArtistView();
initGenreView();
initPlaylistView();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void initAlbumView() {
bind.albumRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
bind.albumRecyclerView.setHasFixedSize(true);
albumAdapter = new AlbumAdapter(requireContext(), libraryViewModel.getAlbumSample());
albumAdapter.setClickListener((view, position) -> Toast.makeText(requireContext(), "Album: " + position, Toast.LENGTH_SHORT).show());
bind.albumRecyclerView.setAdapter(albumAdapter);
}
private void initArtistView() {
bind.artistRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false));
bind.artistRecyclerView.setHasFixedSize(true);
artistAdapter = new ArtistAdapter(requireContext(), libraryViewModel.getArtistSample());
artistAdapter.setClickListener((view, position) -> Toast.makeText(requireContext(), "Artist: " + position, Toast.LENGTH_SHORT).show());
bind.artistRecyclerView.setAdapter(artistAdapter);
}
private void initGenreView() {
bind.genreRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 3, GridLayoutManager.HORIZONTAL, false));
bind.genreRecyclerView.setHasFixedSize(true);
genreAdapter = new GenreAdapter(requireContext(), new ArrayList<>());
genreAdapter.setClickListener((view, position) -> Toast.makeText(requireContext(), "Genre: " + position, Toast.LENGTH_SHORT).show());
bind.genreRecyclerView.setAdapter(genreAdapter);
libraryViewModel.getGenreList().observe(requireActivity(), genres -> genreAdapter.setItems(genres));
}
private void initPlaylistView() {
bind.playlistRecyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2));
bind.playlistRecyclerView.setHasFixedSize(true);
playlistAdapter = new PlaylistAdapter(requireContext(), libraryViewModel.getPlaylist());
playlistAdapter.setClickListener((view, position) -> Toast.makeText(requireContext(), "Playlist: " + position, Toast.LENGTH_SHORT).show());
bind.playlistRecyclerView.setAdapter(playlistAdapter);
}
}

View file

@ -0,0 +1,123 @@
package com.cappielloantonio.play.ui.fragment;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.databinding.FragmentLoginBinding;
import com.cappielloantonio.play.ui.activities.MainActivity;
import com.cappielloantonio.play.util.PreferenceUtil;
import org.jellyfin.apiclient.interaction.Response;
import org.jellyfin.apiclient.model.system.SystemInfo;
import org.jellyfin.apiclient.model.users.AuthenticationResult;
public class LoginFragment extends Fragment {
private static final String TAG = "LoginFragment";
private FragmentLoginBinding bind;
private MainActivity activity;
// private TextView usernameTextView;
// private TextView passwordTextView;
// private TextView serverTextView;
private String username;
private String password;
private String server;
// private Button loginButton;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
activity = (MainActivity) getActivity();
bind = FragmentLoginBinding.inflate(inflater, container, false);
View view = bind.getRoot();
init();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void init() {
bind.loginButton.setOnClickListener(v -> {
if (validateInput()) {
saveServerPreference(username, server);
authenticate();
}
});
}
private boolean validateInput() {
username = bind.usernameTextView.getText().toString().trim();
password = bind.passwordTextView.getText().toString().trim();
server = bind.serverTextView.getText().toString().trim();
if (TextUtils.isEmpty(username)) {
Toast.makeText(requireContext(), "Empty username", Toast.LENGTH_SHORT).show();
return false;
}
if (TextUtils.isEmpty(server)) {
Toast.makeText(requireContext(), "Empty server", Toast.LENGTH_SHORT).show();
return false;
}
return true;
}
private void saveServerPreference(String user, String server) {
PreferenceUtil.getInstance(requireContext()).setUser(user);
PreferenceUtil.getInstance(requireContext()).setServer(server);
}
private void authenticate() {
App.getApiClientInstance(requireContext()).ChangeServerLocation(server);
App.getApiClientInstance(requireContext()).AuthenticateUserAsync(username, password, new Response<AuthenticationResult>() {
@Override
public void onResponse(AuthenticationResult result) {
if (result.getAccessToken() == null) return;
enter(result.getUser().getId(), result.getAccessToken());
}
@Override
public void onError(Exception exception) {
if (exception.getMessage().contains("AuthFailureError")) {
Toast.makeText(requireContext(), "Fail to authenticate", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(requireContext(), "Server unreachable", Toast.LENGTH_SHORT).show();
}
}
});
}
private void enter(String user, String token) {
App.getApiClientInstance(requireContext()).GetSystemInfoAsync(new Response<SystemInfo>() {
@Override
public void onResponse(SystemInfo result) {
if (result.getVersion().charAt(0) == '1') {
PreferenceUtil.getInstance(requireContext()).setUser(user);
PreferenceUtil.getInstance(requireContext()).setToken(token);
activity.goFromLogin();
} else {
Toast.makeText(requireContext(), "Error version", Toast.LENGTH_SHORT).show();
}
}
});
}
}

View file

@ -0,0 +1,118 @@
package com.cappielloantonio.play.ui.fragment;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.cappielloantonio.play.databinding.FragmentSearchBinding;
import com.cappielloantonio.play.ui.activities.MainActivity;
import com.paulrybitskyi.persistentsearchview.utils.VoiceRecognitionDelegate;
public class SearchFragment extends Fragment {
private static final String TAG = "SearchFragment";
public static final int REQUEST_CODE = 64545;
private FragmentSearchBinding bind;
private MainActivity activity;
protected LinearLayout emptyLinearLayout;
protected String query = "";
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
activity = (MainActivity) getActivity();
bind = FragmentSearchBinding.inflate(inflater, container, false);
View view = bind.getRoot();
searchInit();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
String code = data.getStringExtra("result");
search(code);
}
}
VoiceRecognitionDelegate.handleResult(bind.persistentSearchView, requestCode, resultCode, data);
}
private void searchInit() {
bind.persistentSearchView.showRightButton();
bind.persistentSearchView.setOnSearchQueryChangeListener((searchView, oldQuery, newQuery) -> {
});
bind.persistentSearchView.setOnLeftBtnClickListener(view -> {
});
bind.persistentSearchView.setOnRightBtnClickListener(view -> {
});
bind.persistentSearchView.setVoiceRecognitionDelegate(new VoiceRecognitionDelegate(this));
bind.persistentSearchView.setOnSearchConfirmedListener((searchView, query) -> {
if (!query.equals("")) {
searchView.collapse();
search(query);
}
});
bind.persistentSearchView.setSuggestionsDisabled(true);
}
public void search(String query) {
emptyScreen();
this.query = query;
bind.persistentSearchView.setInputQuery(query);
performSearch(query);
}
private void performSearch(String query) {
}
private void loadMoreItemSearch(String query, int page) {
manageProgressBar(true);
}
private void emptyScreen() {
emptyLinearLayout.setVisibility(View.GONE);
}
private void manageProgressBar(boolean show) {
if (show) {
bind.persistentSearchView.hideLeftButton();
bind.persistentSearchView.showProgressBar(true);
} else {
bind.persistentSearchView.showLeftButton();
bind.persistentSearchView.hideProgressBar(true);
}
}
}

View file

@ -0,0 +1,28 @@
package com.cappielloantonio.play.ui.fragment;
import android.os.Bundle;
import androidx.preference.ListPreference;
import androidx.preference.PreferenceFragmentCompat;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.helper.ThemeHelper;
public class SettingsFragment extends PreferenceFragmentCompat {
private static final String TAG = "SettingsFragment";
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.global_preferences, rootKey);
ListPreference themePreference = findPreference("themePref");
if (themePreference != null) {
themePreference.setOnPreferenceChangeListener(
(preference, newValue) -> {
String themeOption = (String) newValue;
ThemeHelper.applyTheme(themeOption);
return true;
});
}
}
}

View file

@ -0,0 +1,206 @@
package com.cappielloantonio.play.ui.fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.cappielloantonio.play.databinding.FragmentSyncBinding;
import com.cappielloantonio.play.interfaces.MediaCallback;
import com.cappielloantonio.play.model.Album;
import com.cappielloantonio.play.model.Artist;
import com.cappielloantonio.play.model.Genre;
import com.cappielloantonio.play.model.Playlist;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.repository.AlbumRepository;
import com.cappielloantonio.play.repository.ArtistRepository;
import com.cappielloantonio.play.repository.GenreRepository;
import com.cappielloantonio.play.repository.PlaylistRepository;
import com.cappielloantonio.play.repository.SongRepository;
import com.cappielloantonio.play.ui.activities.MainActivity;
import com.cappielloantonio.play.util.PreferenceUtil;
import com.cappielloantonio.play.util.SyncUtil;
import org.jellyfin.apiclient.model.dto.BaseItemDto;
import java.util.ArrayList;
import java.util.List;
public class SyncFragment extends Fragment {
private static final String TAG = "SyncFragment";
private MainActivity activity;
private FragmentSyncBinding bind;
private ArrayList<Integer> progressing;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
activity = (MainActivity) getActivity();
bind = FragmentSyncBinding.inflate(inflater, container, false);
View view = bind.getRoot();
syncLibraries();
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
bind = null;
}
private void showProgressBar() {
bind.loadingProgressBar.setVisibility(View.VISIBLE);
}
private void syncLibraries() {
progressing = new ArrayList<>();
SyncUtil.getLibraries(requireContext(), new MediaCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
}
@Override
public void onLoadMedia(List<?> media) {
List<BaseItemDto> libraries = (List<BaseItemDto>) media;
for (BaseItemDto itemDto : libraries) {
if (itemDto.getCollectionType().equals("music"))
SyncUtil.musicLibrary = itemDto;
}
startSyncing();
}
});
}
private void startSyncing() {
showProgressBar();
syncAlbums();
syncArtists();
syncGenres();
syncPlaylist();
syncSongs();
}
private void syncAlbums() {
SyncUtil.getAlbums(requireContext(), new MediaCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
setProgress(false);
}
@Override
public void onLoadMedia(List<?> media) {
AlbumRepository repository = new AlbumRepository(activity.getApplication());
repository.insertAll((ArrayList<Album>) media);
setProgress(true);
}
});
}
private void syncArtists() {
SyncUtil.getArtists(requireContext(), new MediaCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
setProgress(false);
}
@Override
public void onLoadMedia(List<?> media) {
ArtistRepository repository = new ArtistRepository(activity.getApplication());
repository.insertAll((ArrayList<Artist>) media);
setProgress(true);
}
});
}
private void syncGenres() {
SyncUtil.getGenres(requireContext(), new MediaCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
setProgress(false);
}
@Override
public void onLoadMedia(List<?> media) {
GenreRepository repository = new GenreRepository(activity.getApplication());
repository.insertAll((ArrayList<Genre>) media);
setProgress(true);
}
});
}
private void syncPlaylist() {
SyncUtil.getPlaylists(requireContext(), new MediaCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
setProgress(false);
}
@Override
public void onLoadMedia(List<?> media) {
PlaylistRepository repository = new PlaylistRepository(activity.getApplication());
repository.insertAll((ArrayList<Playlist>) media);
setProgress(true);
}
});
}
private void syncSongs() {
SyncUtil.getSongs(requireContext(), new MediaCallback() {
@Override
public void onError(Exception exception) {
Log.e(TAG, "onError: " + exception.getMessage());
setProgress(false);
}
@Override
public void onLoadMedia(List<?> media) {
SongRepository repository = new SongRepository(activity.getApplication());
repository.insertAll((ArrayList<Song>) media);
setProgress(true);
}
});
}
private void setProgress(boolean step) {
if (step) {
progressing.add(25);
bind.loadingProgressBar.setProgress(bind.loadingProgressBar.getProgress() + 25, true);
} else {
progressing.add(0);
}
countProgress();
}
private void countProgress() {
if (progressing.size() == 5) {
if (bind.loadingProgressBar.getProgress() == 100)
terminate();
else
Toast.makeText(requireContext(), "Sync error", Toast.LENGTH_SHORT).show();
}
}
private void terminate() {
PreferenceUtil.getInstance(requireContext()).setSync(true);
activity.goToHome();
}
}