Delete queue on logout

This commit is contained in:
CappielloAntonio 2021-08-09 00:23:09 +02:00
parent 78a4006ed6
commit af60a4a3eb
12 changed files with 60 additions and 43 deletions

1
.idea/misc.xml generated
View file

@ -19,6 +19,7 @@
<entry key="app/src/main/res/layout/fragment_album_catalogue.xml" value="0.3229166666666667" />
<entry key="app/src/main/res/layout/fragment_album_page.xml" value="0.1" />
<entry key="app/src/main/res/layout/fragment_artist_page.xml" value="0.1" />
<entry key="app/src/main/res/layout/fragment_home.xml" value="0.2212962962962963" />
<entry key="app/src/main/res/layout/fragment_login.xml" value="0.3166496424923391" />
<entry key="app/src/main/res/layout/item_horizontal_album.xml" value="0.3166496424923391" />
<entry key="app/src/main/res/layout/item_horizontal_track.xml" value="0.1" />

View file

@ -89,6 +89,7 @@ public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ViewHolder
public void onClick(View view) {
Server server = servers.get(getBindingAdapterPosition());
saveServerPreference(server.getAddress(), server.getUsername(), server.getToken(), server.getSalt());
refreshSubsonicClientInstance();
SystemRepository systemRepository = new SystemRepository(App.getInstance());
systemRepository.checkUserCredential(new SystemCallback() {
@ -116,11 +117,11 @@ public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ViewHolder
if (token != null && salt != null) {
PreferenceUtil.getInstance(context).setToken(token);
PreferenceUtil.getInstance(context).setSalt(salt);
PreferenceUtil.getInstance(context).setServerId(servers.get(getBindingAdapterPosition()).getServerId());
return;
}
}
private void refreshSubsonicClientInstance() {
PreferenceUtil.getInstance(context).setServerId(servers.get(getBindingAdapterPosition()).getServerId());
App.getSubsonicClientInstance(context, true);
}
}

View file

@ -15,7 +15,7 @@ import com.cappielloantonio.play.model.Queue;
import com.cappielloantonio.play.model.RecentSearch;
import com.cappielloantonio.play.model.Server;
@Database(entities = {Queue.class, Server.class, RecentSearch.class, Download.class}, version = 9, exportSchema = false)
@Database(entities = {Queue.class, Server.class, RecentSearch.class, Download.class}, version = 12, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
private static final String TAG = "AppDatabase";

View file

@ -12,21 +12,21 @@ import java.util.List;
@Dao
public interface QueueDao {
@Query("SELECT * FROM queue WHERE server = :server")
LiveData<List<Queue>> getAll(String server);
@Query("SELECT * FROM queue")
LiveData<List<Queue>> getAll();
@Query("SELECT * FROM queue WHERE server = :server")
List<Queue> getAllSimple(String server);
@Query("SELECT * FROM queue")
List<Queue> getAllSimple();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(List<Queue> songQueueObject);
@Query("DELETE FROM queue WHERE queue.track_order = :position AND server = :server")
void deleteByPosition(int position, String server);
@Query("DELETE FROM queue WHERE queue.track_order = :position")
void deleteByPosition(int position);
@Query("DELETE FROM queue WHERE server = :server")
void deleteAll(String server);
@Query("DELETE FROM queue")
void deleteAll();
@Query("SELECT COUNT(*) FROM queue;")
@Query("SELECT COUNT(*) FROM queue")
int count();
}

View file

@ -36,10 +36,7 @@ public class Queue {
@ColumnInfo(name = "duration")
private long duration;
@ColumnInfo(name = "server")
private String server;
public Queue(int trackOrder, String songID, String title, String albumId, String albumName, String artistId, String artistName, String primary, long duration, String server) {
public Queue(int trackOrder, String songID, String title, String albumId, String albumName, String artistId, String artistName, String primary, long duration) {
this.trackOrder = trackOrder;
this.songID = songID;
this.title = title;
@ -49,7 +46,6 @@ public class Queue {
this.artistName = artistName;
this.primary = primary;
this.duration = duration;
this.server = server;
}
public int getTrackOrder() {
@ -123,12 +119,4 @@ public class Queue {
public void setDuration(long duration) {
this.duration = duration;
}
public String getServer() {
return server;
}
public void setServer(String server) {
this.server = server;
}
}

View file

@ -293,7 +293,9 @@ public class ArtistRepository {
.enqueue(new Callback<SubsonicResponse>() {
@Override
public void onResponse(Call<SubsonicResponse> call, Response<SubsonicResponse> response) {
topSongs.setValue(MappingUtil.mapSong(response.body().getTopSongs().getSongs()));
if (response.body().getTopSongs() != null) {
topSongs.setValue(MappingUtil.mapSong(response.body().getTopSongs().getSongs()));
}
}
@Override

View file

@ -1,6 +1,7 @@
package com.cappielloantonio.play.repository;
import android.app.Application;
import android.util.Log;
import androidx.lifecycle.LiveData;
@ -28,7 +29,7 @@ public class QueueRepository {
}
public LiveData<List<Queue>> getLiveQueue() {
listLiveQueue = queueDao.getAll(PreferenceUtil.getInstance(App.getInstance()).getServerId());
listLiveQueue = queueDao.getAll();
return listLiveQueue;
}
@ -69,6 +70,12 @@ public class QueueRepository {
thread.start();
}
public void deleteAll() {
DeleteAllThreadSafe deleteAll = new DeleteAllThreadSafe(queueDao);
Thread thread = new Thread(deleteAll);
thread.start();
}
public int count() {
int count = 0;
@ -96,7 +103,7 @@ public class QueueRepository {
@Override
public void run() {
songs = MappingUtil.mapQueue(queueDao.getAllSimple(PreferenceUtil.getInstance(App.getInstance()).getServerId()));
songs = MappingUtil.mapQueue(queueDao.getAllSimple());
}
public List<Song> getSongs() {
@ -115,7 +122,7 @@ public class QueueRepository {
@Override
public void run() {
queueDao.insertAll(QueueUtil.getQueueElementsFromSongs(songs, PreferenceUtil.getInstance(App.getInstance()).getServerId()));
queueDao.insertAll(QueueUtil.getQueueElementsFromSongs(songs));
}
}
@ -130,7 +137,7 @@ public class QueueRepository {
@Override
public void run() {
queueDao.deleteByPosition(position, PreferenceUtil.getInstance(App.getInstance()).getServerId());
queueDao.deleteByPosition(position);
}
}
@ -143,7 +150,7 @@ public class QueueRepository {
@Override
public void run() {
queueDao.deleteAll(PreferenceUtil.getInstance(App.getInstance()).getServerId());
queueDao.deleteAll();
}
}

View file

@ -13,10 +13,12 @@ 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.broadcast.receiver.ConnectivityStatusBroadcastReceiver;
import com.cappielloantonio.play.databinding.ActivityMainBinding;
import com.cappielloantonio.play.model.Song;
import com.cappielloantonio.play.repository.QueueRepository;
import com.cappielloantonio.play.service.MusicPlayerRemote;
import com.cappielloantonio.play.ui.activity.base.BaseActivity;
import com.cappielloantonio.play.ui.fragment.PlayerBottomSheetFragment;
@ -179,6 +181,9 @@ public class MainActivity extends BaseActivity {
// NAVIGATION
public void goToLogin() {
setBottomNavigationBarVisibility(false);
setBottomSheetVisibility(false);
if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.landingFragment) {
navController.navigate(R.id.action_landingFragment_to_loginFragment);
} else if(Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.settingsFragment) {
@ -197,9 +202,23 @@ public class MainActivity extends BaseActivity {
}
public void goFromLogin() {
isBottomSheetInPeek(mainViewModel.isQueueLoaded());
goToHome();
}
public void clearViewModel() {
this.getViewModelStore().clear();
}
public void quit() {
QueueRepository queueRepository = new QueueRepository(App.getInstance());
queueRepository.deleteAll();
MusicPlayerRemote.quitPlaying();
clearViewModel();
goToLogin();
}
@Override
public void onBackPressed() {
if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED)

View file

@ -9,8 +9,10 @@ import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import com.cappielloantonio.play.App;
import com.cappielloantonio.play.R;
import com.cappielloantonio.play.helper.ThemeHelper;
import com.cappielloantonio.play.repository.QueueRepository;
import com.cappielloantonio.play.ui.activity.MainActivity;
import com.cappielloantonio.play.util.PreferenceUtil;
@ -50,7 +52,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
PreferenceUtil.getInstance(requireContext()).setSalt(null);
PreferenceUtil.getInstance(requireContext()).setServerId(null);
activity.goToLogin();
activity.quit();
return true;
});

View file

@ -91,7 +91,7 @@ public class PreferenceUtil {
}
public String getServerId() {
return mPreferences.getString(SERVER_ID, null);
return mPreferences.getString(SERVER_ID, "");
}
public void setServerId(String serverId) {

View file

@ -9,12 +9,12 @@ import java.util.List;
public class QueueUtil {
private static final String TAG = "QueueUtil";
public static List<Queue> getQueueElementsFromSongs(List<Song> songs, String serverID) {
public static List<Queue> getQueueElementsFromSongs(List<Song> songs) {
int counter = 0;
List<Queue> queue = new ArrayList<>();
for (Song song : songs) {
queue.add(new Queue(counter, song.getId(), song.getTitle(), song.getAlbumId(), song.getAlbumName(), song.getArtistId(), song.getArtistName(), song.getPrimary(), song.getDuration(), serverID));
queue.add(new Queue(counter, song.getId(), song.getTitle(), song.getAlbumId(), song.getAlbumName(), song.getArtistId(), song.getArtistName(), song.getPrimary(), song.getDuration()));
counter++;
}

View file

@ -10,18 +10,15 @@ import com.cappielloantonio.play.repository.QueueRepository;
public class MainViewModel extends AndroidViewModel {
private static final String TAG = "SearchViewModel";
private QueueRepository queueRepository;
private Application application;
public MainViewModel(@NonNull Application application) {
super(application);
queueRepository = new QueueRepository(application);
this.application = application;
}
public boolean isQueueLoaded() {
if (queueRepository.count() == 0)
return false;
return true;
QueueRepository queueRepository = new QueueRepository(application);
return queueRepository.count() != 0;
}
}