mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-01 18:03:33 +00:00
Implemented offline mode functionality
This commit is contained in:
parent
658e69dcb9
commit
e0569c3901
21 changed files with 635 additions and 23 deletions
|
|
@ -12,6 +12,7 @@ import android.os.IBinder;
|
|||
import android.os.PowerManager;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
|
@ -20,7 +21,11 @@ import androidx.appcompat.app.AppCompatActivity;
|
|||
import com.cappielloantonio.play.R;
|
||||
import com.cappielloantonio.play.helper.MusicPlayerRemote;
|
||||
import com.cappielloantonio.play.interfaces.MusicServiceEventListener;
|
||||
import com.cappielloantonio.play.service.DownloadTracker;
|
||||
import com.cappielloantonio.play.service.MusicService;
|
||||
import com.cappielloantonio.play.service.PlayDownloadService;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.google.android.exoplayer2.offline.DownloadService;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -29,7 +34,7 @@ import java.util.List;
|
|||
import pub.devrel.easypermissions.AppSettingsDialog;
|
||||
import pub.devrel.easypermissions.EasyPermissions;
|
||||
|
||||
public class BaseActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks, MusicServiceEventListener {
|
||||
public class BaseActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks, MusicServiceEventListener, DownloadTracker.Listener {
|
||||
private static final String TAG = "BaseActivity";
|
||||
public static final int REQUEST_PERM_ACCESS = 1;
|
||||
|
||||
|
|
@ -38,6 +43,8 @@ public class BaseActivity extends AppCompatActivity implements EasyPermissions.P
|
|||
private MusicPlayerRemote.ServiceToken serviceToken;
|
||||
private MusicStateReceiver musicStateReceiver;
|
||||
|
||||
private DownloadTracker downloadTracker;
|
||||
|
||||
private boolean receiverRegistered;
|
||||
|
||||
@Override
|
||||
|
|
@ -58,6 +65,23 @@ public class BaseActivity extends AppCompatActivity implements EasyPermissions.P
|
|||
BaseActivity.this.onServiceDisconnected();
|
||||
}
|
||||
});
|
||||
|
||||
downloadTracker = DownloadUtil.getDownloadTracker(this);
|
||||
// Start the download service if it should be running but it's not currently.
|
||||
// Starting the service in the foreground causes notification flicker if there is no scheduled
|
||||
// action. Starting it in the background throws an exception if the app is in the background too
|
||||
// (e.g. if device screen is locked).
|
||||
try {
|
||||
DownloadService.start(this, PlayDownloadService.class);
|
||||
} catch (IllegalStateException e) {
|
||||
DownloadService.startForeground(this, PlayDownloadService.class);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
downloadTracker.addListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -67,6 +91,12 @@ public class BaseActivity extends AppCompatActivity implements EasyPermissions.P
|
|||
checkBatteryOptimization();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
downloadTracker.removeListener(this);
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
|
@ -216,6 +246,13 @@ public class BaseActivity extends AppCompatActivity implements EasyPermissions.P
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDownloadsChanged() {
|
||||
// TODO Notificare all'item scaricato che lo stato di download è cambiato
|
||||
// sampleAdapter.notifyDataSetChanged();
|
||||
Toast.makeText(this, "Download changed", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
private static final class MusicStateReceiver extends BroadcastReceiver {
|
||||
|
||||
private final WeakReference<BaseActivity> reference;
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ import com.cappielloantonio.play.model.Song;
|
|||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.repository.SongRepository;
|
||||
import com.cappielloantonio.play.ui.activities.MainActivity;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.util.PreferenceUtil;
|
||||
import com.cappielloantonio.play.util.SyncUtil;
|
||||
import com.cappielloantonio.play.viewmodel.AlbumBottomSheetViewModel;
|
||||
|
|
@ -135,7 +137,8 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
|
||||
Download = view.findViewById(R.id.download_text_view);
|
||||
Download.setOnClickListener(v -> {
|
||||
Toast.makeText(requireContext(), "Download", Toast.LENGTH_SHORT).show();
|
||||
List<Song> songs = songRepository.getAlbumListSong(album.getId(), false);
|
||||
DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(songs);
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -21,19 +21,18 @@ import com.cappielloantonio.play.helper.MusicPlayerRemote;
|
|||
import com.cappielloantonio.play.interfaces.MediaCallback;
|
||||
import com.cappielloantonio.play.model.Album;
|
||||
import com.cappielloantonio.play.model.Artist;
|
||||
import com.cappielloantonio.play.model.PlaylistSongCross;
|
||||
import com.cappielloantonio.play.model.Song;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.ui.activities.MainActivity;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.PreferenceUtil;
|
||||
import com.cappielloantonio.play.util.SyncUtil;
|
||||
import com.cappielloantonio.play.viewmodel.PlayerBottomSheetViewModel;
|
||||
import com.cappielloantonio.play.viewmodel.SongBottomSheetViewModel;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class SongBottomSheetDialog extends BottomSheetDialogFragment implements View.OnClickListener {
|
||||
private static final String TAG = "SongBottomSheetDialog";
|
||||
|
|
@ -44,12 +43,13 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
private ImageView coverSong;
|
||||
private TextView titleSong;
|
||||
private TextView artistSong;
|
||||
private ToggleButton thumbToggle;
|
||||
private ToggleButton favoriteToggle;
|
||||
private ImageView downloadIndicator;
|
||||
|
||||
private TextView playRadio;
|
||||
private TextView playNext;
|
||||
private TextView addToQueue;
|
||||
private TextView Download;
|
||||
private TextView download;
|
||||
private TextView addToPlaylist;
|
||||
private TextView goToAlbum;
|
||||
private TextView goToArtist;
|
||||
|
|
@ -65,6 +65,7 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
songBottomSheetViewModel.setSong(song);
|
||||
|
||||
init(view);
|
||||
initDownloadedUI();
|
||||
|
||||
return view;
|
||||
}
|
||||
|
|
@ -83,13 +84,15 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
artistSong = view.findViewById(R.id.song_artist_text_view);
|
||||
artistSong.setText(songBottomSheetViewModel.getSong().getArtistName());
|
||||
|
||||
thumbToggle = view.findViewById(R.id.button_favorite);
|
||||
thumbToggle.setChecked(songBottomSheetViewModel.getSong().isFavorite());
|
||||
thumbToggle.setOnClickListener(v -> {
|
||||
favoriteToggle = view.findViewById(R.id.button_favorite);
|
||||
favoriteToggle.setChecked(songBottomSheetViewModel.getSong().isFavorite());
|
||||
favoriteToggle.setOnClickListener(v -> {
|
||||
songBottomSheetViewModel.setFavorite();
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
downloadIndicator = view.findViewById(R.id.bottom_sheet_song_dowanload_indicator_image_view);
|
||||
|
||||
playRadio = view.findViewById(R.id.play_radio_text_view);
|
||||
playRadio.setOnClickListener(v -> {
|
||||
SyncUtil.getInstantMix(requireContext(), new MediaCallback() {
|
||||
|
|
@ -129,9 +132,9 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
Download = view.findViewById(R.id.download_text_view);
|
||||
Download.setOnClickListener(v -> {
|
||||
Toast.makeText(requireContext(), "Download", Toast.LENGTH_SHORT).show();
|
||||
download = view.findViewById(R.id.download_text_view);
|
||||
download.setOnClickListener(v -> {
|
||||
DownloadUtil.getDownloadTracker(requireContext()).toggleDownload(Arrays.asList(song));
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
|
|
@ -177,4 +180,14 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
private void dismissBottomSheet() {
|
||||
dismiss();
|
||||
}
|
||||
|
||||
private void initDownloadedUI() {
|
||||
if (song.isOffline()) {
|
||||
downloadIndicator.setVisibility(View.VISIBLE);
|
||||
download.setText("Remove");
|
||||
} else {
|
||||
downloadIndicator.setVisibility(View.GONE);
|
||||
download.setText("Download");
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue