From f242f1ba5c661f4057ca96e73495d70aded5cc6e Mon Sep 17 00:00:00 2001 From: atul-ap <atulpatare99@gmail.com> Date: Tue, 27 Dec 2022 23:08:20 +0530 Subject: [PATCH 1/8] fixed dialog out of context errors --- .../java/com/atul/musicplayer/MainActivity.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/app/src/main/java/com/atul/musicplayer/MainActivity.java b/src/app/src/main/java/com/atul/musicplayer/MainActivity.java index 3cb8350..7191e61 100644 --- a/src/app/src/main/java/com/atul/musicplayer/MainActivity.java +++ b/src/app/src/main/java/com/atul/musicplayer/MainActivity.java @@ -82,7 +82,6 @@ protected void onCreate(Bundle savedInstanceState) { manageStoragePermission(MainActivity.this); albumState = MPPreferences.getAlbumRequest(this); - MPConstants.musicSelectListener = this; MaterialCardView playerLayout = findViewById(R.id.player_layout); albumArt = findViewById(R.id.albumArt); @@ -274,7 +273,6 @@ else if (id == R.id.player_layout) private void setUpPlayerDialog() { playerDialog = new PlayerDialog(this, playerManager, this); - playerDialog.show(); } @@ -324,7 +322,11 @@ public void sleepTimerOptionSelect() { private void setUpQueueDialog() { queueDialog = new QueueDialog(MainActivity.this, playerManager.getPlayerQueue()); - queueDialog.setOnDismissListener(v -> playerDialog.show()); + queueDialog.setOnDismissListener(v -> { + if(!this.isDestroyed()) { + playerDialog.show(); + } + }); playerDialog.dismiss(); queueDialog.show(); @@ -341,7 +343,9 @@ private void setUpSleepTimerDialog() { return; } SleepTimerDialog sleepTimerDialog = new SleepTimerDialog(MainActivity.this, this); - sleepTimerDialog.setOnDismissListener(v -> playerDialog.show()); + sleepTimerDialog.setOnDismissListener(v -> { + if(!this.isDestroyed()) playerDialog.show(); + }); playerDialog.dismiss(); sleepTimerDialog.show(); @@ -349,7 +353,9 @@ private void setUpSleepTimerDialog() { private void setUpSleepTimerDisplayDialog() { SleepTimerDisplayDialog sleepTimerDisplayDialog = new SleepTimerDisplayDialog(MainActivity.this, this); - sleepTimerDisplayDialog.setOnDismissListener(v -> playerDialog.show()); + sleepTimerDisplayDialog.setOnDismissListener(v -> { + if(!this.isDestroyed()) playerDialog.show(); + }); playerDialog.dismiss(); sleepTimerDisplayDialog.show(); From 3981069ef1eb435ef6d319f28486d8909309b4ef Mon Sep 17 00:00:00 2001 From: atul-ap <atulpatare99@gmail.com> Date: Tue, 27 Dec 2022 23:08:44 +0530 Subject: [PATCH 2/8] fixed null media button event --- .../main/java/com/atul/musicplayer/player/PlayerService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/app/src/main/java/com/atul/musicplayer/player/PlayerService.java b/src/app/src/main/java/com/atul/musicplayer/player/PlayerService.java index df2356f..6a5b73f 100644 --- a/src/app/src/main/java/com/atul/musicplayer/player/PlayerService.java +++ b/src/app/src/main/java/com/atul/musicplayer/player/PlayerService.java @@ -104,6 +104,9 @@ private void configureMediaSession() { private boolean handleMediaButtonEvent(Intent mediaButtonEvent) { boolean isSuccess = false; + if (mediaButtonEvent == null) { + return false; + } KeyEvent keyEvent = mediaButtonEvent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); From 1f157667adca3c7077ccd942c7fddd9e09895444 Mon Sep 17 00:00:00 2001 From: atul-ap <atulpatare99@gmail.com> Date: Tue, 27 Dec 2022 23:09:05 +0530 Subject: [PATCH 3/8] fixed removing current playing from queue --- .../atul/musicplayer/adapter/QueueAdapter.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/app/src/main/java/com/atul/musicplayer/adapter/QueueAdapter.java b/src/app/src/main/java/com/atul/musicplayer/adapter/QueueAdapter.java index 1b397e9..56035fe 100644 --- a/src/app/src/main/java/com/atul/musicplayer/adapter/QueueAdapter.java +++ b/src/app/src/main/java/com/atul/musicplayer/adapter/QueueAdapter.java @@ -24,6 +24,7 @@ public class QueueAdapter extends RecyclerView.Adapter<QueueAdapter.MyViewHolder private final List<Music> musicList; private final PlayerQueue playerQueue; + private final Music currentMusic; private final @ColorInt int colorInt; int defaultTint; @@ -31,6 +32,7 @@ public class QueueAdapter extends RecyclerView.Adapter<QueueAdapter.MyViewHolder public QueueAdapter(Context context, List<Music> musics, PlayerQueue playerQueue) { this.musicList = musics; this.playerQueue = playerQueue; + this.currentMusic = playerQueue.getCurrentMusic(); colorInt = ThemeHelper.resolveColorAttr( context, @@ -51,7 +53,7 @@ public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.songName.setText(musicList.get(position).title); - if (playerQueue.getCurrentMusic().title.equals(musicList.get(position).title)) { + if (currentMusic.title.equals(musicList.get(position).title)) { holder.albumName.setText(R.string.now_playing); holder.albumName.setTextColor(colorInt); holder.drag.setImageResource(R.drawable.ic_current_playing); @@ -106,9 +108,17 @@ public MyViewHolder(@NonNull View itemView) { drag = itemView.findViewById(R.id.control_drag); itemView.findViewById(R.id.control_close).setOnClickListener(v -> { - musicList.remove(getAdapterPosition()); - playerQueue.removeMusicFromQueue(getAdapterPosition()); - notifyDataSetChanged(); + int position = getAdapterPosition(); + + if(position >= 0 && position < musicList.size()) { + boolean isPlaying = currentMusic.title.equals(musicList.get(position).title); + + if (!isPlaying) { + musicList.remove(position); + playerQueue.removeMusicFromQueue(position); + notifyItemRemoved(position); + } + } }); } } From 1ed17ef0723c2068bb23886edd92e3723e2aad36 Mon Sep 17 00:00:00 2001 From: atul-ap <atulpatare99@gmail.com> Date: Tue, 27 Dec 2022 23:09:31 +0530 Subject: [PATCH 4/8] added singleton pattern for queue --- .../atul/musicplayer/fragments/SongsFragment.java | 2 +- .../com/atul/musicplayer/player/PlayerManager.java | 2 +- .../com/atul/musicplayer/player/PlayerQueue.java | 12 +++++++++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/app/src/main/java/com/atul/musicplayer/fragments/SongsFragment.java b/src/app/src/main/java/com/atul/musicplayer/fragments/SongsFragment.java index a8b69f3..6914aed 100644 --- a/src/app/src/main/java/com/atul/musicplayer/fragments/SongsFragment.java +++ b/src/app/src/main/java/com/atul/musicplayer/fragments/SongsFragment.java @@ -127,7 +127,7 @@ public boolean onQueryTextChange(String newText) { private void updateAdapter(List<Music> list) { musicList.clear(); musicList.addAll(list); - songsAdapter.notifyDataSetChanged(); + songsAdapter.notifyItemRangeInserted(0, musicList.size()); shuffleControl.setText(String.valueOf(musicList.size())); } diff --git a/src/app/src/main/java/com/atul/musicplayer/player/PlayerManager.java b/src/app/src/main/java/com/atul/musicplayer/player/PlayerManager.java index b2993e4..21807c6 100644 --- a/src/app/src/main/java/com/atul/musicplayer/player/PlayerManager.java +++ b/src/app/src/main/java/com/atul/musicplayer/player/PlayerManager.java @@ -84,7 +84,7 @@ public void onAudioFocusChange(final int focusChange) { public PlayerManager(@NonNull PlayerService playerService) { this.playerService = playerService; this.context = playerService.getApplicationContext(); - this.playerQueue = new PlayerQueue(); + this.playerQueue = PlayerQueue.getInstance(); this.audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); Observer<Integer> progressObserver = percent -> { diff --git a/src/app/src/main/java/com/atul/musicplayer/player/PlayerQueue.java b/src/app/src/main/java/com/atul/musicplayer/player/PlayerQueue.java index 9b265df..3a62410 100644 --- a/src/app/src/main/java/com/atul/musicplayer/player/PlayerQueue.java +++ b/src/app/src/main/java/com/atul/musicplayer/player/PlayerQueue.java @@ -8,6 +8,7 @@ import java.util.Random; public class PlayerQueue { + private static PlayerQueue instance = null; private final Random random = new Random(); private List<Music> currentQueue; private List<Integer> played; @@ -15,8 +16,15 @@ public class PlayerQueue { private boolean repeat = false; private int currentPosition = 0; + public static PlayerQueue getInstance() { + if (instance == null) { + instance = new PlayerQueue(); + } + return instance; + } + private boolean isCurrentPositionOutOfBound(int pos) { - return pos >= currentQueue.size() || pos <= 0; + return pos >= currentQueue.size() || pos < 0; } public boolean isShuffle() { @@ -85,6 +93,8 @@ public void prev() { public void removeMusicFromQueue(int position) { if (!isCurrentPositionOutOfBound(position)) { currentQueue.remove(position); + if(currentPosition > position) + currentPosition -= 1; } } From 5abc5dec427c2452f897e0e978c42dc000d9b185 Mon Sep 17 00:00:00 2001 From: atul-ap <atulpatare99@gmail.com> Date: Mon, 2 Jan 2023 16:38:23 +0530 Subject: [PATCH 5/8] fixed player queue, swap issue, and search issue --- .../musicplayer/fragments/SongsFragment.java | 16 ++++++++++++---- .../atul/musicplayer/player/PlayerManager.java | 4 ++-- .../com/atul/musicplayer/player/PlayerQueue.java | 6 ++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/app/src/main/java/com/atul/musicplayer/fragments/SongsFragment.java b/src/app/src/main/java/com/atul/musicplayer/fragments/SongsFragment.java index 6914aed..810fe80 100644 --- a/src/app/src/main/java/com/atul/musicplayer/fragments/SongsFragment.java +++ b/src/app/src/main/java/com/atul/musicplayer/fragments/SongsFragment.java @@ -114,20 +114,28 @@ private void setUpSearchView() { @Override public boolean onQueryTextSubmit(String query) { - updateAdapter(ListHelper.searchMusicByName(unChangedList, query.toLowerCase())); + if(query.length() > 0) { + updateAdapter(ListHelper.searchMusicByName(unChangedList, query.toLowerCase())); + } else { + updateAdapter(unChangedList); + } return true; } @Override - public boolean onQueryTextChange(String newText) { - updateAdapter(ListHelper.searchMusicByName(unChangedList, newText.toLowerCase())); + public boolean onQueryTextChange(String query) { + if(query.length() > 0) { + updateAdapter(ListHelper.searchMusicByName(unChangedList, query.toLowerCase())); + }else { + updateAdapter(unChangedList); + } return true; } private void updateAdapter(List<Music> list) { musicList.clear(); musicList.addAll(list); - songsAdapter.notifyItemRangeInserted(0, musicList.size()); + songsAdapter.notifyDataSetChanged(); shuffleControl.setText(String.valueOf(musicList.size())); } diff --git a/src/app/src/main/java/com/atul/musicplayer/player/PlayerManager.java b/src/app/src/main/java/com/atul/musicplayer/player/PlayerManager.java index 21807c6..73c6858 100644 --- a/src/app/src/main/java/com/atul/musicplayer/player/PlayerManager.java +++ b/src/app/src/main/java/com/atul/musicplayer/player/PlayerManager.java @@ -174,7 +174,7 @@ public void setPlayerListener(PlayerListener listener) { } public void setMusicList(List<Music> musicList) { - playerQueue.setCurrentQueue(musicList); + playerQueue.setCurrentQueue(new ArrayList<>(musicList)); initMediaPlayer(); // play now } @@ -186,7 +186,7 @@ public void setMusic(Music music) { } public void addMusicQueue(List<Music> musicList) { - playerQueue.addMusicListToQueue(musicList); + playerQueue.addMusicListToQueue(new ArrayList<>(musicList)); if (!mediaPlayer.isPlaying()) initMediaPlayer(); // play when ready diff --git a/src/app/src/main/java/com/atul/musicplayer/player/PlayerQueue.java b/src/app/src/main/java/com/atul/musicplayer/player/PlayerQueue.java index 3a62410..dd64da0 100644 --- a/src/app/src/main/java/com/atul/musicplayer/player/PlayerQueue.java +++ b/src/app/src/main/java/com/atul/musicplayer/player/PlayerQueue.java @@ -100,6 +100,12 @@ public void removeMusicFromQueue(int position) { public void swap(int one, int two) { if (!isCurrentPositionOutOfBound(one) && !isCurrentPositionOutOfBound(two)) { + if(one == currentPosition) { + currentPosition = two; + } + else if(two == currentPosition) { + currentPosition = one; + } Collections.swap(currentQueue, one, two); } } From fd428e811254303ba0a4ac5712b9d183eaa3dd03 Mon Sep 17 00:00:00 2001 From: atul-ap <atulpatare99@gmail.com> Date: Mon, 2 Jan 2023 18:31:55 +0530 Subject: [PATCH 6/8] fixed player icon flicker issue --- src/app/build.gradle | 17 +++++++++-------- src/app/src/main/AndroidManifest.xml | 3 +-- .../musicplayer/activities/PlayerDialog.java | 1 - src/build.gradle | 2 +- src/gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/app/build.gradle b/src/app/build.gradle index 97bad8d..00f62b8 100644 --- a/src/app/build.gradle +++ b/src/app/build.gradle @@ -18,8 +18,8 @@ android { applicationId "com.atul.musicplayer" minSdkVersion 23 targetSdkVersion 33 - versionCode 12 - versionName "0.12" + versionCode 13 + versionName "0.13" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } @@ -35,14 +35,15 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + namespace 'com.atul.musicplayer' } dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.appcompat:appcompat:1.3.0' - implementation 'com.google.android.material:material:1.3.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - implementation 'androidx.lifecycle:lifecycle-livedata:2.3.1' - implementation 'androidx.lifecycle:lifecycle-viewmodel:2.3.1' - implementation 'com.github.bumptech.glide:glide:4.11.0' + implementation 'androidx.appcompat:appcompat:1.5.1' + implementation 'com.google.android.material:material:1.7.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.lifecycle:lifecycle-livedata:2.5.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1' + implementation 'com.github.bumptech.glide:glide:4.14.2' } \ No newline at end of file diff --git a/src/app/src/main/AndroidManifest.xml b/src/app/src/main/AndroidManifest.xml index e4b4308..838ebdd 100644 --- a/src/app/src/main/AndroidManifest.xml +++ b/src/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.atul.musicplayer"> +<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> diff --git a/src/app/src/main/java/com/atul/musicplayer/activities/PlayerDialog.java b/src/app/src/main/java/com/atul/musicplayer/activities/PlayerDialog.java index e72e1d8..d4cdee2 100644 --- a/src/app/src/main/java/com/atul/musicplayer/activities/PlayerDialog.java +++ b/src/app/src/main/java/com/atul/musicplayer/activities/PlayerDialog.java @@ -194,7 +194,6 @@ public void onClick(View v) { else if (id == R.id.music_queue) this.playerDialogListener.queueOptionSelect(); else if (id == R.id.sleep_timer) this.playerDialogListener.sleepTimerOptionSelect(); - setUpUi(); } private void setRepeat() { diff --git a/src/build.gradle b/src/build.gradle index 9d8b761..bcfbab2 100644 --- a/src/build.gradle +++ b/src/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.2.2' + classpath 'com.android.tools.build:gradle:7.3.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/src/gradle/wrapper/gradle-wrapper.properties b/src/gradle/wrapper/gradle-wrapper.properties index ccfdedb..cfb07bb 100644 --- a/src/gradle/wrapper/gradle-wrapper.properties +++ b/src/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip From 95c3036b8703699c45a8b1738201868708ce6ca6 Mon Sep 17 00:00:00 2001 From: atul-ap <atulpatare99@gmail.com> Date: Mon, 2 Jan 2023 18:34:33 +0530 Subject: [PATCH 7/8] updated readme with new version --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d05311f..0d12b19 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ | Lite | Online | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [Github release v0.12](https://github.com/AP-Atul/music_player_lite/releases/download/v0.12/mplite.apk) | [Github release v0.3](https://github.com/AP-Atul/music_player_lite/releases/download/v0.3/mplite_online.apk) | +| [Github release v0.13](https://github.com/AP-Atul/music_player_lite/releases/download/v0.13/mplite.apk) | [Github release v0.3](https://github.com/AP-Atul/music_player_lite/releases/download/v0.3/mplite_online.apk) | | <a href="https://apt.izzysoft.de/fdroid/index/apk/com.atul.musicplayer"><img src="https://github.com/AP-Atul/music_player_lite/raw/main/assets/IzzyOnDroid.png" width="200px"></a> | <a href="https://apt.izzysoft.de/fdroid/index/apk/com.atul.musicplayeronline"><img src="https://github.com/AP-Atul/music_player_lite/raw/main/assets/IzzyOnDroid.png" width="200px"></a> | | <a href="https://play.google.com/store/apps/details?id=com.atul.musicplayer"><img src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" width="200px"></a> | | From 41ad6896771c7ac7312d85a456601b2e6e513cb2 Mon Sep 17 00:00:00 2001 From: atul-ap <atulpatare99@gmail.com> Date: Mon, 2 Jan 2023 18:44:30 +0530 Subject: [PATCH 8/8] fixed theme selection for invalid data --- .../src/main/java/com/atul/musicplayer/MainActivity.java | 4 ++-- .../main/java/com/atul/musicplayer/helper/ThemeHelper.java | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/app/src/main/java/com/atul/musicplayer/MainActivity.java b/src/app/src/main/java/com/atul/musicplayer/MainActivity.java index 7191e61..8cfe6e7 100644 --- a/src/app/src/main/java/com/atul/musicplayer/MainActivity.java +++ b/src/app/src/main/java/com/atul/musicplayer/MainActivity.java @@ -68,8 +68,8 @@ public class MainActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setTheme(ThemeHelper.getTheme(MPPreferences.getTheme(getApplicationContext()))); - AppCompatDelegate.setDefaultNightMode(MPPreferences.getThemeMode(getApplicationContext())); + setTheme(ThemeHelper.getTheme(MPPreferences.getTheme(MainActivity.this))); + AppCompatDelegate.setDefaultNightMode(MPPreferences.getThemeMode(MainActivity.this)); setContentView(R.layout.activity_main); MPConstants.musicSelectListener = this; diff --git a/src/app/src/main/java/com/atul/musicplayer/helper/ThemeHelper.java b/src/app/src/main/java/com/atul/musicplayer/helper/ThemeHelper.java index 0578aa8..51dea86 100644 --- a/src/app/src/main/java/com/atul/musicplayer/helper/ThemeHelper.java +++ b/src/app/src/main/java/com/atul/musicplayer/helper/ThemeHelper.java @@ -61,7 +61,11 @@ public static HashMap<Integer, Integer> getThemeMap() { } public static Integer getTheme(Integer accentColor) { - return getThemeMap().get(accentColor); + Integer theme = getThemeMap().get(accentColor); + if(theme == null) { + return getThemeMap().get(R.color.blue); + } + return theme; } public static void applySettings(Activity activity) {