diff --git a/app/build.gradle b/app/build.gradle index 4c0dbf7..413a9d9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,14 +11,15 @@ android { minSdkVersion 22 targetSdkVersion 30 versionCode 1 - versionName "1.0" + versionName "1.0 Testing" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { - minifyEnabled false + minifyEnabled true + shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 481bb43..9f0c45e 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -18,4 +18,16 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile + +#Glide +-keep public class * implements com.bumptech.glide.module.GlideModule +-keep public class * extends com.bumptech.glide.module.AppGlideModule +-keep public enum com.bumptech.glide.load.ImageHeaderParser$** { + **[] $VALUES; + public *; +} +-dontwarn com.bumptech.glide.load.resource.bitmap.VideoDecoder + +#Tauon Remote +-keep class com.kangtech.tauonremote** {*;} \ No newline at end of file diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..7849d84 Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/kangtech/tauonremote/adapter/ExpandableListAdapter.java b/app/src/main/java/com/kangtech/tauonremote/adapter/ExpandableListAdapter.java index 2e4ba4a..7d66dd5 100644 --- a/app/src/main/java/com/kangtech/tauonremote/adapter/ExpandableListAdapter.java +++ b/app/src/main/java/com/kangtech/tauonremote/adapter/ExpandableListAdapter.java @@ -1,25 +1,42 @@ package com.kangtech.tauonremote.adapter; +import android.app.Activity; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Typeface; +import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; +import android.widget.LinearLayout; import android.widget.TextView; +import androidx.core.view.GravityCompat; +import androidx.navigation.NavController; +import androidx.navigation.NavGraph; +import androidx.navigation.NavInflater; +import androidx.navigation.Navigation; + +import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.kangtech.tauonremote.R; import com.kangtech.tauonremote.model.playlist.PlaylistData; import com.kangtech.tauonremote.model.playlist.PlaylistModel; +import com.kangtech.tauonremote.view.MainActivity; import java.util.HashMap; import java.util.List; +import static android.content.Context.MODE_PRIVATE; + public class ExpandableListAdapter extends BaseExpandableListAdapter { private Context _context; private List _listDataHeader; private HashMap> _listdataChild; + private SharedPreferences.Editor editor; + public ExpandableListAdapter (Context context, List listDataHeader, HashMap> listChildData) { this._context = context; @@ -49,8 +66,31 @@ public View getChildView(int groupPosition, int childPosition, boolean isLastChi TextView tvListChild = (TextView) convertView.findViewById(R.id.lblListItem); tvListChild.setText(childText); - return convertView; + NavController navController = Navigation.findNavController((Activity) _context, R.id.nav_host_fragment); + Bundle bundle = new Bundle(); + bundle.putBoolean("FROM_MENU_LIST_TRACK", true); + bundle.putString("PlaylistID", _listdataChild.get(_listDataHeader.get(groupPosition)).get(groupPosition).playlists.get(childPosition).id); + bundle.putString("PlaylistName", _listdataChild.get(_listDataHeader.get(groupPosition)).get(groupPosition).playlists.get(childPosition).name); + + LinearLayout ll_child = convertView.findViewById(R.id.ll_child_list); + ll_child.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + navController.navigate(R.id.nav_track, bundle); + + MainActivity.drawer.closeDrawer(GravityCompat.START); + if (MainActivity.bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) { + MainActivity.bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + } + + editor = _context.getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); + editor.putString("titleToolbar", _listdataChild.get(_listDataHeader.get(groupPosition)).get(groupPosition).playlists.get(childPosition).name); + editor.apply(); + } + }); + + return convertView; } @Override 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 ae71dc8..89a88ca 100644 --- a/app/src/main/java/com/kangtech/tauonremote/adapter/TrackListAdapter.java +++ b/app/src/main/java/com/kangtech/tauonremote/adapter/TrackListAdapter.java @@ -34,20 +34,24 @@ import java.util.List; import java.util.Objects; +import io.reactivex.Observer; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import okhttp3.ResponseBody; public class TrackListAdapter extends RecyclerView.Adapter implements Filterable { private TrackListModel trackListModels; private TrackListModel getTrackListModelsFiltered; private final Context context; - private int getPosition; + private final String playlistID; - public TrackListAdapter(Context context, TrackListModel trackListModels) { + public TrackListAdapter(Context context, TrackListModel trackListModels, String playlistID) { this.context = context; this.trackListModels = trackListModels; this.getTrackListModelsFiltered = trackListModels; + this.playlistID = playlistID; } @NonNull @@ -70,22 +74,71 @@ public void onBindViewHolder(@NonNull TrackListAdapter.TrackListViewHolder holde .dontAnimate() .into(holder.ivCover); - if (trackListModels.tracks.get(position).position == SharedPreferencesUtils.getInt("TrackPosition", 0)) { - holder.llTrack.setBackgroundColor(context.getResources().getColor(R.color.rose_bg_seekbar1)); - } else { - holder.llTrack.setBackgroundColor(context.getResources().getColor(R.color.rose_bg_list)); + if (playlistID.equals(SharedPreferencesUtils.getString("playlistID", "0"))) { + if (trackListModels.tracks.get(position).position == SharedPreferencesUtils.getInt("TrackPosition", 0)) { + holder.llTrack.setBackgroundColor(context.getResources().getColor(R.color.rose_bg_seekbar1)); + } else { + holder.llTrack.setBackgroundColor(context.getResources().getColor(R.color.rose_bg_list)); + } } holder.llTrack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - holder.apiServiceInterface.start(SharedPreferencesUtils.getString("playlistID", "0"), trackListModels.tracks.get(position).position) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + if (playlistID.equals(SharedPreferencesUtils.getString("playlistID", "0"))) { + holder.apiServiceInterface.start(SharedPreferencesUtils.getString("playlistID", "0"), trackListModels.tracks.get(position).position) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + } else { + holder.apiServiceInterface.start(playlistID, trackListModels.tracks.get(position).position) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + } - MainActivity.bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); - MainActivity.navController.navigate(R.id.nav_album); + //MainActivity.bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); + //MainActivity.navController.navigate(R.id.nav_album); } }); } diff --git a/app/src/main/java/com/kangtech/tauonremote/view/AddServer.java b/app/src/main/java/com/kangtech/tauonremote/view/AddServer.java index c686785..45b4151 100644 --- a/app/src/main/java/com/kangtech/tauonremote/view/AddServer.java +++ b/app/src/main/java/com/kangtech/tauonremote/view/AddServer.java @@ -67,8 +67,15 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_server); - nettask = new NetworkSniffTask(getApplicationContext()); - nettask.execute(); + if (SharedPreferencesUtils.getBoolean("set_server", false)) { + Intent intent = new Intent(this, MainActivity.class); + startActivity(intent); + finish(); + } else { + nettask = new NetworkSniffTask(getApplicationContext()); + nettask.execute(); + } + refreshLayout = findViewById(R.id.srl_server); toolbar = findViewById(R.id.toolbar_addserver); @@ -122,12 +129,6 @@ public void run() { refreshLayout.setRefreshing(true); refreshLayout.setEnabled(false); - if (SharedPreferencesUtils.getBoolean("set_server", false)) { - Intent intent = new Intent(this, MainActivity.class); - startActivity(intent); - finish(); - } - dataSet = new ArrayList<>(); 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 36374aa..5431503 100644 --- a/app/src/main/java/com/kangtech/tauonremote/view/MainActivity.java +++ b/app/src/main/java/com/kangtech/tauonremote/view/MainActivity.java @@ -52,6 +52,7 @@ import com.google.android.material.navigation.NavigationView; import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayoutMediator; +import com.kangtech.tauonremote.BuildConfig; import com.kangtech.tauonremote.R; import com.kangtech.tauonremote.adapter.ExpandableListAdapter; import com.kangtech.tauonremote.adapter.MainTabAdapter; @@ -76,6 +77,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +import okhttp3.ResponseBody; public class MainActivity extends AppCompatActivity { @@ -108,9 +110,7 @@ public class MainActivity extends AppCompatActivity { private AppBarConfiguration mAppBarConfiguration; Toolbar toolbar; - DrawerLayout drawer; - - Menu submenu; + public static DrawerLayout drawer; ExpandableListAdapter expandableListAdapter; ExpandableListView expandableListView; @@ -134,6 +134,9 @@ public class MainActivity extends AppCompatActivity { FragmentManager fm = getSupportFragmentManager(); public static NavController navController; + private TextView tvHeaderIP, tvHeaderVersion; + private ImageView ivHeaderSettings; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -154,6 +157,8 @@ protected void onCreate(Bundle savedInstanceState) { NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); NavigationUI.setupWithNavController(navigationView, navController); + View header = navigationView.getHeaderView(0); + apiServiceInterface = Server.getApiServiceInterface(); @@ -178,8 +183,15 @@ protected void onCreate(Bundle savedInstanceState) { cl_cover = findViewById(R.id.cl_cover); tv_lyrics = findViewById(R.id.tv_lyric); iv_lyrics = findViewById(R.id.iv_lyric); + tvHeaderIP = header.findViewById(R.id.tv_header_ip); + tvHeaderVersion = header.findViewById(R.id.tv_header_version); + ivHeaderSettings = header.findViewById(R.id.iv_header_settings); expandableListView = findViewById(R.id.expandableListView); + + listDataHeader = new ArrayList(); + listdataChild = new HashMap>(); + prepareMenuData(); @@ -197,6 +209,10 @@ protected void onCreate(Bundle savedInstanceState) { editor.apply(); + tvHeaderIP.setText(SharedPreferencesUtils.getString("ip", "127.0.0.1")); + tvHeaderVersion.setText("v" + BuildConfig.VERSION_NAME); + + seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { @@ -213,7 +229,27 @@ public void onStopTrackingTouch(SeekBar seekBar) { apiServiceInterface.seek1k(valueProgress) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); } }); @@ -240,7 +276,27 @@ public void onStopTrackingTouch(SeekBar seekBar) { apiServiceInterface.setvolume(valueProgressVol) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); } }); @@ -310,7 +366,10 @@ public void onClick(View v) { llMenuTrack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - navController.navigate(R.id.nav_track); + Bundle bundle = new Bundle(); + bundle.putBoolean("FROM_MENU_LIST_TRACK", false); + navController.navigate(R.id.nav_track, bundle); + drawer.closeDrawer(GravityCompat.START); editor = getSharedPreferences("tauon_remote", MODE_PRIVATE).edit(); editor.putString("titleToolbar", "Track"); @@ -362,8 +421,6 @@ public void onSubscribe(Disposable d) { @Override public void onNext(@NonNull PlaylistModel playlistModel) { - listDataHeader = new ArrayList(); - listdataChild = new HashMap>(); listDataHeader.add("Playlist"); @@ -402,21 +459,15 @@ public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition return false; } }); - + /* expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { - - /*if (playlist_List.get(0) != null) { - PlaylistData model = playlist_List.get(childPosition); - if (model.id.length() > 0) { - onBackPressed(); - } - }*/ - + Toast.makeText(MainActivity.this, "" + childPosition, Toast.LENGTH_SHORT).show(); return false; } }); + */ } private void saveTitleToolbar() { @@ -457,7 +508,27 @@ private void nextRequest() { apiServiceInterface.next() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); } private void prev() { @@ -484,7 +555,27 @@ private void prevRequest() { apiServiceInterface.back() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); } private void runStatus() { @@ -524,6 +615,7 @@ public void onNext(@NonNull StatusModel statusModel) { @Override public void onError(Throwable e) { + //Toast.makeText(MainActivity.this, "Check your IP", Toast.LENGTH_SHORT).show(); } @Override @@ -531,6 +623,10 @@ public void onComplete() { if (SharedPreferencesUtils.getInt("TrackID", -1) != getTrackId) { trackInit(getPlaylistId, getPosition); + if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.nav_track) { + TrackFragment.reqUpdate(getApplicationContext(), getPosition); + } + int delay = 2000; // 2 detik new Handler().postDelayed(new Runnable() { @@ -543,10 +639,6 @@ public void run() { editor.putInt("TrackPosition", getPosition); editor.apply(); - if (Objects.requireNonNull(navController.getCurrentDestination()).getId() == R.id.nav_track) { - //TrackFragment trackFragment = new TrackFragment(); - TrackFragment.reqUpdate(getApplicationContext(), getPosition); - } } },delay); } @@ -604,7 +696,6 @@ public void onClick(View v) { public void onClick(View v) { cl_cover.setVisibility(View.VISIBLE); cl_lyrics.setVisibility(View.GONE); - iv_lyrics.setImageResource(R.drawable.ic_round_lyric_24); } }); @@ -625,6 +716,12 @@ public void onClick(View v) { } }); } + + + if (listDataHeader.isEmpty()) { + prepareMenuData(); + } + } }); } @@ -639,7 +736,28 @@ public void onClick(View v) { apiServiceInterface.repeat() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + ImageViewCompat.setImageTintList(ivRepeat, ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.rose_icon_false))); } }); @@ -652,7 +770,27 @@ public void onClick(View v) { apiServiceInterface.repeat() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); ImageViewCompat.setImageTintList(ivRepeat, ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.rose_icon_true))); } }); @@ -669,7 +807,28 @@ public void onClick(View v) { apiServiceInterface.shuffle() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + ImageViewCompat.setImageTintList(ivShuffle, ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.rose_icon_false))); } }); @@ -682,7 +841,28 @@ public void onClick(View v) { apiServiceInterface.shuffle() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + ImageViewCompat.setImageTintList(ivShuffle, ColorStateList.valueOf(ContextCompat.getColor(getApplicationContext(), R.color.rose_icon_true))); } }); @@ -697,6 +877,7 @@ private void play() { @Override public void onClick(View v) { requestPlay(); + ivPlay.setImageResource(R.drawable.ic_round_pause_circle_24); } }); @@ -709,6 +890,7 @@ public void onClick(View v) { @Override public void onClick(View v) { requestPlay(); + ivPlayMini.setImageResource(R.drawable.ic_round_pause_circle_24); } }); } @@ -716,7 +898,27 @@ private void requestPlay() { apiServiceInterface.play() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); } private void pause() { @@ -727,6 +929,7 @@ private void pause() { @Override public void onClick(View v) { requestPause(); + ivPlay.setImageResource(R.drawable.ic_round_play_circle_24); } }); @@ -738,6 +941,7 @@ public void onClick(View v) { @Override public void onClick(View v) { requestPause(); + ivPlayMini.setImageResource(R.drawable.ic_round_play_circle_24); } }); } @@ -745,7 +949,27 @@ private void requestPause() { apiServiceInterface.pause() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(); + .subscribe(new Observer() { + @Override + public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) { + + } + + @Override + public void onNext(@io.reactivex.annotations.NonNull ResponseBody responseBody) { + + } + + @Override + public void onError(@io.reactivex.annotations.NonNull Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); } @@ -799,6 +1023,8 @@ public void onComplete() { .into(ivCover); lyricsInit(getTrackId); + + } }); 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 ec60005..8d26ab7 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 @@ -1,10 +1,12 @@ package com.kangtech.tauonremote.view.fragment.track; import android.content.Context; +import android.content.Intent; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.appcompat.widget.SearchView; +import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -48,6 +50,7 @@ public class TrackFragment extends Fragment { private static RecyclerView recyclerView; private TrackListAdapter adapter; private TrackListModel trackListModels; + private String PlaylistID; public TrackFragment() { @@ -71,7 +74,17 @@ public void onCreate(Bundle savedInstanceState) { apiServiceInterface = Server.getApiServiceInterface(); - TrackListInit(SharedPreferencesUtils.getString("playlistID", "0")); + Toolbar toolbar = requireActivity().findViewById(R.id.toolbar); + + if (requireArguments().getBoolean("FROM_MENU_LIST_TRACK")) { + PlaylistID = requireArguments().getString("PlaylistID"); + TrackListInit(PlaylistID); + toolbar.setTitle(requireArguments().getString("PlaylistName")); + } else { + PlaylistID = SharedPreferencesUtils.getString("playlistID", "0"); + TrackListInit(PlaylistID); + } + } public void TrackListInit(String playlist) { @@ -95,7 +108,10 @@ public void onError(Throwable e) { @Override public void onComplete() { recyclerViewInit(); - recyclerView.scrollToPosition(SharedPreferencesUtils.getInt("TrackPosition", -1)); + + if (PlaylistID.equals(SharedPreferencesUtils.getString("playlistID", "0"))) { + recyclerView.scrollToPosition(SharedPreferencesUtils.getInt("TrackPosition", -1)); + } } }); } @@ -103,7 +119,7 @@ public void onComplete() { private void recyclerViewInit() { recyclerView = requireActivity().findViewById(R.id.rv_tracklist); - adapter = new TrackListAdapter(getContext(), trackListModels); + adapter = new TrackListAdapter(getContext(), trackListModels, PlaylistID); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(requireContext()); @@ -137,7 +153,7 @@ public boolean onQueryTextSubmit(String query) { public boolean onQueryTextChange(String newText) { adapter.getFilter().filter(newText); if (newText.isEmpty()) { - TrackListInit(SharedPreferencesUtils.getString("playlistID", "0")); + TrackListInit(PlaylistID); } return true; } @@ -146,11 +162,11 @@ public boolean onQueryTextChange(String newText) { super.onCreateOptionsMenu(menu, inflater); } - public static void reqUpdate(Context context, int getPlaylistId) { - if (getPlaylistId == -1) { + public static void reqUpdate(Context context, int getTrackId) { + if (getTrackId == -1) { Toast.makeText(context, "Kosong", Toast.LENGTH_SHORT).show(); } else { - recyclerView.scrollToPosition(getPlaylistId); + recyclerView.scrollToPosition(getTrackId); } } diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 07d5da9..ca3826a 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,170 +1,74 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns:android="http://schemas.android.com/apk/res/android"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_round_settings_24.xml b/app/src/main/res/drawable/ic_round_settings_24.xml new file mode 100644 index 0000000..6da10fa --- /dev/null +++ b/app/src/main/res/drawable/ic_round_settings_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/font/palanquin_bold.ttf b/app/src/main/res/font/palanquin_bold.ttf deleted file mode 100644 index 3090bea..0000000 Binary files a/app/src/main/res/font/palanquin_bold.ttf and /dev/null differ diff --git a/app/src/main/res/font/poppins_bold.ttf b/app/src/main/res/font/poppins_bold.ttf deleted file mode 100644 index ff8a3b2..0000000 Binary files a/app/src/main/res/font/poppins_bold.ttf and /dev/null differ diff --git a/app/src/main/res/layout/activity_add_server.xml b/app/src/main/res/layout/activity_add_server.xml index 3e12551..65b41dd 100644 --- a/app/src/main/res/layout/activity_add_server.xml +++ b/app/src/main/res/layout/activity_add_server.xml @@ -38,7 +38,6 @@ diff --git a/app/src/main/res/layout/custom_menu.xml b/app/src/main/res/layout/custom_menu.xml index de79083..46f96fe 100644 --- a/app/src/main/res/layout/custom_menu.xml +++ b/app/src/main/res/layout/custom_menu.xml @@ -15,6 +15,9 @@ android:id="@+id/ll_c_album" android:layout_width="match_parent" android:layout_height="wrap_content" + android:clickable="true" + android:focusable="true" + android:foreground="?attr/selectableItemBackground" android:orientation="horizontal"> diff --git a/app/src/main/res/layout/fragment_album.xml b/app/src/main/res/layout/fragment_album.xml index c7d2c3e..0e41ff4 100644 --- a/app/src/main/res/layout/fragment_album.xml +++ b/app/src/main/res/layout/fragment_album.xml @@ -9,6 +9,9 @@ + android:textColor="@color/rose_text_title" + android:gravity="center|top" + android:textSize="24sp" + android:text="Soon" /> \ No newline at end of file diff --git a/app/src/main/res/layout/list_group_child.xml b/app/src/main/res/layout/list_group_child.xml index 8907448..c933ac0 100644 --- a/app/src/main/res/layout/list_group_child.xml +++ b/app/src/main/res/layout/list_group_child.xml @@ -1,8 +1,12 @@ diff --git a/app/src/main/res/layout/list_server.xml b/app/src/main/res/layout/list_server.xml index 725e23a..81d9a07 100644 --- a/app/src/main/res/layout/list_server.xml +++ b/app/src/main/res/layout/list_server.xml @@ -3,8 +3,11 @@ android:id="@+id/ll_list_server" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" - android:background="@color/rose_bg_list" android:padding="8dp" + android:background="@color/rose_bg_list" + android:clickable="true" + android:focusable="true" + android:foreground="?attr/selectableItemBackground" android:layout_height="wrap_content"> diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml index 0a00f93..038a943 100644 --- a/app/src/main/res/layout/nav_header_main.xml +++ b/app/src/main/res/layout/nav_header_main.xml @@ -20,16 +20,33 @@ android:paddingTop="@dimen/nav_header_vertical_spacing" app:srcCompat="@mipmap/ic_launcher_round" /> - + android:gravity="center" + android:orientation="horizontal"> + + + + + + android:textColor="@color/rose_text_artist" /> \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index eca70cf..c4a603d 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index eca70cf..c4a603d 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index a571e60..7313be4 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..f19f40b Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index 61da551..7313be4 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index c41dd28..b239433 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..c6ae899 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png index db5080a..b239433 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index 6dba46d..df2ca77 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..b419372 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png index da31a87..df2ca77 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 15ac681..67b04e4 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..3352e25 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index b216f2d..67b04e4 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index f25a419..d76f227 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..d3fbb2a Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index e96783c..d76f227 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index de72868..66e27f4 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -12,6 +12,7 @@ ?attr/colorPrimaryVariant + @color/rose_icon_true