diff --git a/app/build.gradle b/app/build.gradle index 387032b..a37515f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId 'com.kangtech.tauonremote' minSdkVersion 22 targetSdkVersion 30 - versionCode 4 - versionName "1.0 beta2" + versionCode 5 + versionName "1.0 beta3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/kangtech/tauonremote/adapter/TrackListAdapter.java b/app/src/main/java/com/kangtech/tauonremote/adapter/TrackListAdapter.java index 2211036..1c55367 100644 --- a/app/src/main/java/com/kangtech/tauonremote/adapter/TrackListAdapter.java +++ b/app/src/main/java/com/kangtech/tauonremote/adapter/TrackListAdapter.java @@ -82,7 +82,7 @@ public void onBindViewHolder(@NonNull TrackListAdapter.TrackListViewHolder holde if (!SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { if (playlistID.equals(SharedPreferencesUtils.getString("playlistID", "0"))) { - if (trackListModels.tracks.get(position).position == SharedPreferencesUtils.getInt("TrackPosition", 0)) { + if (trackListModels.tracks.get(position).id == SharedPreferencesUtils.getInt("TrackID", 0)) { holder.llTrack.setBackgroundColor(context.getResources().getColor(R.color.rose_bg_seekbar1)); } else { holder.llTrack.setBackgroundColor(context.getResources().getColor(R.color.rose_bg_list)); diff --git a/app/src/main/java/com/kangtech/tauonremote/view/MainActivity.java b/app/src/main/java/com/kangtech/tauonremote/view/MainActivity.java index c0ee1d0..00992e3 100644 --- a/app/src/main/java/com/kangtech/tauonremote/view/MainActivity.java +++ b/app/src/main/java/com/kangtech/tauonremote/view/MainActivity.java @@ -164,6 +164,10 @@ public class MainActivity extends AppCompatActivity { private String getStreamRepeat = "off"; private List temp_trackListModels; + private static boolean getReqPrev = false; + private static boolean getReqNext = false; + private static boolean getReqPlayPause = false; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -233,9 +237,6 @@ protected void onCreate(Bundle savedInstanceState) { runStatus(); - next(); - prev(); - if (!getSharedPreferences("tauon_remote", MODE_PRIVATE).contains("is_stream_mode")) { editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); editor.putBoolean("is_stream_mode", false); @@ -244,6 +245,13 @@ protected void onCreate(Bundle savedInstanceState) { if (SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { TrackListInit(SharedPreferencesUtils.getString("playlist_stream", "0")); + +/* if (HXMusic.getStatus().equals("READY")) { + if (!HXMusic.isPlaying()) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + initRemoteClear(); + } + }*/ } editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); @@ -535,19 +543,9 @@ public void onClick(DialogInterface dialog, int which) { switch (which){ case DialogInterface.BUTTON_POSITIVE: - editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); - editor.putBoolean("is_stream_mode", true); - editor.putString("playlist_stream", getPlaylistId); - editor.putInt("trackPosition_stream", getPosition); - editor.putInt("trackId_stream", trackListModels.tracks.get(getPosition).id); - editor.apply(); - TrackListInit(SharedPreferencesUtils.getString("playlist_stream", "0")); - if (HXMusic.instance() != null) - if(!HXMusic.isPlaying()) { - initStream(getPosition); - } + initRemoteClear(); requestPause(); break; @@ -568,7 +566,7 @@ public void onClick(DialogInterface dialog, int which) { }; AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setMessage("Pause currently playing on the Tauon Music Box (PC)?\nand Play the Stream now?").setPositiveButton("Yes", dialogClickListener) + builder.setMessage("Pause currently playing on the Tauon Music Box (PC)?").setPositiveButton("Yes", dialogClickListener) .setNegativeButton("No", dialogClickListener).setCancelable(false).show(); } @@ -576,6 +574,12 @@ public void onClick(DialogInterface dialog, int which) { private void initRemoteClear() { play(); + editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); + editor.putBoolean("is_stream_mode", true); + editor.putInt("trackPosition_stream", -1); + editor.putInt("trackId_stream", -1); + editor.apply(); + seekBar.setProgress(0); tvSeekBar.setText("00:00"); progressBarMini.setProgress(0); @@ -704,6 +708,14 @@ public void onClick(View v) { } } }); + + if (HXMusic.getStatus().equals("READY")) { + ivNext.setEnabled(false); + ivNextMini.setEnabled(false); + } else { + ivNext.setEnabled(true); + ivNextMini.setEnabled(true); + } } public static void nextRequest() { apiServiceInterface.next() @@ -757,6 +769,14 @@ public void onClick(View v) { } } }); + + if (HXMusic.getStatus().equals("READY")) { + ivPrev.setEnabled(false); + ivPrevMini.setEnabled(false); + } else { + ivPrev.setEnabled(true); + ivPrevMini.setEnabled(true); + } } public static void prevRequest() { apiServiceInterface.back() @@ -824,12 +844,14 @@ private void streamStatusInit() { @SuppressLint("DefaultLocale") String progressTime = String.format("%02d:%02d", TimeUnit.MILLISECONDS.toMinutes((long) HXMusic.getCurrentProgress()), TimeUnit.MILLISECONDS.toSeconds((long) HXMusic.getCurrentProgress()) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) HXMusic.getCurrentProgress()))); tvSeekBar.setText(progressTime); break; + /*case "READY" : + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + initRemoteClear(); + } + break;*/ default: break; } - if (HXMusic.getStatus().equals("PLAYING") && HXMusic.getStatus().equals("PAUSED") && HXMusic.getStatus().equals("STOPPED")) { - - } /*if (!HXMusic.isPlaying()) { HXMusic.resume(this); @@ -845,8 +867,17 @@ public void onMusicPrepared(HXMusicItem music) { @Override public void onMusicCompletion(HXMusicItem music) { if (SharedPreferencesUtils.getInt("trackPosition_stream", 0) == trackListModels.tracks.size() - 1) { - HXMusic.stop(); - HXMusic.clear(); + switch (getStreamRepeat) { + case "all": + case "one" : + sNextSong(); + break; + case "off": + HXMusic.stop(); + HXMusic.clear(); + break; + } + } else { sNextSong(); } @@ -881,30 +912,34 @@ public void onMusicStop(HXMusicItem music) { break; } - if (sTempPosition != SharedPreferencesUtils.getInt("trackPosition_stream", -1)) { + if (!sTempPlaylist.equals(SharedPreferencesUtils.getString("playlist_stream", "-1"))) { - trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), trackListModels.tracks.get(SharedPreferencesUtils.getInt("trackPosition_stream", -1)).id); + trackListModels.tracks.clear(); + + TrackListInit(SharedPreferencesUtils.getString("playlist_stream", "-1")); int delay1 = 500; new Handler().postDelayed(new Runnable() { @Override public void run() { - sTempPosition = SharedPreferencesUtils.getInt("trackPosition_stream", -1); + sTempPlaylist = SharedPreferencesUtils.getString("playlist_stream", "-1"); + } },delay1); } - if (!sTempPlaylist.equals(SharedPreferencesUtils.getString("playlist_stream", "-1"))) { + if (sTempPosition != SharedPreferencesUtils.getInt("trackPosition_stream", -1)) { - trackListModels.tracks.clear(); - TrackListInit(SharedPreferencesUtils.getString("playlist_stream", "-1")); int delay1 = 500; new Handler().postDelayed(new Runnable() { @Override public void run() { - sTempPlaylist = SharedPreferencesUtils.getString("playlist_stream", "-1"); + sTempPosition = SharedPreferencesUtils.getInt("trackPosition_stream", -1); + + trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), SharedPreferencesUtils.getInt("trackPosition_stream", -1)); + } },delay1); } @@ -915,7 +950,32 @@ public void run() { ShuffleInit(); RepeatInit(); - //Log.e("cek ", " " + trackListModels.tracks.size()); + next(); + prev(); + + Log.e("cek ", " " + getReqPrev + " " + getReqNext); + + if (getReqPrev) { + sPrevSong(); + getReqPrev = false; + } + + if (getReqNext) { + sNextSong(); + getReqNext = false; + } + + if (getReqPlayPause) { + switch (SharedPreferencesUtils.getString("sStatus", "ready")) { + case "playing" : + sPause(); + break; + case "paused" : + sPlay(); + break; + } + getReqPlayPause = false; + } } public void sPrevSong() { @@ -928,17 +988,17 @@ public void sPrevSong() { if (getStreamShuffle) { next = random.nextInt(trackListModels.tracks.size()); } else { - next = SharedPreferencesUtils.getInt("trackPosition_stream", 0) + 1; + next = SharedPreferencesUtils.getInt("trackPosition_stream", 0) - 1; } - if (next <= 0) { + if (next < 0) { //Toast.makeText(this, "Track is already at the end, back to the beginning", Toast.LENGTH_SHORT).show(); - initStream(trackListModels.tracks.get(0).id); - trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), 0); + initStream(trackListModels.tracks.get(trackListModels.tracks.size() - 1).id); + trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), trackListModels.tracks.get(trackListModels.tracks.size() - 1).id); editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); - editor.putInt("trackPosition_stream", 0); - editor.putInt("trackId_stream", trackListModels.tracks.get(0).id); + editor.putInt("trackPosition_stream", trackListModels.tracks.size() - 1); + editor.putInt("trackId_stream", trackListModels.tracks.get(trackListModels.tracks.size() - 1).id); editor.apply(); } else { initStream(trackListModels.tracks.get(next).id); @@ -967,15 +1027,30 @@ public void sNextSong() { next = SharedPreferencesUtils.getInt("trackPosition_stream", 0) + 1; } - if (next >= trackListModels.tracks.size() - 1) { - //Toast.makeText(this, "Track is already at the end, back to the beginning", Toast.LENGTH_SHORT).show(); - initStream(trackListModels.tracks.size() - 1); - trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), trackListModels.tracks.get(trackListModels.tracks.size() - 1).position); + if (next > trackListModels.tracks.size() - 1) { - editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); - editor.putInt("trackPosition_stream", trackListModels.tracks.size() - 1); - editor.putInt("trackId_stream", trackListModels.tracks.get(trackListModels.tracks.size() - 1).id); - editor.apply(); + switch (getStreamRepeat) { + case "all": + case "one" : + initStream(trackListModels.tracks.get(0).id); + trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), trackListModels.tracks.get(0).position); + + editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); + editor.putInt("trackPosition_stream", 0); + editor.putInt("trackId_stream", trackListModels.tracks.get(0).id); + editor.apply(); + + break; + case "off": + initStream(trackListModels.tracks.get(trackListModels.tracks.size() - 1).id); + trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), trackListModels.tracks.get(trackListModels.tracks.size() - 1).position); + + editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); + editor.putInt("trackPosition_stream", trackListModels.tracks.size() - 1); + editor.putInt("trackId_stream", trackListModels.tracks.get(trackListModels.tracks.size() - 1).id); + editor.apply(); + break; + } } else { initStream(trackListModels.tracks.get(next).id); trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), trackListModels.tracks.get(next).position); @@ -991,10 +1066,18 @@ public void sNextSong() { } public void sPlay() { - HXMusic.resume(this); + editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); + editor.putString("sStatus", "playing"); + editor.apply(); + + HXMusic.resume(MainActivity.this); } public void sPause() { + editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); + editor.putString("sStatus", "paused"); + editor.apply(); + HXMusic.pause(); } @@ -1019,8 +1102,15 @@ public void onError(Throwable e) { @Override public void onComplete() { if (SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { - trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), trackListModels.tracks.get(SharedPreferencesUtils.getInt("trackPosition_stream", -1)).id); - } + if (HXMusic.getStatus().equals("READY")) { + if (!HXMusic.isPlaying()) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + initRemoteClear(); + } + } else { + trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), trackListModels.tracks.get(SharedPreferencesUtils.getInt("trackPosition_stream", -1)).id); + } + } } }); } @@ -1079,7 +1169,6 @@ public void run() { TrackFragment.reqUpdate(getApplicationContext(), getPosition); } - int delay = 800; new Handler().postDelayed(new Runnable() { @RequiresApi(api = Build.VERSION_CODES.N) @@ -1167,6 +1256,9 @@ public void run() { ShuffleInit(); RepeatInit(); + next(); + prev(); + seekBarVolume.setProgress(getVolume); if (getVolume == 0) { ivVolume.setImageResource(R.drawable.ic_round_volume_off_24); @@ -1176,7 +1268,14 @@ public void run() { } - if (getHasLyrics) { + boolean getLyrics_has; + if (!SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { + getLyrics_has = getHasLyrics; + } else { + getLyrics_has = trackListModels.tracks.get(SharedPreferencesUtils.getInt("trackPosition_stream", -1)).hasLyrics; + } + + if (getLyrics_has) { ImageViewCompat.setImageTintList(iv_lyrics, ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.rose_icon_true))); iv_lyrics.setOnClickListener(new View.OnClickListener() { @@ -1222,6 +1321,14 @@ public void onClick(View v) { //prepareMenuData(); } + if (!SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { + ivVolume.setEnabled(true); + ImageViewCompat.setImageTintList(ivVolume, ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.rose_icon_true))); + } else { + ivVolume.setEnabled(false); + ImageViewCompat.setImageTintList(ivVolume, ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.rose_icon_false))); + } + } }); } @@ -1449,8 +1556,6 @@ public void onClick(View v) { editor.putBoolean("stream_shuffle", true); editor.apply(); - Collections.shuffle(trackListModels.tracks); - ImageViewCompat.setImageTintList(ivShuffle, ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.rose_icon_true))); } }); @@ -1472,7 +1577,7 @@ public void onClick(View v) { initStream(SharedPreferencesUtils.getInt("trackPosition", -1)); trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), trackListModels.tracks.get(SharedPreferencesUtils.getInt("trackPosition_stream", -1)).id); } else { - HXMusic.resume(MainActivity.this); + sPlay(); } } @@ -1496,7 +1601,7 @@ public void onClick(View v) { initStream(SharedPreferencesUtils.getInt("trackPosition", -1)); trackInit(SharedPreferencesUtils.getString("playlist_stream", "0"), trackListModels.tracks.get(SharedPreferencesUtils.getInt("trackPosition_stream", -1)).id); } else { - HXMusic.resume(MainActivity.this); + sPlay(); } } @@ -1504,6 +1609,14 @@ public void onClick(View v) { ivPlayMini.setImageResource(R.drawable.ic_round_pause_circle_24); } }); + + if (HXMusic.getStatus().equals("READY")) { + ivPlay.setEnabled(false); + ivPlayMini.setEnabled(false); + } else { + ivPlay.setEnabled(true); + ivPlayMini.setEnabled(true); + } } public static void requestPlay() { apiServiceInterface.play() @@ -1542,7 +1655,7 @@ public void onClick(View v) { if (!SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { requestPause(); } else { - HXMusic.pause(); + sPause(); } ivPlay.setImageResource(R.drawable.ic_round_play_circle_24); @@ -1559,12 +1672,20 @@ public void onClick(View v) { if (!SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { requestPause(); } else { - HXMusic.pause(); + sPause(); } ivPlayMini.setImageResource(R.drawable.ic_round_play_circle_24); } }); + + if (HXMusic.getStatus().equals("READY")) { + ivPlay.setEnabled(false); + ivPlayMini.setEnabled(false); + } else { + ivPlay.setEnabled(true); + ivPlayMini.setEnabled(true); + } } public static void requestPause() { apiServiceInterface.pause() @@ -1870,4 +1991,15 @@ public void onBackPressed() { } + public static void sReqPrev() { + getReqPrev = true; + } + + public static void sReqNext() { + getReqNext = true; + } + + public static void sReqPlayPause() { + getReqPlayPause = true; + } } \ No newline at end of file diff --git a/app/src/main/java/com/kangtech/tauonremote/view/PlayingService.java b/app/src/main/java/com/kangtech/tauonremote/view/PlayingService.java index 39ce3d1..cc72c7c 100644 --- a/app/src/main/java/com/kangtech/tauonremote/view/PlayingService.java +++ b/app/src/main/java/com/kangtech/tauonremote/view/PlayingService.java @@ -47,7 +47,6 @@ public int onStartCommand(Intent intent, int flags, int startId) { getArtist = intent.getStringExtra("serviceArtist"); getTrackID = intent.getIntExtra("serviceTrackID", -1); - MainActivity mainActivity = new MainActivity(); runStatus(); @@ -58,23 +57,31 @@ public int onStartCommand(Intent intent, int flags, int startId) { if (!SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { MainActivity.prevRequest(); } else { - mainActivity.sPrevSong(); + MainActivity.sReqPrev(); } } else if (intent.getAction() != null && intent.getAction().equals("NEXT")) { if (!SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { MainActivity.nextRequest(); } else { - mainActivity.sNextSong(); + MainActivity.sReqNext(); } } else if (intent.getAction() != null && intent.getAction().equals("PLAY")) { switch (getStatus) { case "playing": - MainActivity.requestPause(); + if (!SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { + MainActivity.requestPause(); + } else { + MainActivity.sReqPlayPause(); + } //icon = R.drawable.ic_round_play_circle_24; break; case "paused": case "stopped": - MainActivity.requestPlay(); + if (!SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { + MainActivity.requestPlay(); + } else { + MainActivity.sReqPlayPause(); + } //icon = R.drawable.ic_round_pause_circle_24; break; } @@ -114,7 +121,12 @@ private void runStatus() { @RequiresApi(api = Build.VERSION_CODES.N) @Override public void run() { - getStatus = SharedPreferencesUtils.getString("status", ""); + if (!SharedPreferencesUtils.getBoolean("is_stream_mode", true)) { + getStatus = SharedPreferencesUtils.getString("status", ""); + } else { + getStatus = SharedPreferencesUtils.getString("sStatus", ""); + } + runStatus(); } },delay); diff --git a/app/src/main/java/com/kangtech/tauonremote/view/fragment/track/TrackFragment.java b/app/src/main/java/com/kangtech/tauonremote/view/fragment/track/TrackFragment.java index 2614fcd..cabf0aa 100644 --- a/app/src/main/java/com/kangtech/tauonremote/view/fragment/track/TrackFragment.java +++ b/app/src/main/java/com/kangtech/tauonremote/view/fragment/track/TrackFragment.java @@ -263,6 +263,7 @@ public static void reqUpdate(Context context, int getTrackId) { Toast.makeText(context, "Kosong", Toast.LENGTH_SHORT).show(); } else { recyclerView.scrollToPosition(getTrackId); + adapter.notifyDataSetChanged(); } } diff --git a/app/src/main/res/layout/nowplaying_sheet.xml b/app/src/main/res/layout/nowplaying_sheet.xml index 90e7ead..2e01e92 100644 --- a/app/src/main/res/layout/nowplaying_sheet.xml +++ b/app/src/main/res/layout/nowplaying_sheet.xml @@ -159,7 +159,9 @@ android:layout_gravity="bottom" android:background="@color/rose_bg_nowplaying" android:orientation="vertical" - android:padding="8dp"> + android:clickable="true" + android:padding="8dp" + android:focusable="true"> + android:thumb="@color/rose_bg_seekbar1" /> + android:text="00:00" + android:textColor="@color/rose_text_title" /> + android:src="@drawable/ic_round_shuffle_24" + app:tint="@color/rose_icon_true" /> + android:src="@drawable/ic_round_prev2_24" + app:tint="@color/rose_icon_true" /> + android:src="@drawable/ic_round_play_circle_24" + app:tint="@color/rose_icon_true" /> + android:src="@drawable/ic_round_next2_24" + app:tint="@color/rose_icon_true" /> + android:src="@drawable/ic_round_repeat_24" + app:tint="@color/rose_icon_true" /> diff --git a/hxaudio-custom/build.gradle b/hxaudio-custom/build.gradle index 0cb0f6e..162f9c5 100644 --- a/hxaudio-custom/build.gradle +++ b/hxaudio-custom/build.gradle @@ -8,7 +8,7 @@ android { minSdkVersion 21 targetSdkVersion 30 versionCode 23 - versionName "3.3.1" + versionName "3.3.1.01" } buildTypes { release {