mirror of
https://github.com/antebudimir/tempus.git
synced 2026-01-01 18:03:33 +00:00
Reimplemented a basic track download functionality
This commit is contained in:
parent
b7a77cf32b
commit
dee845ebff
17 changed files with 154 additions and 214 deletions
|
|
@ -3,34 +3,41 @@ package com.cappielloantonio.play.ui.activity.base;
|
|||
import android.annotation.SuppressLint;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.os.PowerManager;
|
||||
import android.provider.Settings;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.MediaMetadata;
|
||||
import androidx.media3.exoplayer.offline.DownloadService;
|
||||
import androidx.media3.session.MediaBrowser;
|
||||
import androidx.media3.session.SessionToken;
|
||||
|
||||
import com.cappielloantonio.play.R;
|
||||
import com.cappielloantonio.play.service.DownloaderService;
|
||||
import com.cappielloantonio.play.service.DownloaderTracker;
|
||||
import com.cappielloantonio.play.service.MediaService;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import com.google.common.util.concurrent.MoreExecutors;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
public class BaseActivity extends AppCompatActivity {
|
||||
public class BaseActivity extends AppCompatActivity implements DownloaderTracker.Listener {
|
||||
private static final String TAG = "BaseActivity";
|
||||
|
||||
private ListenableFuture<MediaBrowser> mediaBrowserListenableFuture;
|
||||
private DownloaderTracker downloaderTracker;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
initializeDownloader();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
initializeBrowser();
|
||||
addDownloadListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -42,9 +49,16 @@ public class BaseActivity extends AppCompatActivity {
|
|||
@Override
|
||||
protected void onStop() {
|
||||
releaseBrowser();
|
||||
removeDownloadListener();
|
||||
super.onStop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDownloadsChanged() {
|
||||
// TODO Notificare all'item scaricato che lo stato di download è cambiato
|
||||
// sampleAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
private void checkBatteryOptimization() {
|
||||
if (detectBatteryOptimization()) {
|
||||
showBatteryOptimizationDialog();
|
||||
|
|
@ -85,4 +99,23 @@ public class BaseActivity extends AppCompatActivity {
|
|||
public ListenableFuture<MediaBrowser> getMediaBrowserListenableFuture() {
|
||||
return mediaBrowserListenableFuture;
|
||||
}
|
||||
|
||||
@SuppressLint("UnsafeOptInUsageError")
|
||||
private void initializeDownloader() {
|
||||
downloaderTracker = DownloadUtil.getDownloadTracker(this);
|
||||
|
||||
try {
|
||||
DownloadService.start(this, DownloaderService.class);
|
||||
} catch (IllegalStateException e) {
|
||||
DownloadService.startForeground(this, DownloaderService.class);
|
||||
}
|
||||
}
|
||||
|
||||
private void addDownloadListener() {
|
||||
downloaderTracker.addListener(this);
|
||||
}
|
||||
|
||||
private void removeDownloadListener() {
|
||||
downloaderTracker.removeListener(this);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import androidx.lifecycle.ViewModelProvider;
|
|||
import com.cappielloantonio.play.R;
|
||||
import com.cappielloantonio.play.databinding.DialogConnectionAlertBinding;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.MappingUtil;
|
||||
import com.cappielloantonio.play.util.PreferenceUtil;
|
||||
import com.cappielloantonio.play.viewmodel.StarredSyncViewModel;
|
||||
|
||||
|
|
@ -34,8 +35,10 @@ public class StarredSyncDialog extends DialogFragment {
|
|||
|
||||
builder.setView(bind.getRoot())
|
||||
.setTitle(R.string.starred_sync_dialog_title)
|
||||
.setPositiveButton(R.string.starred_sync_dialog_positive_button, (dialog, id) -> { })
|
||||
.setNegativeButton(R.string.starred_sync_dialog_negative_button, (dialog, id) -> { });
|
||||
.setPositiveButton(R.string.starred_sync_dialog_positive_button, (dialog, id) -> {
|
||||
})
|
||||
.setNegativeButton(R.string.starred_sync_dialog_negative_button, (dialog, id) -> {
|
||||
});
|
||||
|
||||
return builder.create();
|
||||
}
|
||||
|
|
@ -60,7 +63,7 @@ public class StarredSyncDialog extends DialogFragment {
|
|||
((AlertDialog) Objects.requireNonNull(getDialog())).getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
|
||||
starredSyncViewModel.getStarredTracks(requireActivity()).observe(requireActivity(), songs -> {
|
||||
if (songs != null) {
|
||||
// DownloadUtil.getDownloadTracker(context).download(songs, null, null);
|
||||
DownloadUtil.getDownloadTracker(context).download(MappingUtil.mapMediaItems(context, songs, false));
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ import com.cappielloantonio.play.glide.CustomGlideRequest;
|
|||
import com.cappielloantonio.play.service.MediaManager;
|
||||
import com.cappielloantonio.play.service.MediaService;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.MappingUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.viewmodel.AlbumPageViewModel;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
|
@ -106,7 +108,7 @@ public class AlbumPageFragment extends Fragment {
|
|||
if (item.getItemId() == R.id.action_download_album) {
|
||||
albumPageViewModel.getAlbumSongLiveList(requireActivity()).observe(requireActivity(), songs -> {
|
||||
if (isVisible() && getActivity() != null) {
|
||||
// DownloadUtil.getDownloadTracker(requireContext()).download(songs, null, null);
|
||||
DownloadUtil.getDownloadTracker(requireContext()).download(MappingUtil.mapMediaItems(requireContext(), songs, false));
|
||||
}
|
||||
});
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -19,16 +19,13 @@ import androidx.media3.session.SessionToken;
|
|||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.bumptech.glide.load.resource.bitmap.GranularRoundedCorners;
|
||||
import com.cappielloantonio.play.App;
|
||||
import com.cappielloantonio.play.R;
|
||||
import com.cappielloantonio.play.adapter.SongHorizontalAdapter;
|
||||
import com.cappielloantonio.play.databinding.FragmentPlaylistPageBinding;
|
||||
import com.cappielloantonio.play.glide.CustomGlideRequest;
|
||||
import com.cappielloantonio.play.repository.QueueRepository;
|
||||
import com.cappielloantonio.play.service.MediaManager;
|
||||
import com.cappielloantonio.play.service.MediaService;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.viewmodel.PlaylistPageViewModel;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import android.widget.ToggleButton;
|
|||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.session.MediaBrowser;
|
||||
import androidx.media3.session.SessionToken;
|
||||
import androidx.navigation.fragment.NavHostFragment;
|
||||
|
|
@ -29,6 +30,8 @@ import com.cappielloantonio.play.repository.AlbumRepository;
|
|||
import com.cappielloantonio.play.service.MediaManager;
|
||||
import com.cappielloantonio.play.service.MediaService;
|
||||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.MappingUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.viewmodel.AlbumBottomSheetViewModel;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||
|
|
@ -153,19 +156,21 @@ public class AlbumBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
TextView removeAll = view.findViewById(R.id.remove_all_text_view);
|
||||
|
||||
albumBottomSheetViewModel.getAlbumTracks().observe(requireActivity(), songs -> {
|
||||
List<MediaItem> mediaItems = MappingUtil.mapMediaItems(requireContext(), songs, false);
|
||||
|
||||
downloadAll.setOnClickListener(v -> {
|
||||
// DownloadUtil.getDownloadTracker(requireContext()).download(songs, null, null);
|
||||
DownloadUtil.getDownloadTracker(requireContext()).download(mediaItems);
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
/*if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(songs)) {
|
||||
if (DownloadUtil.getDownloadTracker(requireContext()).areDownloaded(mediaItems)) {
|
||||
removeAll.setOnClickListener(v -> {
|
||||
DownloadUtil.getDownloadTracker(requireContext()).remove(songs);
|
||||
DownloadUtil.getDownloadTracker(requireContext()).remove(mediaItems);
|
||||
dismissBottomSheet();
|
||||
});
|
||||
} else {
|
||||
removeAll.setVisibility(View.GONE);
|
||||
}*/
|
||||
}
|
||||
});
|
||||
|
||||
TextView goToArtist = view.findViewById(R.id.go_to_artist_text_view);
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ import com.cappielloantonio.play.service.MediaService;
|
|||
import com.cappielloantonio.play.ui.activity.MainActivity;
|
||||
import com.cappielloantonio.play.ui.dialog.PlaylistChooserDialog;
|
||||
import com.cappielloantonio.play.ui.dialog.RatingDialog;
|
||||
import com.cappielloantonio.play.util.DownloadUtil;
|
||||
import com.cappielloantonio.play.util.MappingUtil;
|
||||
import com.cappielloantonio.play.util.MusicUtil;
|
||||
import com.cappielloantonio.play.viewmodel.SongBottomSheetViewModel;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
|
||||
|
|
@ -155,13 +157,13 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
|
||||
TextView download = view.findViewById(R.id.download_text_view);
|
||||
download.setOnClickListener(v -> {
|
||||
// DownloadUtil.getDownloadTracker(requireContext()).download(Collections.singletonList(song), null, null);
|
||||
DownloadUtil.getDownloadTracker(requireContext()).download(MappingUtil.mapMediaItem(requireContext(), song, false));
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
TextView remove = view.findViewById(R.id.remove_text_view);
|
||||
remove.setOnClickListener(v -> {
|
||||
// DownloadUtil.getDownloadTracker(requireContext()).remove(Collections.singletonList(song));
|
||||
DownloadUtil.getDownloadTracker(requireContext()).remove(MappingUtil.mapMediaItem(requireContext(), song, false));
|
||||
dismissBottomSheet();
|
||||
});
|
||||
|
||||
|
|
@ -214,13 +216,13 @@ public class SongBottomSheetDialog extends BottomSheetDialogFragment implements
|
|||
}
|
||||
|
||||
private void initDownloadUI(TextView download, TextView remove) {
|
||||
/*if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(song)) {
|
||||
if (DownloadUtil.getDownloadTracker(requireContext()).isDownloaded(MappingUtil.mapMediaItem(requireContext(), song, false))) {
|
||||
download.setVisibility(View.GONE);
|
||||
remove.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
download.setVisibility(View.VISIBLE);
|
||||
remove.setVisibility(View.GONE);
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("UnsafeOptInUsageError")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue