diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java index 1d27d8c2..ae7ed9cf 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/HomeFragment.java @@ -1,6 +1,7 @@ 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; @@ -24,6 +25,7 @@ import com.cappielloantonio.play.adapter.YearAdapter; import com.cappielloantonio.play.databinding.FragmentHomeBinding; import com.cappielloantonio.play.model.Song; import com.cappielloantonio.play.ui.activities.MainActivity; +import com.cappielloantonio.play.util.MusicUtil; import com.cappielloantonio.play.util.PreferenceUtil; import com.cappielloantonio.play.viewmodel.HomeViewModel; @@ -113,6 +115,8 @@ public class HomeFragment extends Fragment { bind.discoverSongViewPager.setAdapter(discoverSongAdapter); bind.discoverSongViewPager.setOffscreenPageLimit(3); setDiscoverSongSlideViewOffset(20, 16); + + Log.i(TAG, "initDiscoverSongSlideView: " + MusicUtil.getRandomSongNumber(requireContext(), 10, 3)); } private void initMostPlayedSongView() { diff --git a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java index f4f59981..fa08f803 100644 --- a/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java +++ b/app/src/main/java/com/cappielloantonio/play/ui/fragment/SyncFragment.java @@ -204,6 +204,7 @@ public class SyncFragment extends Fragment { songRepository.deleteAllSongGenreCross(); songRepository.insertAll((ArrayList) media); syncSongArtistCross((ArrayList) media); + PreferenceUtil.getInstance(requireContext()).setSongNumber(media.size()); animateProgressBar(true); } }); diff --git a/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java b/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java index 3beb4c41..d10f6fe5 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/MusicUtil.java @@ -1,5 +1,6 @@ package com.cappielloantonio.play.util; +import android.content.Context; import android.util.Log; import com.cappielloantonio.play.App; @@ -10,7 +11,10 @@ import com.cappielloantonio.play.model.Song; import org.jellyfin.apiclient.interaction.ApiClient; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; +import java.util.Random; public class MusicUtil { public static String getSongFileUri(Song song) { @@ -86,4 +90,23 @@ public class MusicUtil { return R.drawable.default_album_art; } } + + public static List getRandomSongNumber(Context context, int numberOfNumbers, int refreshAfterXHours) { + List list = new ArrayList<>(); + + for (int i = 0; i < numberOfNumbers; i++) + { + list.add(getRandomNumber(0, PreferenceUtil.getInstance(context).getSongNumber(), getMidnightTimestamp(System.currentTimeMillis() / 1000, refreshAfterXHours) + i)); + } + + return list; + } + + private static long getMidnightTimestamp(long timestamp, int hours) { + return timestamp - timestamp % (hours * 60 * 60); // 24 * 60 * 60 sec in one day + } + + private static int getRandomNumber(int min, int max, long seed) { + return new Random(seed).nextInt((max - min) + 1) + min; + } } diff --git a/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java b/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java index c16c983d..f909e9b8 100644 --- a/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java +++ b/app/src/main/java/com/cappielloantonio/play/util/PreferenceUtil.java @@ -34,6 +34,8 @@ public class PreferenceUtil { public static final String MAXIMUM_BITRATE = "maximum_bitrate"; public static final String AUDIO_DUCKING = "audio_ducking"; + public static final String SONG_NUMBER = "SONG_NUMBER"; + private static PreferenceUtil sInstance; private final SharedPreferences mPreferences; @@ -175,4 +177,14 @@ public class PreferenceUtil { public final boolean getAudioDucking() { return mPreferences.getBoolean(AUDIO_DUCKING, true); } + + public int getSongNumber() { + return mPreferences.getInt(SONG_NUMBER, 0); + } + + public void setSongNumber(int number) { + final SharedPreferences.Editor editor = mPreferences.edit(); + editor.putInt(SONG_NUMBER, number); + editor.apply(); + } } \ No newline at end of file