Add java8 support
This commit is contained in:
parent
723912d928
commit
7793cc822d
44 changed files with 512 additions and 929 deletions
|
|
@ -39,7 +39,7 @@ static def gitBranch() {
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 27
|
compileSdkVersion 27
|
||||||
buildToolsVersion '27.0.0'
|
buildToolsVersion '27.0.2'
|
||||||
dataBinding {
|
dataBinding {
|
||||||
enabled = true
|
enabled = true
|
||||||
}
|
}
|
||||||
|
|
@ -76,6 +76,10 @@ android {
|
||||||
disable 'InvalidPackage'
|
disable 'InvalidPackage'
|
||||||
abortOnError false
|
abortOnError false
|
||||||
}
|
}
|
||||||
|
compileOptions {
|
||||||
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
|
|
@ -83,8 +87,7 @@ ext {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
|
|
||||||
implementation "com.android.support:support-compat:$supportLibVersion"
|
implementation "com.android.support:support-compat:$supportLibVersion"
|
||||||
implementation "com.android.support:support-core-utils:$supportLibVersion"
|
implementation "com.android.support:support-core-utils:$supportLibVersion"
|
||||||
implementation "com.android.support:support-core-ui:$supportLibVersion"
|
implementation "com.android.support:support-core-ui:$supportLibVersion"
|
||||||
|
|
@ -101,7 +104,6 @@ dependencies {
|
||||||
implementation "com.android.support:percent:$supportLibVersion"
|
implementation "com.android.support:percent:$supportLibVersion"
|
||||||
implementation "com.android.support:preference-v7:$supportLibVersion"
|
implementation "com.android.support:preference-v7:$supportLibVersion"
|
||||||
implementation "com.android.support:preference-v14:$supportLibVersion"
|
implementation "com.android.support:preference-v14:$supportLibVersion"
|
||||||
|
|
||||||
implementation 'com.github.kabouzeid:app-theme-helper:1.3.7'
|
implementation 'com.github.kabouzeid:app-theme-helper:1.3.7'
|
||||||
implementation 'com.github.kabouzeid:RecyclerView-FastScroll:1.0.16-kmod'
|
implementation 'com.github.kabouzeid:RecyclerView-FastScroll:1.0.16-kmod'
|
||||||
implementation 'com.github.kabouzeid:SeekArc:1.2-kmod'
|
implementation 'com.github.kabouzeid:SeekArc:1.2-kmod'
|
||||||
|
|
@ -120,17 +122,13 @@ dependencies {
|
||||||
implementation 'me.zhanghai.android.materialprogressbar:library:1.4.1'
|
implementation 'me.zhanghai.android.materialprogressbar:library:1.4.1'
|
||||||
implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
|
implementation 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
|
||||||
implementation 'com.jakewharton:butterknife:8.6.0'
|
implementation 'com.jakewharton:butterknife:8.6.0'
|
||||||
|
|
||||||
implementation('com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.11.0@aar') {
|
implementation('com.h6ah4i.android.widget.advrecyclerview:advrecyclerview:0.11.0@aar') {
|
||||||
transitive = true
|
transitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
implementation 'com.crashlytics.sdk.android:crashlytics:2.8.0'
|
implementation 'com.crashlytics.sdk.android:crashlytics:2.8.0'
|
||||||
implementation('com.crashlytics.sdk.android:answers:1.3.13@aar') {
|
implementation('com.crashlytics.sdk.android:answers:1.3.13@aar') {
|
||||||
transitive = true
|
transitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
|
|
||||||
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
|
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -190,30 +190,24 @@ public class PlaylistAdapter extends AbsMultiSelectAdapter<PlaylistAdapter.ViewH
|
||||||
}
|
}
|
||||||
|
|
||||||
if (menu != null) {
|
if (menu != null) {
|
||||||
menu.setOnClickListener(new View.OnClickListener() {
|
menu.setOnClickListener(view -> {
|
||||||
@Override
|
final Playlist playlist = dataSet.get(getAdapterPosition());
|
||||||
public void onClick(View view) {
|
final PopupMenu popupMenu = new PopupMenu(activity, view);
|
||||||
final Playlist playlist = dataSet.get(getAdapterPosition());
|
popupMenu.inflate(getItemViewType() == SMART_PLAYLIST ? R.menu.menu_item_smart_playlist : R.menu.menu_item_playlist);
|
||||||
final PopupMenu popupMenu = new PopupMenu(activity, view);
|
if (playlist instanceof LastAddedPlaylist) {
|
||||||
popupMenu.inflate(getItemViewType() == SMART_PLAYLIST ? R.menu.menu_item_smart_playlist : R.menu.menu_item_playlist);
|
popupMenu.getMenu().findItem(R.id.action_clear_playlist).setVisible(false);
|
||||||
if (playlist instanceof LastAddedPlaylist) {
|
|
||||||
popupMenu.getMenu().findItem(R.id.action_clear_playlist).setVisible(false);
|
|
||||||
}
|
|
||||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
|
||||||
@Override
|
|
||||||
public boolean onMenuItemClick(@NonNull MenuItem item) {
|
|
||||||
if (item.getItemId() == R.id.action_clear_playlist) {
|
|
||||||
if (playlist instanceof AbsSmartPlaylist) {
|
|
||||||
ClearSmartPlaylistDialog.create((AbsSmartPlaylist) playlist).show(activity.getSupportFragmentManager(), "CLEAR_SMART_PLAYLIST_" + playlist.name);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return PlaylistMenuHelper.handleMenuClick(
|
|
||||||
activity, dataSet.get(getAdapterPosition()), item);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
popupMenu.show();
|
|
||||||
}
|
}
|
||||||
|
popupMenu.setOnMenuItemClickListener(item -> {
|
||||||
|
if (item.getItemId() == R.id.action_clear_playlist) {
|
||||||
|
if (playlist instanceof AbsSmartPlaylist) {
|
||||||
|
ClearSmartPlaylistDialog.create((AbsSmartPlaylist) playlist).show(activity.getSupportFragmentManager(), "CLEAR_SMART_PLAYLIST_" + playlist.name);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return PlaylistMenuHelper.handleMenuClick(
|
||||||
|
activity, dataSet.get(getAdapterPosition()), item);
|
||||||
|
});
|
||||||
|
popupMenu.show();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -166,13 +166,10 @@ public class SongFileAdapter extends AbsMultiSelectAdapter<SongFileAdapter.ViewH
|
||||||
public ViewHolder(View itemView) {
|
public ViewHolder(View itemView) {
|
||||||
super(itemView);
|
super(itemView);
|
||||||
if (menu != null && callbacks != null) {
|
if (menu != null && callbacks != null) {
|
||||||
menu.setOnClickListener(new View.OnClickListener() {
|
menu.setOnClickListener(v -> {
|
||||||
@Override
|
int position = getAdapterPosition();
|
||||||
public void onClick(View v) {
|
if (isPositionInRange(position)) {
|
||||||
int position = getAdapterPosition();
|
callbacks.onFileMenuClicked(dataSet.get(position), v);
|
||||||
if (isPositionInRange(position)) {
|
|
||||||
callbacks.onFileMenuClicked(dataSet.get(position), v);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -114,22 +114,16 @@ public class ArtistSongAdapter extends ArrayAdapter<Song> implements MaterialCab
|
||||||
});
|
});
|
||||||
|
|
||||||
convertView.setActivated(isChecked(song));
|
convertView.setActivated(isChecked(song));
|
||||||
convertView.setOnClickListener(new View.OnClickListener() {
|
convertView.setOnClickListener(view -> {
|
||||||
@Override
|
if (isInQuickSelectMode()) {
|
||||||
public void onClick(View view) {
|
toggleChecked(song);
|
||||||
if (isInQuickSelectMode()) {
|
} else {
|
||||||
toggleChecked(song);
|
MusicPlayerRemote.openQueue(dataSet, position, true);
|
||||||
} else {
|
|
||||||
MusicPlayerRemote.openQueue(dataSet, position, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
convertView.setOnLongClickListener(new View.OnLongClickListener() {
|
convertView.setOnLongClickListener(view -> {
|
||||||
@Override
|
toggleChecked(song);
|
||||||
public boolean onLongClick(View view) {
|
return true;
|
||||||
toggleChecked(song);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return convertView;
|
return convertView;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v7.graphics.Palette;
|
import android.support.v7.graphics.Palette;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v7.graphics.Palette;
|
import android.support.v7.graphics.Palette;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ import android.content.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.drawable.BitmapDrawable;
|
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v7.graphics.Palette;
|
import android.support.v7.graphics.Palette;
|
||||||
|
|
|
||||||
|
|
@ -49,19 +49,16 @@ public class AddToPlaylistDialog extends DialogFragment {
|
||||||
return new MaterialDialog.Builder(getActivity())
|
return new MaterialDialog.Builder(getActivity())
|
||||||
.title(R.string.add_playlist_title)
|
.title(R.string.add_playlist_title)
|
||||||
.items(playlistNames)
|
.items(playlistNames)
|
||||||
.itemsCallback(new MaterialDialog.ListCallback() {
|
.itemsCallback((materialDialog, view, i, charSequence) -> {
|
||||||
@Override
|
//noinspection unchecked
|
||||||
public void onSelection(@NonNull MaterialDialog materialDialog, View view, int i, CharSequence charSequence) {
|
final ArrayList<Song> songs = getArguments().getParcelableArrayList("songs");
|
||||||
//noinspection unchecked
|
if (songs == null) return;
|
||||||
final ArrayList<Song> songs = getArguments().getParcelableArrayList("songs");
|
if (i == 0) {
|
||||||
if (songs == null) return;
|
materialDialog.dismiss();
|
||||||
if (i == 0) {
|
CreatePlaylistDialog.create(songs).show(getActivity().getSupportFragmentManager(), "ADD_TO_PLAYLIST");
|
||||||
materialDialog.dismiss();
|
} else {
|
||||||
CreatePlaylistDialog.create(songs).show(getActivity().getSupportFragmentManager(), "ADD_TO_PLAYLIST");
|
materialDialog.dismiss();
|
||||||
} else {
|
PlaylistsUtil.addToPlaylist(getActivity(), songs, playlists.get(i - 1).id, true);
|
||||||
materialDialog.dismiss();
|
|
||||||
PlaylistsUtil.addToPlaylist(getActivity(), songs, playlists.get(i - 1).id, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|
|
||||||
|
|
@ -98,19 +98,11 @@ public class BlacklistFolderChooserDialog extends DialogFragment implements Mate
|
||||||
.items((CharSequence[]) getContentsArray())
|
.items((CharSequence[]) getContentsArray())
|
||||||
.itemsCallback(this)
|
.itemsCallback(this)
|
||||||
.autoDismiss(false)
|
.autoDismiss(false)
|
||||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
.onPositive((dialog, which) -> {
|
||||||
@Override
|
dismiss();
|
||||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
callback.onFolderSelection(BlacklistFolderChooserDialog.this, parentFolder);
|
||||||
dismiss();
|
|
||||||
callback.onFolderSelection(BlacklistFolderChooserDialog.this, parentFolder);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.onNegative(new MaterialDialog.SingleButtonCallback() {
|
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction) {
|
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
.onNegative((materialDialog, dialogAction) -> dismiss())
|
||||||
.positiveText(R.string.add_action)
|
.positiveText(R.string.add_action)
|
||||||
.negativeText(android.R.string.cancel);
|
.negativeText(android.R.string.cancel);
|
||||||
if (File.pathSeparator.equals(initialPath)) {
|
if (File.pathSeparator.equals(initialPath)) {
|
||||||
|
|
|
||||||
|
|
@ -54,12 +54,9 @@ public class ChangelogDialog extends DialogFragment {
|
||||||
.title(R.string.changelog)
|
.title(R.string.changelog)
|
||||||
.customView(customView, false)
|
.customView(customView, false)
|
||||||
.positiveText(android.R.string.ok)
|
.positiveText(android.R.string.ok)
|
||||||
.showListener(new DialogInterface.OnShowListener() {
|
.showListener(dialog1 -> {
|
||||||
@Override
|
if (getActivity() != null)
|
||||||
public void onShow(DialogInterface dialog) {
|
setChangelogRead(getActivity());
|
||||||
if (getActivity() != null)
|
|
||||||
setChangelogRead(getActivity());
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,14 +39,11 @@ public class ClearSmartPlaylistDialog extends DialogFragment {
|
||||||
.content(content)
|
.content(content)
|
||||||
.positiveText(R.string.clear_action)
|
.positiveText(R.string.clear_action)
|
||||||
.negativeText(android.R.string.cancel)
|
.negativeText(android.R.string.cancel)
|
||||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
.onPositive((dialog, which) -> {
|
||||||
@Override
|
if (getActivity() == null) {
|
||||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
return;
|
||||||
if (getActivity() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
playlist.clear(getActivity());
|
|
||||||
}
|
}
|
||||||
|
playlist.clear(getActivity());
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,26 +54,23 @@ public class CreatePlaylistDialog extends DialogFragment {
|
||||||
.inputType(InputType.TYPE_CLASS_TEXT |
|
.inputType(InputType.TYPE_CLASS_TEXT |
|
||||||
InputType.TYPE_TEXT_VARIATION_PERSON_NAME |
|
InputType.TYPE_TEXT_VARIATION_PERSON_NAME |
|
||||||
InputType.TYPE_TEXT_FLAG_CAP_WORDS)
|
InputType.TYPE_TEXT_FLAG_CAP_WORDS)
|
||||||
.input(R.string.playlist_name_empty, 0, false, new MaterialDialog.InputCallback() {
|
.input(R.string.playlist_name_empty, 0, false, (materialDialog, charSequence) -> {
|
||||||
@Override
|
if (getActivity() == null)
|
||||||
public void onInput(@NonNull MaterialDialog materialDialog, @NonNull CharSequence charSequence) {
|
return;
|
||||||
if (getActivity() == null)
|
final String name = charSequence.toString().trim();
|
||||||
return;
|
if (!name.isEmpty()) {
|
||||||
final String name = charSequence.toString().trim();
|
if (!PlaylistsUtil.doesPlaylistExist(getActivity(), name)) {
|
||||||
if (!name.isEmpty()) {
|
final int playlistId = PlaylistsUtil.createPlaylist(getActivity(), name);
|
||||||
if (!PlaylistsUtil.doesPlaylistExist(getActivity(), name)) {
|
if (getActivity() != null) {
|
||||||
final int playlistId = PlaylistsUtil.createPlaylist(getActivity(), name);
|
//noinspection unchecked
|
||||||
if (getActivity() != null) {
|
ArrayList<Song> songs = getArguments().getParcelableArrayList(SONGS);
|
||||||
//noinspection unchecked
|
if (songs != null && !songs.isEmpty()) {
|
||||||
ArrayList<Song> songs = getArguments().getParcelableArrayList(SONGS);
|
PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId, true);
|
||||||
if (songs != null && !songs.isEmpty()) {
|
|
||||||
PlaylistsUtil.addToPlaylist(getActivity(), songs, playlistId, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
Toast.makeText(getActivity(), getActivity().getResources().getString(
|
|
||||||
R.string.playlist_exists, name), Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Toast.makeText(getActivity(), getActivity().getResources().getString(
|
||||||
|
R.string.playlist_exists, name), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -55,13 +55,10 @@ public class DeletePlaylistDialog extends DialogFragment {
|
||||||
.content(content)
|
.content(content)
|
||||||
.positiveText(R.string.delete_action)
|
.positiveText(R.string.delete_action)
|
||||||
.negativeText(android.R.string.cancel)
|
.negativeText(android.R.string.cancel)
|
||||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
.onPositive((dialog, which) -> {
|
||||||
@Override
|
if (getActivity() == null)
|
||||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
return;
|
||||||
if (getActivity() == null)
|
PlaylistsUtil.deletePlaylists(getActivity(), playlists);
|
||||||
return;
|
|
||||||
PlaylistsUtil.deletePlaylists(getActivity(), playlists);
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,13 +54,10 @@ public class DeleteSongsDialog extends DialogFragment {
|
||||||
.content(content)
|
.content(content)
|
||||||
.positiveText(R.string.delete_action)
|
.positiveText(R.string.delete_action)
|
||||||
.negativeText(android.R.string.cancel)
|
.negativeText(android.R.string.cancel)
|
||||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
.onPositive((dialog, which) -> {
|
||||||
@Override
|
if (getActivity() == null)
|
||||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
return;
|
||||||
if (getActivity() == null)
|
MusicUtil.deleteTracks(getActivity(), songs);
|
||||||
return;
|
|
||||||
MusicUtil.deleteTracks(getActivity(), songs);
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -211,19 +211,9 @@ public class DonationsDialog extends DialogFragment implements BillingProcessor.
|
||||||
strikeThrough(viewHolder.text, purchased);
|
strikeThrough(viewHolder.text, purchased);
|
||||||
strikeThrough(viewHolder.price, purchased);
|
strikeThrough(viewHolder.price, purchased);
|
||||||
|
|
||||||
convertView.setOnTouchListener(new View.OnTouchListener() {
|
convertView.setOnTouchListener((v, event) -> purchased);
|
||||||
@Override
|
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
|
||||||
return purchased;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
convertView.setOnClickListener(new View.OnClickListener() {
|
convertView.setOnClickListener(v -> donationsDialog.donate(position));
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
donationsDialog.donate(position);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return convertView;
|
return convertView;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,13 +54,10 @@ public class RemoveFromPlaylistDialog extends DialogFragment {
|
||||||
.content(content)
|
.content(content)
|
||||||
.positiveText(R.string.remove_action)
|
.positiveText(R.string.remove_action)
|
||||||
.negativeText(android.R.string.cancel)
|
.negativeText(android.R.string.cancel)
|
||||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
.onPositive((dialog, which) -> {
|
||||||
@Override
|
if (getActivity() == null)
|
||||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
return;
|
||||||
if (getActivity() == null)
|
PlaylistsUtil.removeFromPlaylist(getActivity(), songs);
|
||||||
return;
|
|
||||||
PlaylistsUtil.removeFromPlaylist(getActivity(), songs);
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,14 +38,11 @@ public class RenamePlaylistDialog extends DialogFragment {
|
||||||
InputType.TYPE_TEXT_VARIATION_PERSON_NAME |
|
InputType.TYPE_TEXT_VARIATION_PERSON_NAME |
|
||||||
InputType.TYPE_TEXT_FLAG_CAP_WORDS)
|
InputType.TYPE_TEXT_FLAG_CAP_WORDS)
|
||||||
.input(getString(R.string.playlist_name_empty), PlaylistsUtil.getNameForPlaylist(getActivity(), playlistId), false,
|
.input(getString(R.string.playlist_name_empty), PlaylistsUtil.getNameForPlaylist(getActivity(), playlistId), false,
|
||||||
new MaterialDialog.InputCallback() {
|
(materialDialog, charSequence) -> {
|
||||||
@Override
|
final String name = charSequence.toString().trim();
|
||||||
public void onInput(@NonNull MaterialDialog materialDialog, @NonNull CharSequence charSequence) {
|
if (!name.isEmpty()) {
|
||||||
final String name = charSequence.toString().trim();
|
long playlistId1 = getArguments().getLong(PLAYLIST_ID);
|
||||||
if (!name.isEmpty()) {
|
PlaylistsUtil.renamePlaylist(getActivity(), playlistId1, name);
|
||||||
long playlistId = getArguments().getLong(PLAYLIST_ID);
|
|
||||||
PlaylistsUtil.renamePlaylist(getActivity(), playlistId, name);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|
|
||||||
|
|
@ -55,51 +55,42 @@ public class SleepTimerDialog extends DialogFragment {
|
||||||
materialDialog = new MaterialDialog.Builder(getActivity())
|
materialDialog = new MaterialDialog.Builder(getActivity())
|
||||||
.title(getActivity().getResources().getString(R.string.action_sleep_timer))
|
.title(getActivity().getResources().getString(R.string.action_sleep_timer))
|
||||||
.positiveText(R.string.action_set)
|
.positiveText(R.string.action_set)
|
||||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
.onPositive((dialog, which) -> {
|
||||||
@Override
|
if (getActivity() == null) {
|
||||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
return;
|
||||||
if (getActivity() == null) {
|
}
|
||||||
return;
|
if (!App.isProVersion()) {
|
||||||
}
|
Toast.makeText(getActivity(), getString(R.string.sleep_timer_is_a_pro_feature), Toast.LENGTH_LONG).show();
|
||||||
if (!App.isProVersion()) {
|
startActivity(new Intent(getContext(), PurchaseActivity.class));
|
||||||
Toast.makeText(getActivity(), getString(R.string.sleep_timer_is_a_pro_feature), Toast.LENGTH_LONG).show();
|
return;
|
||||||
startActivity(new Intent(getContext(), PurchaseActivity.class));
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int minutes = seekArcProgress;
|
final int minutes = seekArcProgress;
|
||||||
|
|
||||||
PendingIntent pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT);
|
PendingIntent pi = makeTimerPendingIntent(PendingIntent.FLAG_CANCEL_CURRENT);
|
||||||
|
|
||||||
final long nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000;
|
final long nextSleepTimerElapsedTime = SystemClock.elapsedRealtime() + minutes * 60 * 1000;
|
||||||
PreferenceUtil.getInstance(getActivity()).setNextSleepTimerElapsedRealtime(nextSleepTimerElapsedTime);
|
PreferenceUtil.getInstance(getActivity()).setNextSleepTimerElapsedRealtime(nextSleepTimerElapsedTime);
|
||||||
|
AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
|
||||||
|
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi);
|
||||||
|
|
||||||
|
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.sleep_timer_set, minutes), Toast.LENGTH_SHORT).show();
|
||||||
|
})
|
||||||
|
.onNeutral((dialog, which) -> {
|
||||||
|
if (getActivity() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final PendingIntent previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE);
|
||||||
|
if (previous != null) {
|
||||||
AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
|
AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
|
||||||
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextSleepTimerElapsedTime, pi);
|
am.cancel(previous);
|
||||||
|
previous.cancel();
|
||||||
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.sleep_timer_set, minutes), Toast.LENGTH_SHORT).show();
|
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.sleep_timer_canceled), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.onNeutral(new MaterialDialog.SingleButtonCallback() {
|
.showListener(dialog -> {
|
||||||
@Override
|
if (makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE) != null) {
|
||||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
timerUpdater.start();
|
||||||
if (getActivity() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final PendingIntent previous = makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE);
|
|
||||||
if (previous != null) {
|
|
||||||
AlarmManager am = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
|
|
||||||
am.cancel(previous);
|
|
||||||
previous.cancel();
|
|
||||||
Toast.makeText(getActivity(), getActivity().getResources().getString(R.string.sleep_timer_canceled), Toast.LENGTH_SHORT).show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.showListener(new DialogInterface.OnShowListener() {
|
|
||||||
@Override
|
|
||||||
public void onShow(DialogInterface dialog) {
|
|
||||||
if (makeTimerPendingIntent(PendingIntent.FLAG_NO_CREATE) != null) {
|
|
||||||
timerUpdater.start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.customView(R.layout.dialog_sleep_timer, false)
|
.customView(R.layout.dialog_sleep_timer, false)
|
||||||
|
|
@ -114,17 +105,14 @@ public class SleepTimerDialog extends DialogFragment {
|
||||||
seekArc.setProgressColor(ThemeSingleton.get().positiveColor.getDefaultColor());
|
seekArc.setProgressColor(ThemeSingleton.get().positiveColor.getDefaultColor());
|
||||||
seekArc.setThumbColor(ThemeSingleton.get().positiveColor.getDefaultColor());
|
seekArc.setThumbColor(ThemeSingleton.get().positiveColor.getDefaultColor());
|
||||||
|
|
||||||
seekArc.post(new Runnable() {
|
seekArc.post(() -> {
|
||||||
@Override
|
int width = seekArc.getWidth();
|
||||||
public void run() {
|
int height = seekArc.getHeight();
|
||||||
int width = seekArc.getWidth();
|
int small = Math.min(width, height);
|
||||||
int height = seekArc.getHeight();
|
|
||||||
int small = Math.min(width, height);
|
|
||||||
|
|
||||||
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(seekArc.getLayoutParams());
|
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(seekArc.getLayoutParams());
|
||||||
layoutParams.height = small;
|
layoutParams.height = small;
|
||||||
seekArc.setLayoutParams(layoutParams);
|
seekArc.setLayoutParams(layoutParams);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
seekArcProgress = PreferenceUtil.getInstance(getActivity()).getLastSleepTimerValue();
|
seekArcProgress = PreferenceUtil.getInstance(getActivity()).getLastSleepTimerValue();
|
||||||
|
|
|
||||||
|
|
@ -33,25 +33,22 @@ public class SongShareDialog extends DialogFragment {
|
||||||
return new MaterialDialog.Builder(getActivity())
|
return new MaterialDialog.Builder(getActivity())
|
||||||
.title(R.string.what_do_you_want_to_share)
|
.title(R.string.what_do_you_want_to_share)
|
||||||
.items(getString(R.string.the_audio_file), "\u201C" + currentlyListening + "\u201D")
|
.items(getString(R.string.the_audio_file), "\u201C" + currentlyListening + "\u201D")
|
||||||
.itemsCallback(new MaterialDialog.ListCallback() {
|
.itemsCallback((materialDialog, view, i, charSequence) -> {
|
||||||
@Override
|
switch (i) {
|
||||||
public void onSelection(MaterialDialog materialDialog, View view, int i, CharSequence charSequence) {
|
case 0:
|
||||||
switch (i) {
|
startActivity(Intent.createChooser(MusicUtil.createShareSongFileIntent(song, getContext()), null));
|
||||||
case 0:
|
break;
|
||||||
startActivity(Intent.createChooser(MusicUtil.createShareSongFileIntent(song, getContext()), null));
|
case 1:
|
||||||
break;
|
getActivity().startActivity(
|
||||||
case 1:
|
Intent.createChooser(
|
||||||
getActivity().startActivity(
|
new Intent()
|
||||||
Intent.createChooser(
|
.setAction(Intent.ACTION_SEND)
|
||||||
new Intent()
|
.putExtra(Intent.EXTRA_TEXT, currentlyListening)
|
||||||
.setAction(Intent.ACTION_SEND)
|
.setType("text/plain"),
|
||||||
.putExtra(Intent.EXTRA_TEXT, currentlyListening)
|
null
|
||||||
.setType("text/plain"),
|
)
|
||||||
null
|
);
|
||||||
)
|
break;
|
||||||
);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
|
|
|
||||||
|
|
@ -54,14 +54,11 @@ public class LastFMRestClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Interceptor createCacheControlInterceptor() {
|
public static Interceptor createCacheControlInterceptor() {
|
||||||
return new Interceptor() {
|
return chain -> {
|
||||||
@Override
|
Request modifiedRequest = chain.request().newBuilder()
|
||||||
public Response intercept(Chain chain) throws IOException {
|
.addHeader("Cache-Control", String.format("max-age=%d, max-stale=%d", 31536000, 31536000))
|
||||||
Request modifiedRequest = chain.request().newBuilder()
|
.build();
|
||||||
.addHeader("Cache-Control", String.format("max-age=%d, max-stale=%d", 31536000, 31536000))
|
return chain.proceed(modifiedRequest);
|
||||||
.build();
|
|
||||||
return chain.proceed(modifiedRequest);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,7 @@ public abstract class DialogAsyncTask<Params, Progress, Result> extends AsyncTas
|
||||||
protected void onPreExecute() {
|
protected void onPreExecute() {
|
||||||
super.onPreExecute();
|
super.onPreExecute();
|
||||||
if (delay > 0) {
|
if (delay > 0) {
|
||||||
new Handler().postDelayed(new Runnable() {
|
new Handler().postDelayed(this::initAndShowDialog, delay);
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
initAndShowDialog();
|
|
||||||
}
|
|
||||||
}, delay);
|
|
||||||
} else {
|
} else {
|
||||||
initAndShowDialog();
|
initAndShowDialog();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -38,20 +38,17 @@ public class UpdateToastMediaScannerCompletionListener implements MediaScannerCo
|
||||||
public void onScanCompleted(final String path, final Uri uri) {
|
public void onScanCompleted(final String path, final Uri uri) {
|
||||||
Activity activity = activityWeakReference.get();
|
Activity activity = activityWeakReference.get();
|
||||||
if (activity != null) {
|
if (activity != null) {
|
||||||
activity.runOnUiThread(new Runnable() {
|
activity.runOnUiThread(() -> {
|
||||||
@Override
|
Toast toast = toastWeakReference.get();
|
||||||
public void run() {
|
if (toast != null) {
|
||||||
Toast toast = toastWeakReference.get();
|
if (uri == null) {
|
||||||
if (toast != null) {
|
failed++;
|
||||||
if (uri == null) {
|
} else {
|
||||||
failed++;
|
scanned++;
|
||||||
} else {
|
|
||||||
scanned++;
|
|
||||||
}
|
|
||||||
String text = " " + String.format(scannedFiles, scanned, toBeScanned.length) + (failed > 0 ? " " + String.format(couldNotScanFiles, failed) : "");
|
|
||||||
toast.setText(text);
|
|
||||||
toast.show();
|
|
||||||
}
|
}
|
||||||
|
String text = " " + String.format(scannedFiles, scanned, toBeScanned.length) + (failed > 0 ? " " + String.format(couldNotScanFiles, failed) : "");
|
||||||
|
toast.setText(text);
|
||||||
|
toast.show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,56 +44,32 @@ public class BlacklistPreferenceDialog extends DialogFragment implements Blackli
|
||||||
.negativeText(R.string.add_action)
|
.negativeText(R.string.add_action)
|
||||||
.items(paths)
|
.items(paths)
|
||||||
.autoDismiss(false)
|
.autoDismiss(false)
|
||||||
.itemsCallback(new MaterialDialog.ListCallback() {
|
.itemsCallback((materialDialog, view, i, charSequence) -> new MaterialDialog.Builder(getContext())
|
||||||
@Override
|
.title(R.string.remove_from_blacklist)
|
||||||
public void onSelection(MaterialDialog materialDialog, View view, int i, final CharSequence charSequence) {
|
.content(Html.fromHtml(getString(R.string.do_you_want_to_remove_from_the_blacklist, charSequence)))
|
||||||
new MaterialDialog.Builder(getContext())
|
.positiveText(R.string.remove_action)
|
||||||
.title(R.string.remove_from_blacklist)
|
.negativeText(android.R.string.cancel)
|
||||||
.content(Html.fromHtml(getString(R.string.do_you_want_to_remove_from_the_blacklist, charSequence)))
|
.onPositive((materialDialog12, dialogAction) -> {
|
||||||
.positiveText(R.string.remove_action)
|
BlacklistStore.getInstance(getContext()).removePath(new File(charSequence.toString()));
|
||||||
.negativeText(android.R.string.cancel)
|
refreshBlacklistData();
|
||||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
}).show())
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction) {
|
|
||||||
BlacklistStore.getInstance(getContext()).removePath(new File(charSequence.toString()));
|
|
||||||
refreshBlacklistData();
|
|
||||||
}
|
|
||||||
}).show();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// clear
|
// clear
|
||||||
.onNeutral(new MaterialDialog.SingleButtonCallback() {
|
.onNeutral((materialDialog, dialogAction) -> new MaterialDialog.Builder(getContext())
|
||||||
@Override
|
.title(R.string.clear_blacklist)
|
||||||
public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction) {
|
.content(R.string.do_you_want_to_clear_the_blacklist)
|
||||||
new MaterialDialog.Builder(getContext())
|
.positiveText(R.string.clear_action)
|
||||||
.title(R.string.clear_blacklist)
|
.negativeText(android.R.string.cancel)
|
||||||
.content(R.string.do_you_want_to_clear_the_blacklist)
|
.onPositive((materialDialog1, dialogAction1) -> {
|
||||||
.positiveText(R.string.clear_action)
|
BlacklistStore.getInstance(getContext()).clear();
|
||||||
.negativeText(android.R.string.cancel)
|
refreshBlacklistData();
|
||||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
}).show())
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction) {
|
|
||||||
BlacklistStore.getInstance(getContext()).clear();
|
|
||||||
refreshBlacklistData();
|
|
||||||
}
|
|
||||||
}).show();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// add
|
// add
|
||||||
.onNegative(new MaterialDialog.SingleButtonCallback() {
|
.onNegative((materialDialog, dialogAction) -> {
|
||||||
@Override
|
BlacklistFolderChooserDialog dialog = BlacklistFolderChooserDialog.create();
|
||||||
public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction) {
|
dialog.setCallback(BlacklistPreferenceDialog.this);
|
||||||
BlacklistFolderChooserDialog dialog = BlacklistFolderChooserDialog.create();
|
dialog.show(getChildFragmentManager(), "FOLDER_CHOOSER");
|
||||||
dialog.setCallback(BlacklistPreferenceDialog.this);
|
|
||||||
dialog.show(getChildFragmentManager(), "FOLDER_CHOOSER");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction) {
|
|
||||||
dismiss();
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
.onPositive((materialDialog, dialogAction) -> dismiss())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import android.graphics.Bitmap;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Build;
|
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.v4.app.NotificationCompat;
|
import android.support.v4.app.NotificationCompat;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
|
||||||
|
|
@ -55,63 +55,58 @@ public class PlayingNotificationImpl24 extends PlayingNotification {
|
||||||
final PendingIntent deleteIntent = PendingIntent.getService(service, 0, intent, 0);
|
final PendingIntent deleteIntent = PendingIntent.getService(service, 0, intent, 0);
|
||||||
|
|
||||||
final int bigNotificationImageSize = service.getResources().getDimensionPixelSize(R.dimen.notification_big_image_size);
|
final int bigNotificationImageSize = service.getResources().getDimensionPixelSize(R.dimen.notification_big_image_size);
|
||||||
service.runOnUiThread(new Runnable() {
|
service.runOnUiThread(() -> SongGlideRequest.Builder.from(Glide.with(service), song)
|
||||||
@Override
|
.checkIgnoreMediaStore(service)
|
||||||
public void run() {
|
.generatePalette(service).build()
|
||||||
SongGlideRequest.Builder.from(Glide.with(service), song)
|
.into(new SimpleTarget<BitmapPaletteWrapper>(bigNotificationImageSize, bigNotificationImageSize) {
|
||||||
.checkIgnoreMediaStore(service)
|
@Override
|
||||||
.generatePalette(service).build()
|
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
|
||||||
.into(new SimpleTarget<BitmapPaletteWrapper>(bigNotificationImageSize, bigNotificationImageSize) {
|
Palette palette = resource.getPalette();
|
||||||
@Override
|
update(resource.getBitmap(), palette.getVibrantColor(palette.getMutedColor(Color.TRANSPARENT)));
|
||||||
public void onResourceReady(BitmapPaletteWrapper resource, GlideAnimation<? super BitmapPaletteWrapper> glideAnimation) {
|
}
|
||||||
Palette palette = resource.getPalette();
|
|
||||||
update(resource.getBitmap(), palette.getVibrantColor(palette.getMutedColor(Color.TRANSPARENT)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFailed(Exception e, Drawable errorDrawable) {
|
public void onLoadFailed(Exception e, Drawable errorDrawable) {
|
||||||
update(null, Color.TRANSPARENT);
|
update(null, Color.TRANSPARENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void update(Bitmap bitmap, int color) {
|
void update(Bitmap bitmap, int color) {
|
||||||
if (bitmap == null)
|
if (bitmap == null)
|
||||||
bitmap = BitmapFactory.decodeResource(service.getResources(), R.drawable.default_album_art);
|
bitmap = BitmapFactory.decodeResource(service.getResources(), R.drawable.default_album_art);
|
||||||
NotificationCompat.Action playPauseAction = new NotificationCompat.Action(playButtonResId,
|
NotificationCompat.Action playPauseAction = new NotificationCompat.Action(playButtonResId,
|
||||||
service.getString(R.string.action_play_pause),
|
service.getString(R.string.action_play_pause),
|
||||||
retrievePlaybackAction(ACTION_TOGGLE_PAUSE));
|
retrievePlaybackAction(ACTION_TOGGLE_PAUSE));
|
||||||
NotificationCompat.Action previousAction = new NotificationCompat.Action(R.drawable.ic_skip_previous_white_24dp,
|
NotificationCompat.Action previousAction = new NotificationCompat.Action(R.drawable.ic_skip_previous_white_24dp,
|
||||||
service.getString(R.string.action_previous),
|
service.getString(R.string.action_previous),
|
||||||
retrievePlaybackAction(ACTION_REWIND));
|
retrievePlaybackAction(ACTION_REWIND));
|
||||||
NotificationCompat.Action nextAction = new NotificationCompat.Action(R.drawable.ic_skip_next_white_24dp,
|
NotificationCompat.Action nextAction = new NotificationCompat.Action(R.drawable.ic_skip_next_white_24dp,
|
||||||
service.getString(R.string.action_next),
|
service.getString(R.string.action_next),
|
||||||
retrievePlaybackAction(ACTION_SKIP));
|
retrievePlaybackAction(ACTION_SKIP));
|
||||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(service, NOTIFICATION_CHANNEL_ID)
|
NotificationCompat.Builder builder = new NotificationCompat.Builder(service, NOTIFICATION_CHANNEL_ID)
|
||||||
.setSmallIcon(R.drawable.ic_notification)
|
.setSmallIcon(R.drawable.ic_notification)
|
||||||
.setLargeIcon(bitmap)
|
.setLargeIcon(bitmap)
|
||||||
.setContentIntent(clickIntent)
|
.setContentIntent(clickIntent)
|
||||||
.setDeleteIntent(deleteIntent)
|
.setDeleteIntent(deleteIntent)
|
||||||
.setContentTitle(song.title)
|
.setContentTitle(song.title)
|
||||||
.setContentText(text)
|
.setContentText(text)
|
||||||
.setOngoing(isPlaying)
|
.setOngoing(isPlaying)
|
||||||
.setShowWhen(false)
|
.setShowWhen(false)
|
||||||
.addAction(previousAction)
|
.addAction(previousAction)
|
||||||
.addAction(playPauseAction)
|
.addAction(playPauseAction)
|
||||||
.addAction(nextAction);
|
.addAction(nextAction);
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
builder.setStyle(new MediaStyle().setMediaSession(service.getMediaSession().getSessionToken()).setShowActionsInCompactView(0, 1, 2))
|
builder.setStyle(new MediaStyle().setMediaSession(service.getMediaSession().getSessionToken()).setShowActionsInCompactView(0, 1, 2))
|
||||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
|
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
|
||||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O && PreferenceUtil.getInstance(service).coloredNotification())
|
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O && PreferenceUtil.getInstance(service).coloredNotification())
|
||||||
builder.setColor(color);
|
builder.setColor(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stopped)
|
if (stopped)
|
||||||
return; // notification has been stopped before loading was finished
|
return; // notification has been stopped before loading was finished
|
||||||
updateNotifyModeAndPostNotification(builder.build());
|
updateNotifyModeAndPostNotification(builder.build());
|
||||||
}
|
}
|
||||||
});
|
}));
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private PendingIntent retrievePlaybackAction(final String action) {
|
private PendingIntent retrievePlaybackAction(final String action) {
|
||||||
|
|
|
||||||
|
|
@ -211,15 +211,12 @@ public class AlbumDetailActivity extends AbsSlidingMusicPanelActivity implements
|
||||||
setUpRecyclerViewPadding();
|
setUpRecyclerViewPadding();
|
||||||
recyclerView.setScrollViewCallbacks(observableScrollViewCallbacks);
|
recyclerView.setScrollViewCallbacks(observableScrollViewCallbacks);
|
||||||
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
|
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
|
||||||
contentView.post(new Runnable() {
|
contentView.post(() -> {
|
||||||
@Override
|
songsBackgroundView.getLayoutParams().height = contentView.getHeight();
|
||||||
public void run() {
|
observableScrollViewCallbacks.onScrollChanged(-(albumArtViewHeight + titleViewHeight), false, false);
|
||||||
songsBackgroundView.getLayoutParams().height = contentView.getHeight();
|
// necessary to fix a bug
|
||||||
observableScrollViewCallbacks.onScrollChanged(-(albumArtViewHeight + titleViewHeight), false, false);
|
recyclerView.scrollBy(0, 1);
|
||||||
// necessary to fix a bug
|
recyclerView.scrollBy(0, -1);
|
||||||
recyclerView.scrollBy(0, 1);
|
|
||||||
recyclerView.scrollBy(0, -1);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -186,12 +186,9 @@ public class ArtistDetailActivity extends AbsSlidingMusicPanelActivity implement
|
||||||
songListView.setAdapter(songAdapter);
|
songListView.setAdapter(songAdapter);
|
||||||
|
|
||||||
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
|
final View contentView = getWindow().getDecorView().findViewById(android.R.id.content);
|
||||||
contentView.post(new Runnable() {
|
contentView.post(() -> {
|
||||||
@Override
|
songListBackground.getLayoutParams().height = contentView.getHeight();
|
||||||
public void run() {
|
observableScrollViewCallbacks.onScrollChanged(-(artistImageViewHeight + titleViewHeight), false, false);
|
||||||
songListBackground.getLayoutParams().height = contentView.getHeight();
|
|
||||||
observableScrollViewCallbacks.onScrollChanged(-(artistImageViewHeight + titleViewHeight), false, false);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -86,13 +86,9 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
findViewById(R.id.drawer_content_container).setFitsSystemWindows(false);
|
findViewById(R.id.drawer_content_container).setFitsSystemWindows(false);
|
||||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
drawerLayout.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
|
drawerLayout.setOnApplyWindowInsetsListener((view, windowInsets) -> {
|
||||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
navigationView.dispatchApplyWindowInsets(windowInsets);
|
||||||
@Override
|
return windowInsets.replaceSystemWindowInsets(0, 0, 0, 0);
|
||||||
public WindowInsets onApplyWindowInsets(View view, WindowInsets windowInsets) {
|
|
||||||
navigationView.dispatchApplyWindowInsets(windowInsets);
|
|
||||||
return windowInsets.replaceSystemWindowInsets(0, 0, 0, 0);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -174,54 +170,26 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
|
||||||
NavigationViewUtil.setItemTextColors(navigationView, ThemeStore.textColorPrimary(this), accentColor);
|
NavigationViewUtil.setItemTextColors(navigationView, ThemeStore.textColorPrimary(this), accentColor);
|
||||||
|
|
||||||
checkSetUpPro();
|
checkSetUpPro();
|
||||||
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
|
navigationView.setNavigationItemSelectedListener(menuItem -> {
|
||||||
@Override
|
drawerLayout.closeDrawers();
|
||||||
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
|
switch (menuItem.getItemId()) {
|
||||||
drawerLayout.closeDrawers();
|
case R.id.nav_library:
|
||||||
switch (menuItem.getItemId()) {
|
new Handler().postDelayed(() -> setMusicChooser(LIBRARY), 200);
|
||||||
case R.id.nav_library:
|
break;
|
||||||
new Handler().postDelayed(new Runnable() {
|
case R.id.nav_folders:
|
||||||
@Override
|
new Handler().postDelayed(() -> setMusicChooser(FOLDERS), 200);
|
||||||
public void run() {
|
break;
|
||||||
setMusicChooser(LIBRARY);
|
case R.id.buy_pro:
|
||||||
}
|
new Handler().postDelayed(() -> startActivityForResult(new Intent(MainActivity.this, PurchaseActivity.class), PURCHASE_REQUEST), 200);
|
||||||
}, 200);
|
break;
|
||||||
break;
|
case R.id.nav_settings:
|
||||||
case R.id.nav_folders:
|
new Handler().postDelayed(() -> startActivity(new Intent(MainActivity.this, SettingsActivity.class)), 200);
|
||||||
new Handler().postDelayed(new Runnable() {
|
break;
|
||||||
@Override
|
case R.id.nav_about:
|
||||||
public void run() {
|
new Handler().postDelayed(() -> startActivity(new Intent(MainActivity.this, AboutActivity.class)), 200);
|
||||||
setMusicChooser(FOLDERS);
|
break;
|
||||||
}
|
|
||||||
}, 200);
|
|
||||||
break;
|
|
||||||
case R.id.buy_pro:
|
|
||||||
new Handler().postDelayed(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
startActivityForResult(new Intent(MainActivity.this, PurchaseActivity.class), PURCHASE_REQUEST);
|
|
||||||
}
|
|
||||||
}, 200);
|
|
||||||
break;
|
|
||||||
case R.id.nav_settings:
|
|
||||||
new Handler().postDelayed(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
startActivity(new Intent(MainActivity.this, SettingsActivity.class));
|
|
||||||
}
|
|
||||||
}, 200);
|
|
||||||
break;
|
|
||||||
case R.id.nav_about:
|
|
||||||
new Handler().postDelayed(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
startActivity(new Intent(MainActivity.this, AboutActivity.class));
|
|
||||||
}
|
|
||||||
}, 200);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -245,13 +213,10 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
|
||||||
if (navigationDrawerHeader == null) {
|
if (navigationDrawerHeader == null) {
|
||||||
navigationDrawerHeader = navigationView.inflateHeaderView(R.layout.navigation_drawer_header);
|
navigationDrawerHeader = navigationView.inflateHeaderView(R.layout.navigation_drawer_header);
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
navigationDrawerHeader.setOnClickListener(new View.OnClickListener() {
|
navigationDrawerHeader.setOnClickListener(v -> {
|
||||||
@Override
|
drawerLayout.closeDrawers();
|
||||||
public void onClick(View v) {
|
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||||
drawerLayout.closeDrawers();
|
expandPanel();
|
||||||
if (getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
|
||||||
expandPanel();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -387,12 +352,7 @@ public class MainActivity extends AbsSlidingMusicPanelActivity {
|
||||||
PreferenceUtil.getInstance(this).setIntroShown();
|
PreferenceUtil.getInstance(this).setIntroShown();
|
||||||
ChangelogDialog.setChangelogRead(this);
|
ChangelogDialog.setChangelogRead(this);
|
||||||
blockRequestPermissions = true;
|
blockRequestPermissions = true;
|
||||||
new Handler().postDelayed(new Runnable() {
|
new Handler().postDelayed(() -> startActivityForResult(new Intent(MainActivity.this, AppIntroActivity.class), APP_INTRO_REQUEST), 50);
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
startActivityForResult(new Intent(MainActivity.this, AppIntroActivity.class), APP_INTRO_REQUEST);
|
|
||||||
}
|
|
||||||
}, 50);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -103,14 +103,11 @@ public class PlaylistDetailActivity extends AbsSlidingMusicPanelActivity impleme
|
||||||
} else {
|
} else {
|
||||||
recyclerViewDragDropManager = new RecyclerViewDragDropManager();
|
recyclerViewDragDropManager = new RecyclerViewDragDropManager();
|
||||||
final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator();
|
final GeneralItemAnimator animator = new RefactoredDefaultItemAnimator();
|
||||||
adapter = new OrderablePlaylistSongAdapter(this, new ArrayList<PlaylistSong>(), R.layout.item_list, false, this, new OrderablePlaylistSongAdapter.OnMoveItemListener() {
|
adapter = new OrderablePlaylistSongAdapter(this, new ArrayList<PlaylistSong>(), R.layout.item_list, false, this, (fromPosition, toPosition) -> {
|
||||||
@Override
|
if (PlaylistsUtil.moveItem(PlaylistDetailActivity.this, playlist.id, fromPosition, toPosition)) {
|
||||||
public void onMoveItem(int fromPosition, int toPosition) {
|
Song song = adapter.getDataSet().remove(fromPosition);
|
||||||
if (PlaylistsUtil.moveItem(PlaylistDetailActivity.this, playlist.id, fromPosition, toPosition)) {
|
adapter.getDataSet().add(toPosition, song);
|
||||||
Song song = adapter.getDataSet().remove(fromPosition);
|
adapter.notifyItemMoved(fromPosition, toPosition);
|
||||||
adapter.getDataSet().add(toPosition, song);
|
|
||||||
adapter.notifyItemMoved(fromPosition, toPosition);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
wrappedAdapter = recyclerViewDragDropManager.createWrappedAdapter(adapter);
|
wrappedAdapter = recyclerViewDragDropManager.createWrappedAdapter(adapter);
|
||||||
|
|
|
||||||
|
|
@ -66,27 +66,21 @@ public class PurchaseActivity extends AbsBaseActivity implements BillingProcesso
|
||||||
restoreButton.setEnabled(false);
|
restoreButton.setEnabled(false);
|
||||||
purchaseButton.setEnabled(false);
|
purchaseButton.setEnabled(false);
|
||||||
|
|
||||||
restoreButton.setOnClickListener(new View.OnClickListener() {
|
restoreButton.setOnClickListener(v -> {
|
||||||
@Override
|
if (restorePurchaseAsyncTask == null || restorePurchaseAsyncTask.getStatus() != AsyncTask.Status.RUNNING) {
|
||||||
public void onClick(View v) {
|
restorePurchase();
|
||||||
if (restorePurchaseAsyncTask == null || restorePurchaseAsyncTask.getStatus() != AsyncTask.Status.RUNNING) {
|
|
||||||
restorePurchase();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
purchaseButton.setOnClickListener(new View.OnClickListener() {
|
purchaseButton.setOnClickListener(v -> {
|
||||||
@Override
|
billingProcessor.purchase(PurchaseActivity.this, App.PRO_VERSION_PRODUCT_ID);
|
||||||
public void onClick(View v) {
|
|
||||||
billingProcessor.purchase(PurchaseActivity.this, App.PRO_VERSION_PRODUCT_ID);
|
|
||||||
|
|
||||||
if (!BuildConfig.DEBUG) {
|
if (!BuildConfig.DEBUG) {
|
||||||
Answers.getInstance().logAddToCart(new AddToCartEvent()
|
Answers.getInstance().logAddToCart(new AddToCartEvent()
|
||||||
.putCurrency(Currency.getInstance("EUR"))
|
.putCurrency(Currency.getInstance("EUR"))
|
||||||
.putItemId("pro_version")
|
.putItemId("pro_version")
|
||||||
.putItemName("Phonograph Pro")
|
.putItemName("Phonograph Pro")
|
||||||
.putItemPrice(BigDecimal.valueOf(3)));
|
.putItemPrice(BigDecimal.valueOf(3)));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -74,12 +74,9 @@ public class SearchActivity extends AbsMusicServiceActivity implements SearchVie
|
||||||
});
|
});
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
|
|
||||||
recyclerView.setOnTouchListener(new View.OnTouchListener() {
|
recyclerView.setOnTouchListener((v, event) -> {
|
||||||
@Override
|
hideSoftKeyboard();
|
||||||
public boolean onTouch(View v, MotionEvent event) {
|
return false;
|
||||||
hideSoftKeyboard();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
setUpToolBar();
|
setUpToolBar();
|
||||||
|
|
@ -133,12 +130,7 @@ public class SearchActivity extends AbsMusicServiceActivity implements SearchVie
|
||||||
});
|
});
|
||||||
|
|
||||||
searchView.setQuery(query, false);
|
searchView.setQuery(query, false);
|
||||||
searchView.post(new Runnable() {
|
searchView.post(() -> searchView.setOnQueryTextListener(SearchActivity.this));
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
searchView.setOnQueryTextListener(SearchActivity.this);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return super.onCreateOptionsMenu(menu);
|
return super.onCreateOptionsMenu(menu);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -188,83 +188,68 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
private void invalidateSettings() {
|
private void invalidateSettings() {
|
||||||
final Preference defaultStartPage = findPreference("default_start_page");
|
final Preference defaultStartPage = findPreference("default_start_page");
|
||||||
setSummary(defaultStartPage);
|
setSummary(defaultStartPage);
|
||||||
defaultStartPage.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
defaultStartPage.setOnPreferenceChangeListener((preference, o) -> {
|
||||||
@Override
|
setSummary(defaultStartPage, o);
|
||||||
public boolean onPreferenceChange(Preference preference, @NonNull Object o) {
|
return true;
|
||||||
setSummary(defaultStartPage, o);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
final Preference generalTheme = findPreference("general_theme");
|
final Preference generalTheme = findPreference("general_theme");
|
||||||
setSummary(generalTheme);
|
setSummary(generalTheme);
|
||||||
generalTheme.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
generalTheme.setOnPreferenceChangeListener((preference, o) -> {
|
||||||
@Override
|
String themeName = (String) o;
|
||||||
public boolean onPreferenceChange(Preference preference, @NonNull Object o) {
|
if (themeName.equals("black") && !App.isProVersion()) {
|
||||||
String themeName = (String) o;
|
Toast.makeText(getActivity(), R.string.black_theme_is_a_pro_feature, Toast.LENGTH_LONG).show();
|
||||||
if (themeName.equals("black") && !App.isProVersion()) {
|
startActivity(new Intent(getContext(), PurchaseActivity.class));
|
||||||
Toast.makeText(getActivity(), R.string.black_theme_is_a_pro_feature, Toast.LENGTH_LONG).show();
|
return false;
|
||||||
startActivity(new Intent(getContext(), PurchaseActivity.class));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int theme = PreferenceUtil.getThemeResFromPrefValue(themeName);
|
|
||||||
setSummary(generalTheme, o);
|
|
||||||
ThemeStore.editTheme(getActivity())
|
|
||||||
.activityTheme(theme)
|
|
||||||
.commit();
|
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
|
|
||||||
// Set the new theme so that updateAppShortcuts can pull it
|
|
||||||
getActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue((String) o));
|
|
||||||
new DynamicShortcutManager(getActivity()).updateDynamicShortcuts();
|
|
||||||
}
|
|
||||||
|
|
||||||
getActivity().recreate();
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int theme = PreferenceUtil.getThemeResFromPrefValue(themeName);
|
||||||
|
setSummary(generalTheme, o);
|
||||||
|
ThemeStore.editTheme(getActivity())
|
||||||
|
.activityTheme(theme)
|
||||||
|
.commit();
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
|
||||||
|
// Set the new theme so that updateAppShortcuts can pull it
|
||||||
|
getActivity().setTheme(PreferenceUtil.getThemeResFromPrefValue((String) o));
|
||||||
|
new DynamicShortcutManager(getActivity()).updateDynamicShortcuts();
|
||||||
|
}
|
||||||
|
|
||||||
|
getActivity().recreate();
|
||||||
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
final Preference autoDownloadImagesPolicy = findPreference("auto_download_images_policy");
|
final Preference autoDownloadImagesPolicy = findPreference("auto_download_images_policy");
|
||||||
setSummary(autoDownloadImagesPolicy);
|
setSummary(autoDownloadImagesPolicy);
|
||||||
autoDownloadImagesPolicy.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
autoDownloadImagesPolicy.setOnPreferenceChangeListener((preference, o) -> {
|
||||||
@Override
|
setSummary(autoDownloadImagesPolicy, o);
|
||||||
public boolean onPreferenceChange(Preference preference, @NonNull Object o) {
|
return true;
|
||||||
setSummary(autoDownloadImagesPolicy, o);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
final ATEColorPreference primaryColorPref = (ATEColorPreference) findPreference("primary_color");
|
final ATEColorPreference primaryColorPref = (ATEColorPreference) findPreference("primary_color");
|
||||||
final int primaryColor = ThemeStore.primaryColor(getActivity());
|
final int primaryColor = ThemeStore.primaryColor(getActivity());
|
||||||
primaryColorPref.setColor(primaryColor, ColorUtil.darkenColor(primaryColor));
|
primaryColorPref.setColor(primaryColor, ColorUtil.darkenColor(primaryColor));
|
||||||
primaryColorPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
primaryColorPref.setOnPreferenceClickListener(preference -> {
|
||||||
@Override
|
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.primary_color)
|
||||||
public boolean onPreferenceClick(@NonNull Preference preference) {
|
.accentMode(false)
|
||||||
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.primary_color)
|
.allowUserColorInput(true)
|
||||||
.accentMode(false)
|
.allowUserColorInputAlpha(false)
|
||||||
.allowUserColorInput(true)
|
.preselect(primaryColor)
|
||||||
.allowUserColorInputAlpha(false)
|
.show();
|
||||||
.preselect(primaryColor)
|
return true;
|
||||||
.show();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
final ATEColorPreference accentColorPref = (ATEColorPreference) findPreference("accent_color");
|
final ATEColorPreference accentColorPref = (ATEColorPreference) findPreference("accent_color");
|
||||||
final int accentColor = ThemeStore.accentColor(getActivity());
|
final int accentColor = ThemeStore.accentColor(getActivity());
|
||||||
accentColorPref.setColor(accentColor, ColorUtil.darkenColor(accentColor));
|
accentColorPref.setColor(accentColor, ColorUtil.darkenColor(accentColor));
|
||||||
accentColorPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
accentColorPref.setOnPreferenceClickListener(preference -> {
|
||||||
@Override
|
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.accent_color)
|
||||||
public boolean onPreferenceClick(@NonNull Preference preference) {
|
.accentMode(true)
|
||||||
new ColorChooserDialog.Builder(((SettingsActivity) getActivity()), R.string.accent_color)
|
.allowUserColorInput(true)
|
||||||
.accentMode(true)
|
.allowUserColorInputAlpha(false)
|
||||||
.allowUserColorInput(true)
|
.preselect(accentColor)
|
||||||
.allowUserColorInputAlpha(false)
|
.show();
|
||||||
.preselect(accentColor)
|
return true;
|
||||||
.show();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
TwoStatePreference colorNavBar = (TwoStatePreference) findPreference("should_color_navigation_bar");
|
TwoStatePreference colorNavBar = (TwoStatePreference) findPreference("should_color_navigation_bar");
|
||||||
|
|
@ -272,15 +257,12 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
colorNavBar.setVisible(false);
|
colorNavBar.setVisible(false);
|
||||||
} else {
|
} else {
|
||||||
colorNavBar.setChecked(ThemeStore.coloredNavigationBar(getActivity()));
|
colorNavBar.setChecked(ThemeStore.coloredNavigationBar(getActivity()));
|
||||||
colorNavBar.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
colorNavBar.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
ThemeStore.editTheme(getActivity())
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
.coloredNavigationBar((Boolean) newValue)
|
||||||
ThemeStore.editTheme(getActivity())
|
.commit();
|
||||||
.coloredNavigationBar((Boolean) newValue)
|
getActivity().recreate();
|
||||||
.commit();
|
return true;
|
||||||
getActivity().recreate();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -289,13 +271,10 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
classicNotification.setVisible(false);
|
classicNotification.setVisible(false);
|
||||||
} else {
|
} else {
|
||||||
classicNotification.setChecked(PreferenceUtil.getInstance(getActivity()).classicNotification());
|
classicNotification.setChecked(PreferenceUtil.getInstance(getActivity()).classicNotification());
|
||||||
classicNotification.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
classicNotification.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
// Save preference
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
PreferenceUtil.getInstance(getActivity()).setClassicNotification((Boolean) newValue);
|
||||||
// Save preference
|
return true;
|
||||||
PreferenceUtil.getInstance(getActivity()).setClassicNotification((Boolean) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -304,13 +283,10 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
coloredNotification.setEnabled(PreferenceUtil.getInstance(getActivity()).classicNotification());
|
coloredNotification.setEnabled(PreferenceUtil.getInstance(getActivity()).classicNotification());
|
||||||
} else {
|
} else {
|
||||||
coloredNotification.setChecked(PreferenceUtil.getInstance(getActivity()).coloredNotification());
|
coloredNotification.setChecked(PreferenceUtil.getInstance(getActivity()).coloredNotification());
|
||||||
coloredNotification.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
coloredNotification.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
// Save preference
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
PreferenceUtil.getInstance(getActivity()).setColoredNotification((Boolean) newValue);
|
||||||
// Save preference
|
return true;
|
||||||
PreferenceUtil.getInstance(getActivity()).setColoredNotification((Boolean) newValue);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -319,17 +295,14 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
colorAppShortcuts.setVisible(false);
|
colorAppShortcuts.setVisible(false);
|
||||||
} else {
|
} else {
|
||||||
colorAppShortcuts.setChecked(PreferenceUtil.getInstance(getActivity()).coloredAppShortcuts());
|
colorAppShortcuts.setChecked(PreferenceUtil.getInstance(getActivity()).coloredAppShortcuts());
|
||||||
colorAppShortcuts.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
colorAppShortcuts.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||||
@Override
|
// Save preference
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
PreferenceUtil.getInstance(getActivity()).setColoredAppShortcuts((Boolean) newValue);
|
||||||
// Save preference
|
|
||||||
PreferenceUtil.getInstance(getActivity()).setColoredAppShortcuts((Boolean) newValue);
|
|
||||||
|
|
||||||
// Update app shortcuts
|
// Update app shortcuts
|
||||||
new DynamicShortcutManager(getActivity()).updateDynamicShortcuts();
|
new DynamicShortcutManager(getActivity()).updateDynamicShortcuts();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -338,12 +311,9 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia
|
||||||
equalizer.setEnabled(false);
|
equalizer.setEnabled(false);
|
||||||
equalizer.setSummary(getResources().getString(R.string.no_equalizer));
|
equalizer.setSummary(getResources().getString(R.string.no_equalizer));
|
||||||
}
|
}
|
||||||
equalizer.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
equalizer.setOnPreferenceClickListener(preference -> {
|
||||||
@Override
|
NavigationUtil.openEqualizer(getActivity());
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
return true;
|
||||||
NavigationUtil.openEqualizer(getActivity());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
updateNowPlayingScreenSummary();
|
updateNowPlayingScreenSummary();
|
||||||
|
|
|
||||||
|
|
@ -120,27 +120,19 @@ public abstract class AbsBaseActivity extends AbsThemeActivity {
|
||||||
//User has deny from permission dialog
|
//User has deny from permission dialog
|
||||||
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(),
|
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(),
|
||||||
Snackbar.LENGTH_INDEFINITE)
|
Snackbar.LENGTH_INDEFINITE)
|
||||||
.setAction(R.string.action_grant, new View.OnClickListener() {
|
.setAction(R.string.action_grant, view -> requestPermissions())
|
||||||
@Override
|
|
||||||
public void onClick(View view) {
|
|
||||||
requestPermissions();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.setActionTextColor(ThemeStore.accentColor(this))
|
.setActionTextColor(ThemeStore.accentColor(this))
|
||||||
.show();
|
.show();
|
||||||
} else {
|
} else {
|
||||||
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
|
// User has deny permission and checked never show permission dialog so you can redirect to Application settings page
|
||||||
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(),
|
Snackbar.make(getSnackBarContainer(), getPermissionDeniedMessage(),
|
||||||
Snackbar.LENGTH_INDEFINITE)
|
Snackbar.LENGTH_INDEFINITE)
|
||||||
.setAction(R.string.action_settings, new View.OnClickListener() {
|
.setAction(R.string.action_settings, view -> {
|
||||||
@Override
|
Intent intent = new Intent();
|
||||||
public void onClick(View view) {
|
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
||||||
Intent intent = new Intent();
|
Uri uri = Uri.fromParts("package", AbsBaseActivity.this.getPackageName(), null);
|
||||||
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
|
intent.setData(uri);
|
||||||
Uri uri = Uri.fromParts("package", AbsBaseActivity.this.getPackageName(), null);
|
startActivity(intent);
|
||||||
intent.setData(uri);
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.setActionTextColor(ThemeStore.accentColor(this))
|
.setActionTextColor(ThemeStore.accentColor(this))
|
||||||
.show();
|
.show();
|
||||||
|
|
|
||||||
|
|
@ -76,12 +76,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager().findFragmentById(R.id.mini_player_fragment);
|
miniPlayerFragment = (MiniPlayerFragment) getSupportFragmentManager().findFragmentById(R.id.mini_player_fragment);
|
||||||
|
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
miniPlayerFragment.getView().setOnClickListener(new View.OnClickListener() {
|
miniPlayerFragment.getView().setOnClickListener(v -> expandPanel());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
expandPanel();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
slidingUpPanelLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
slidingUpPanelLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -267,13 +262,7 @@ public abstract class AbsSlidingMusicPanelActivity extends AbsMusicServiceActivi
|
||||||
.ofArgb(getWindow().getNavigationBarColor(), color)
|
.ofArgb(getWindow().getNavigationBarColor(), color)
|
||||||
.setDuration(ViewUtil.PHONOGRAPH_ANIM_TIME);
|
.setDuration(ViewUtil.PHONOGRAPH_ANIM_TIME);
|
||||||
navigationBarColorAnimator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f));
|
navigationBarColorAnimator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f));
|
||||||
navigationBarColorAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
|
navigationBarColorAnimator.addUpdateListener(animation -> AbsSlidingMusicPanelActivity.super.setNavigationbarColor((Integer) animation.getAnimatedValue()));
|
||||||
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
|
||||||
@Override
|
|
||||||
public void onAnimationUpdate(ValueAnimator animation) {
|
|
||||||
AbsSlidingMusicPanelActivity.super.setNavigationbarColor((Integer) animation.getAnimatedValue());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
navigationBarColorAnimator.start();
|
navigationBarColorAnimator.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -170,31 +170,18 @@ public class BugReportActivity extends AbsThemeActivity {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
inputPassword.setOnEditorActionListener(new TextView.OnEditorActionListener() {
|
inputPassword.setOnEditorActionListener((textView, actionId, event) -> {
|
||||||
@Override
|
if (actionId == EditorInfo.IME_ACTION_SEND) {
|
||||||
public boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {
|
reportIssue();
|
||||||
if (actionId == EditorInfo.IME_ACTION_SEND) {
|
return true;
|
||||||
reportIssue();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
textDeviceInfo.setOnClickListener(new View.OnClickListener() {
|
textDeviceInfo.setOnClickListener(v -> copyDeviceInfoToClipBoard());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
copyDeviceInfoToClipBoard();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
TintHelper.setTintAuto(sendFab, accentColor, true);
|
TintHelper.setTintAuto(sendFab, accentColor, true);
|
||||||
sendFab.setOnClickListener(new View.OnClickListener() {
|
sendFab.setOnClickListener(v -> reportIssue());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
reportIssue();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
TintHelper.setTintAuto(inputTitle, accentColor, false);
|
TintHelper.setTintAuto(inputTitle, accentColor, false);
|
||||||
TintHelper.setTintAuto(inputDescription, accentColor, false);
|
TintHelper.setTintAuto(inputDescription, accentColor, false);
|
||||||
|
|
@ -392,19 +379,8 @@ public class BugReportActivity extends AbsThemeActivity {
|
||||||
.title(R.string.bug_report_failed)
|
.title(R.string.bug_report_failed)
|
||||||
.content(R.string.bug_report_failed_unknown)
|
.content(R.string.bug_report_failed_unknown)
|
||||||
.positiveText(android.R.string.ok)
|
.positiveText(android.R.string.ok)
|
||||||
.onPositive(new MaterialDialog.SingleButtonCallback() {
|
.onPositive((dialog, which) -> tryToFinishActivity())
|
||||||
@Override
|
.cancelListener(dialog -> tryToFinishActivity())
|
||||||
public void onClick(@NonNull MaterialDialog dialog,
|
|
||||||
@NonNull DialogAction which) {
|
|
||||||
tryToFinishActivity();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.cancelListener(new DialogInterface.OnCancelListener() {
|
|
||||||
@Override
|
|
||||||
public void onCancel(DialogInterface dialog) {
|
|
||||||
tryToFinishActivity();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.show();
|
.show();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -137,33 +137,25 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
getString(R.string.web_search),
|
getString(R.string.web_search),
|
||||||
getString(R.string.remove_cover)
|
getString(R.string.remove_cover)
|
||||||
};
|
};
|
||||||
image.setOnClickListener(new View.OnClickListener() {
|
image.setOnClickListener(v -> new MaterialDialog.Builder(AbsTagEditorActivity.this)
|
||||||
@Override
|
.title(R.string.update_image)
|
||||||
public void onClick(View v) {
|
.items(items)
|
||||||
new MaterialDialog.Builder(AbsTagEditorActivity.this)
|
.itemsCallback((dialog, view, which, text) -> {
|
||||||
.title(R.string.update_image)
|
switch (which) {
|
||||||
.items(items)
|
case 0:
|
||||||
.itemsCallback(new MaterialDialog.ListCallback() {
|
getImageFromLastFM();
|
||||||
@Override
|
break;
|
||||||
public void onSelection(MaterialDialog dialog, View view, int which, CharSequence text) {
|
case 1:
|
||||||
switch (which) {
|
startImagePicker();
|
||||||
case 0:
|
break;
|
||||||
getImageFromLastFM();
|
case 2:
|
||||||
break;
|
searchImageOnWeb();
|
||||||
case 1:
|
break;
|
||||||
startImagePicker();
|
case 3:
|
||||||
break;
|
deleteImage();
|
||||||
case 2:
|
break;
|
||||||
searchImageOnWeb();
|
}
|
||||||
break;
|
}).show());
|
||||||
case 3:
|
|
||||||
deleteImage();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startImagePicker() {
|
private void startImagePicker() {
|
||||||
|
|
@ -184,12 +176,7 @@ public abstract class AbsTagEditorActivity extends AbsBaseActivity {
|
||||||
fab.setScaleX(0);
|
fab.setScaleX(0);
|
||||||
fab.setScaleY(0);
|
fab.setScaleY(0);
|
||||||
fab.setEnabled(false);
|
fab.setEnabled(false);
|
||||||
fab.setOnClickListener(new View.OnClickListener() {
|
fab.setOnClickListener(v -> save());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
save();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
TintHelper.setTintAuto(fab, ThemeStore.accentColor(this), true);
|
TintHelper.setTintAuto(fab, ThemeStore.accentColor(this), true);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -298,42 +298,24 @@ public class FoldersFragment extends AbsMainActivityFragment implements MainActi
|
||||||
if (file.isDirectory()) {
|
if (file.isDirectory()) {
|
||||||
setCrumb(new BreadCrumbLayout.Crumb(file), true);
|
setCrumb(new BreadCrumbLayout.Crumb(file), true);
|
||||||
} else {
|
} else {
|
||||||
FileFilter fileFilter = new FileFilter() {
|
FileFilter fileFilter = pathname -> !pathname.isDirectory() && getFileFilter().accept(pathname);
|
||||||
@Override
|
new ListSongsAsyncTask(getActivity(), file, (songs, extra) -> {
|
||||||
public boolean accept(File pathname) {
|
File file1 = (File) extra;
|
||||||
return !pathname.isDirectory() && getFileFilter().accept(pathname);
|
int startIndex = -1;
|
||||||
|
for (int i = 0; i < songs.size(); i++) {
|
||||||
|
if (file1.getPath().equals(songs.get(i).data)) { // path is already canonical here
|
||||||
|
startIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
if (startIndex > -1) {
|
||||||
new ListSongsAsyncTask(getActivity(), file, new ListSongsAsyncTask.OnSongsListedCallback() {
|
MusicPlayerRemote.openQueue(songs, startIndex, true);
|
||||||
@Override
|
} else {
|
||||||
public void onSongsListed(@NonNull ArrayList<Song> songs, Object extra) {
|
final File finalFile = file1;
|
||||||
File file = (File) extra;
|
Snackbar.make(coordinatorLayout, Html.fromHtml(String.format(getString(R.string.not_listed_in_media_store), file1.getName())), Snackbar.LENGTH_LONG)
|
||||||
int startIndex = -1;
|
.setAction(R.string.action_scan, v -> new ListPathsAsyncTask(getActivity(), paths -> scanPaths(paths)).execute(new ListPathsAsyncTask.LoadingInfo(finalFile, getFileFilter())))
|
||||||
for (int i = 0; i < songs.size(); i++) {
|
.setActionTextColor(ThemeStore.accentColor(getActivity()))
|
||||||
if (file.getPath().equals(songs.get(i).data)) { // path is already canonical here
|
.show();
|
||||||
startIndex = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (startIndex > -1) {
|
|
||||||
MusicPlayerRemote.openQueue(songs, startIndex, true);
|
|
||||||
} else {
|
|
||||||
final File finalFile = file;
|
|
||||||
Snackbar.make(coordinatorLayout, Html.fromHtml(String.format(getString(R.string.not_listed_in_media_store), file.getName())), Snackbar.LENGTH_LONG)
|
|
||||||
.setAction(R.string.action_scan, new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
new ListPathsAsyncTask(getActivity(), new ListPathsAsyncTask.OnPathsListedCallback() {
|
|
||||||
@Override
|
|
||||||
public void onPathsListed(@Nullable String[] paths) {
|
|
||||||
scanPaths(paths);
|
|
||||||
}
|
|
||||||
}).execute(new ListPathsAsyncTask.LoadingInfo(finalFile, getFileFilter()));
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.setActionTextColor(ThemeStore.accentColor(getActivity()))
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}).execute(new ListSongsAsyncTask.LoadingInfo(toList(file.getParentFile()), fileFilter, getFileComparator()));
|
}).execute(new ListSongsAsyncTask.LoadingInfo(toList(file.getParentFile()), fileFilter, getFileComparator()));
|
||||||
}
|
}
|
||||||
|
|
@ -342,12 +324,7 @@ public class FoldersFragment extends AbsMainActivityFragment implements MainActi
|
||||||
@Override
|
@Override
|
||||||
public void onMultipleItemAction(MenuItem item, ArrayList<File> files) {
|
public void onMultipleItemAction(MenuItem item, ArrayList<File> files) {
|
||||||
final int itemId = item.getItemId();
|
final int itemId = item.getItemId();
|
||||||
new ListSongsAsyncTask(getActivity(), null, new ListSongsAsyncTask.OnSongsListedCallback() {
|
new ListSongsAsyncTask(getActivity(), null, (songs, extra) -> SongsMenuHelper.handleMenuClick(getActivity(), songs, itemId)).execute(new ListSongsAsyncTask.LoadingInfo(files, getFileFilter(), getFileComparator()));
|
||||||
@Override
|
|
||||||
public void onSongsListed(@NonNull ArrayList<Song> songs, Object extra) {
|
|
||||||
SongsMenuHelper.handleMenuClick(getActivity(), songs, itemId);
|
|
||||||
}
|
|
||||||
}).execute(new ListSongsAsyncTask.LoadingInfo(files, getFileFilter(), getFileComparator()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -355,73 +332,47 @@ public class FoldersFragment extends AbsMainActivityFragment implements MainActi
|
||||||
PopupMenu popupMenu = new PopupMenu(getActivity(), view);
|
PopupMenu popupMenu = new PopupMenu(getActivity(), view);
|
||||||
if (file.isDirectory()) {
|
if (file.isDirectory()) {
|
||||||
popupMenu.inflate(R.menu.menu_item_directory);
|
popupMenu.inflate(R.menu.menu_item_directory);
|
||||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
popupMenu.setOnMenuItemClickListener(item -> {
|
||||||
@Override
|
final int itemId = item.getItemId();
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
switch (itemId) {
|
||||||
final int itemId = item.getItemId();
|
case R.id.action_play_next:
|
||||||
switch (itemId) {
|
case R.id.action_add_to_current_playing:
|
||||||
case R.id.action_play_next:
|
case R.id.action_add_to_playlist:
|
||||||
case R.id.action_add_to_current_playing:
|
case R.id.action_delete_from_device:
|
||||||
case R.id.action_add_to_playlist:
|
new ListSongsAsyncTask(getActivity(), null, (songs, extra) -> SongsMenuHelper.handleMenuClick(getActivity(), songs, itemId)).execute(new ListSongsAsyncTask.LoadingInfo(toList(file), getFileFilter(), getFileComparator()));
|
||||||
case R.id.action_delete_from_device:
|
return true;
|
||||||
new ListSongsAsyncTask(getActivity(), null, new ListSongsAsyncTask.OnSongsListedCallback() {
|
case R.id.action_set_as_start_directory:
|
||||||
@Override
|
PreferenceUtil.getInstance(getActivity()).setStartDirectory(file);
|
||||||
public void onSongsListed(@NonNull ArrayList<Song> songs, Object extra) {
|
Toast.makeText(getActivity(), String.format(getString(R.string.new_start_directory), file.getPath()), Toast.LENGTH_SHORT).show();
|
||||||
SongsMenuHelper.handleMenuClick(getActivity(), songs, itemId);
|
return true;
|
||||||
}
|
case R.id.action_scan:
|
||||||
}).execute(new ListSongsAsyncTask.LoadingInfo(toList(file), getFileFilter(), getFileComparator()));
|
new ListPathsAsyncTask(getActivity(), paths -> scanPaths(paths)).execute(new ListPathsAsyncTask.LoadingInfo(file, getFileFilter()));
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_set_as_start_directory:
|
|
||||||
PreferenceUtil.getInstance(getActivity()).setStartDirectory(file);
|
|
||||||
Toast.makeText(getActivity(), String.format(getString(R.string.new_start_directory), file.getPath()), Toast.LENGTH_SHORT).show();
|
|
||||||
return true;
|
|
||||||
case R.id.action_scan:
|
|
||||||
new ListPathsAsyncTask(getActivity(), new ListPathsAsyncTask.OnPathsListedCallback() {
|
|
||||||
@Override
|
|
||||||
public void onPathsListed(@Nullable String[] paths) {
|
|
||||||
scanPaths(paths);
|
|
||||||
}
|
|
||||||
}).execute(new ListPathsAsyncTask.LoadingInfo(file, getFileFilter()));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
popupMenu.inflate(R.menu.menu_item_file);
|
popupMenu.inflate(R.menu.menu_item_file);
|
||||||
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
popupMenu.setOnMenuItemClickListener(item -> {
|
||||||
@Override
|
final int itemId = item.getItemId();
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
switch (itemId) {
|
||||||
final int itemId = item.getItemId();
|
case R.id.action_play_next:
|
||||||
switch (itemId) {
|
case R.id.action_add_to_current_playing:
|
||||||
case R.id.action_play_next:
|
case R.id.action_add_to_playlist:
|
||||||
case R.id.action_add_to_current_playing:
|
case R.id.action_go_to_album:
|
||||||
case R.id.action_add_to_playlist:
|
case R.id.action_go_to_artist:
|
||||||
case R.id.action_go_to_album:
|
case R.id.action_share:
|
||||||
case R.id.action_go_to_artist:
|
case R.id.action_tag_editor:
|
||||||
case R.id.action_share:
|
case R.id.action_details:
|
||||||
case R.id.action_tag_editor:
|
case R.id.action_set_as_ringtone:
|
||||||
case R.id.action_details:
|
case R.id.action_delete_from_device:
|
||||||
case R.id.action_set_as_ringtone:
|
new ListSongsAsyncTask(getActivity(), null, (songs, extra) -> SongMenuHelper.handleMenuClick(getActivity(), songs.get(0), itemId)).execute(new ListSongsAsyncTask.LoadingInfo(toList(file), getFileFilter(), getFileComparator()));
|
||||||
case R.id.action_delete_from_device:
|
return true;
|
||||||
new ListSongsAsyncTask(getActivity(), null, new ListSongsAsyncTask.OnSongsListedCallback() {
|
case R.id.action_scan:
|
||||||
@Override
|
new ListPathsAsyncTask(getActivity(), paths -> scanPaths(paths)).execute(new ListPathsAsyncTask.LoadingInfo(file, getFileFilter()));
|
||||||
public void onSongsListed(@NonNull ArrayList<Song> songs, Object extra) {
|
return true;
|
||||||
SongMenuHelper.handleMenuClick(getActivity(), songs.get(0), itemId);
|
|
||||||
}
|
|
||||||
}).execute(new ListSongsAsyncTask.LoadingInfo(toList(file), getFileFilter(), getFileComparator()));
|
|
||||||
return true;
|
|
||||||
case R.id.action_scan:
|
|
||||||
new ListPathsAsyncTask(getActivity(), new ListPathsAsyncTask.OnPathsListedCallback() {
|
|
||||||
@Override
|
|
||||||
public void onPathsListed(@Nullable String[] paths) {
|
|
||||||
scanPaths(paths);
|
|
||||||
}
|
|
||||||
}).execute(new ListPathsAsyncTask.LoadingInfo(file, getFileFilter()));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
popupMenu.show();
|
popupMenu.show();
|
||||||
|
|
@ -433,17 +384,14 @@ public class FoldersFragment extends AbsMainActivityFragment implements MainActi
|
||||||
return files;
|
return files;
|
||||||
}
|
}
|
||||||
|
|
||||||
Comparator<File> fileComparator = new Comparator<File>() {
|
Comparator<File> fileComparator = (lhs, rhs) -> {
|
||||||
@Override
|
if (lhs.isDirectory() && !rhs.isDirectory()) {
|
||||||
public int compare(File lhs, File rhs) {
|
return -1;
|
||||||
if (lhs.isDirectory() && !rhs.isDirectory()) {
|
} else if (!lhs.isDirectory() && rhs.isDirectory()) {
|
||||||
return -1;
|
return 1;
|
||||||
} else if (!lhs.isDirectory() && rhs.isDirectory()) {
|
} else {
|
||||||
return 1;
|
return lhs.getName().compareToIgnoreCase
|
||||||
} else {
|
(rhs.getName());
|
||||||
return lhs.getName().compareToIgnoreCase
|
|
||||||
(rhs.getName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -451,14 +399,9 @@ public class FoldersFragment extends AbsMainActivityFragment implements MainActi
|
||||||
return fileComparator;
|
return fileComparator;
|
||||||
}
|
}
|
||||||
|
|
||||||
FileFilter audioFileFilter = new FileFilter() {
|
FileFilter audioFileFilter = file -> !file.isHidden() && (file.isDirectory() ||
|
||||||
@Override
|
FileUtil.fileIsMimeType(file, "audio/*", MimeTypeMap.getSingleton()) ||
|
||||||
public boolean accept(File file) {
|
FileUtil.fileIsMimeType(file, "application/ogg", MimeTypeMap.getSingleton()));
|
||||||
return !file.isHidden() && (file.isDirectory() ||
|
|
||||||
FileUtil.fileIsMimeType(file, "audio/*", MimeTypeMap.getSingleton()) ||
|
|
||||||
FileUtil.fileIsMimeType(file, "application/ogg", MimeTypeMap.getSingleton()));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private FileFilter getFileFilter() {
|
private FileFilter getFileFilter() {
|
||||||
return audioFileFilter;
|
return audioFileFilter;
|
||||||
|
|
@ -722,25 +665,10 @@ public class FoldersFragment extends AbsMainActivityFragment implements MainActi
|
||||||
.title(R.string.listing_files)
|
.title(R.string.listing_files)
|
||||||
.progress(true, 0)
|
.progress(true, 0)
|
||||||
.progressIndeterminateStyle(true)
|
.progressIndeterminateStyle(true)
|
||||||
.cancelListener(new DialogInterface.OnCancelListener() {
|
.cancelListener(dialog -> cancel(false))
|
||||||
@Override
|
.dismissListener(dialog -> cancel(false))
|
||||||
public void onCancel(DialogInterface dialog) {
|
|
||||||
cancel(false);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.dismissListener(new DialogInterface.OnDismissListener() {
|
|
||||||
@Override
|
|
||||||
public void onDismiss(DialogInterface dialog) {
|
|
||||||
cancel(false);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.negativeText(android.R.string.cancel)
|
.negativeText(android.R.string.cancel)
|
||||||
.onNegative(new MaterialDialog.SingleButtonCallback() {
|
.onNegative((dialog, which) -> cancel(false))
|
||||||
@Override
|
|
||||||
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
|
|
||||||
cancel(false);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -113,12 +113,7 @@ public abstract class AbsPlayerFragment extends AbsMusicServiceFragment implemen
|
||||||
|
|
||||||
setToolbarShown(false);
|
setToolbarShown(false);
|
||||||
|
|
||||||
toolbar.animate().alpha(0f).setDuration(PlayerAlbumCoverFragment.VISIBILITY_ANIM_DURATION).withEndAction(new Runnable() {
|
toolbar.animate().alpha(0f).setDuration(PlayerAlbumCoverFragment.VISIBILITY_ANIM_DURATION).withEndAction(() -> toolbar.setVisibility(View.GONE));
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
toolbar.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void toggleToolbar(@Nullable final View toolbar) {
|
protected void toggleToolbar(@Nullable final View toolbar) {
|
||||||
|
|
|
||||||
|
|
@ -167,18 +167,13 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
favoriteIcon.setVisibility(View.INVISIBLE);
|
favoriteIcon.setVisibility(View.INVISIBLE);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.withEndAction(new Runnable() {
|
.withEndAction(() -> favoriteIcon.animate()
|
||||||
@Override
|
.setDuration(ViewUtil.PHONOGRAPH_ANIM_TIME / 2)
|
||||||
public void run() {
|
.setInterpolator(new AccelerateInterpolator())
|
||||||
favoriteIcon.animate()
|
.scaleX(0f)
|
||||||
.setDuration(ViewUtil.PHONOGRAPH_ANIM_TIME / 2)
|
.scaleY(0f)
|
||||||
.setInterpolator(new AccelerateInterpolator())
|
.alpha(0f)
|
||||||
.scaleX(0f)
|
.start())
|
||||||
.scaleY(0f)
|
|
||||||
.alpha(0f)
|
|
||||||
.start();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.start();
|
.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -191,14 +186,11 @@ public class PlayerAlbumCoverFragment extends AbsMusicServiceFragment implements
|
||||||
}
|
}
|
||||||
|
|
||||||
private void hideLyricsLayout() {
|
private void hideLyricsLayout() {
|
||||||
lyricsLayout.animate().alpha(0f).setDuration(PlayerAlbumCoverFragment.VISIBILITY_ANIM_DURATION).withEndAction(new Runnable() {
|
lyricsLayout.animate().alpha(0f).setDuration(PlayerAlbumCoverFragment.VISIBILITY_ANIM_DURATION).withEndAction(() -> {
|
||||||
@Override
|
if (!isLyricsLayoutBound()) return;
|
||||||
public void run() {
|
lyricsLayout.setVisibility(View.GONE);
|
||||||
if (!isLyricsLayoutBound()) return;
|
lyricsLine1.setText(null);
|
||||||
lyricsLayout.setVisibility(View.GONE);
|
lyricsLine2.setText(null);
|
||||||
lyricsLine1.setText(null);
|
|
||||||
lyricsLine2.setText(null);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -234,12 +234,7 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
|
||||||
private void setUpPlayerToolbar() {
|
private void setUpPlayerToolbar() {
|
||||||
toolbar.inflateMenu(R.menu.menu_player);
|
toolbar.inflateMenu(R.menu.menu_player);
|
||||||
toolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);
|
toolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);
|
||||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
toolbar.setNavigationOnClickListener(v -> getActivity().onBackPressed());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
getActivity().onBackPressed();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
toolbar.setOnMenuItemClickListener(this);
|
toolbar.setOnMenuItemClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -521,15 +516,12 @@ public class CardPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
|
||||||
currentSongViewHolder.image.setScaleType(ImageView.ScaleType.CENTER);
|
currentSongViewHolder.image.setScaleType(ImageView.ScaleType.CENTER);
|
||||||
currentSongViewHolder.image.setColorFilter(ATHUtil.resolveColor(fragment.getActivity(), R.attr.iconColor, ThemeStore.textColorSecondary(fragment.getActivity())), PorterDuff.Mode.SRC_IN);
|
currentSongViewHolder.image.setColorFilter(ATHUtil.resolveColor(fragment.getActivity(), R.attr.iconColor, ThemeStore.textColorSecondary(fragment.getActivity())), PorterDuff.Mode.SRC_IN);
|
||||||
currentSongViewHolder.image.setImageResource(R.drawable.ic_volume_up_white_24dp);
|
currentSongViewHolder.image.setImageResource(R.drawable.ic_volume_up_white_24dp);
|
||||||
currentSongViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
currentSongViewHolder.itemView.setOnClickListener(v -> {
|
||||||
@Override
|
// toggle the panel
|
||||||
public void onClick(View v) {
|
if (fragment.slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||||
// toggle the panel
|
fragment.slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED);
|
||||||
if (fragment.slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
} else if (fragment.slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
|
||||||
fragment.slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED);
|
fragment.slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
|
||||||
} else if (fragment.slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
|
|
||||||
fragment.slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
currentSongViewHolder.menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu((AppCompatActivity) fragment.getActivity()) {
|
currentSongViewHolder.menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu((AppCompatActivity) fragment.getActivity()) {
|
||||||
|
|
|
||||||
|
|
@ -145,13 +145,10 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
|
||||||
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
|
playPauseFab.setImageDrawable(playerFabPlayPauseDrawable); // Note: set the drawable AFTER TintHelper.setTintAuto() was called
|
||||||
playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
|
playPauseFab.setColorFilter(MaterialValueHelper.getPrimaryTextColor(getContext(), ColorUtil.isColorLight(fabColor)), PorterDuff.Mode.SRC_IN);
|
||||||
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
playPauseFab.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
||||||
playPauseFab.post(new Runnable() {
|
playPauseFab.post(() -> {
|
||||||
@Override
|
if (playPauseFab != null) {
|
||||||
public void run() {
|
playPauseFab.setPivotX(playPauseFab.getWidth() / 2);
|
||||||
if (playPauseFab != null) {
|
playPauseFab.setPivotY(playPauseFab.getHeight() / 2);
|
||||||
playPauseFab.setPivotX(playPauseFab.getWidth() / 2);
|
|
||||||
playPauseFab.setPivotY(playPauseFab.getHeight() / 2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -174,18 +171,8 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
|
||||||
|
|
||||||
private void setUpPrevNext() {
|
private void setUpPrevNext() {
|
||||||
updatePrevNextColor();
|
updatePrevNextColor();
|
||||||
nextButton.setOnClickListener(new View.OnClickListener() {
|
nextButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong());
|
||||||
@Override
|
prevButton.setOnClickListener(v -> MusicPlayerRemote.back());
|
||||||
public void onClick(View v) {
|
|
||||||
MusicPlayerRemote.playNextSong();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
prevButton.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
MusicPlayerRemote.back();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateProgressTextColor() {
|
private void updateProgressTextColor() {
|
||||||
|
|
@ -200,12 +187,7 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpShuffleButton() {
|
private void setUpShuffleButton() {
|
||||||
shuffleButton.setOnClickListener(new View.OnClickListener() {
|
shuffleButton.setOnClickListener(v -> MusicPlayerRemote.toggleShuffleMode());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
MusicPlayerRemote.toggleShuffleMode();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateShuffleState() {
|
private void updateShuffleState() {
|
||||||
|
|
@ -220,12 +202,7 @@ public class CardPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpRepeatButton() {
|
private void setUpRepeatButton() {
|
||||||
repeatButton.setOnClickListener(new View.OnClickListener() {
|
repeatButton.setOnClickListener(v -> MusicPlayerRemote.cycleRepeatMode());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
MusicPlayerRemote.cycleRepeatMode();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateRepeatState() {
|
private void updateRepeatState() {
|
||||||
|
|
|
||||||
|
|
@ -229,12 +229,7 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
|
||||||
private void setUpPlayerToolbar() {
|
private void setUpPlayerToolbar() {
|
||||||
toolbar.inflateMenu(R.menu.menu_player);
|
toolbar.inflateMenu(R.menu.menu_player);
|
||||||
toolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);
|
toolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);
|
||||||
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
|
toolbar.setNavigationOnClickListener(v -> getActivity().onBackPressed());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
getActivity().onBackPressed();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
toolbar.setOnMenuItemClickListener(this);
|
toolbar.setOnMenuItemClickListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -500,15 +495,12 @@ public class FlatPlayerFragment extends AbsPlayerFragment implements PlayerAlbum
|
||||||
currentSongViewHolder.image.setScaleType(ImageView.ScaleType.CENTER);
|
currentSongViewHolder.image.setScaleType(ImageView.ScaleType.CENTER);
|
||||||
currentSongViewHolder.image.setColorFilter(ATHUtil.resolveColor(fragment.getActivity(), R.attr.iconColor, ThemeStore.textColorSecondary(fragment.getActivity())), PorterDuff.Mode.SRC_IN);
|
currentSongViewHolder.image.setColorFilter(ATHUtil.resolveColor(fragment.getActivity(), R.attr.iconColor, ThemeStore.textColorSecondary(fragment.getActivity())), PorterDuff.Mode.SRC_IN);
|
||||||
currentSongViewHolder.image.setImageResource(R.drawable.ic_volume_up_white_24dp);
|
currentSongViewHolder.image.setImageResource(R.drawable.ic_volume_up_white_24dp);
|
||||||
currentSongViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
|
currentSongViewHolder.itemView.setOnClickListener(v -> {
|
||||||
@Override
|
// toggle the panel
|
||||||
public void onClick(View v) {
|
if (fragment.slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
||||||
// toggle the panel
|
fragment.slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED);
|
||||||
if (fragment.slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.COLLAPSED) {
|
} else if (fragment.slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
|
||||||
fragment.slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.EXPANDED);
|
fragment.slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
|
||||||
} else if (fragment.slidingUpPanelLayout.getPanelState() == SlidingUpPanelLayout.PanelState.EXPANDED) {
|
|
||||||
fragment.slidingUpPanelLayout.setPanelState(SlidingUpPanelLayout.PanelState.COLLAPSED);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
currentSongViewHolder.menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu((AppCompatActivity) fragment.getActivity()) {
|
currentSongViewHolder.menu.setOnClickListener(new SongMenuHelper.OnClickSongMenu((AppCompatActivity) fragment.getActivity()) {
|
||||||
|
|
|
||||||
|
|
@ -150,13 +150,10 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
|
||||||
playPauseButton.setImageDrawable(playPauseDrawable);
|
playPauseButton.setImageDrawable(playPauseDrawable);
|
||||||
updatePlayPauseColor();
|
updatePlayPauseColor();
|
||||||
playPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
playPauseButton.setOnClickListener(new PlayPauseButtonOnClickHandler());
|
||||||
playPauseButton.post(new Runnable() {
|
playPauseButton.post(() -> {
|
||||||
@Override
|
if (playPauseButton != null) {
|
||||||
public void run() {
|
playPauseButton.setPivotX(playPauseButton.getWidth() / 2);
|
||||||
if (playPauseButton != null) {
|
playPauseButton.setPivotY(playPauseButton.getHeight() / 2);
|
||||||
playPauseButton.setPivotX(playPauseButton.getWidth() / 2);
|
|
||||||
playPauseButton.setPivotY(playPauseButton.getHeight() / 2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -179,18 +176,8 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
|
||||||
|
|
||||||
private void setUpPrevNext() {
|
private void setUpPrevNext() {
|
||||||
updatePrevNextColor();
|
updatePrevNextColor();
|
||||||
nextButton.setOnClickListener(new View.OnClickListener() {
|
nextButton.setOnClickListener(v -> MusicPlayerRemote.playNextSong());
|
||||||
@Override
|
prevButton.setOnClickListener(v -> MusicPlayerRemote.back());
|
||||||
public void onClick(View v) {
|
|
||||||
MusicPlayerRemote.playNextSong();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
prevButton.setOnClickListener(new View.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
MusicPlayerRemote.back();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateProgressTextColor() {
|
private void updateProgressTextColor() {
|
||||||
|
|
@ -209,12 +196,7 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpShuffleButton() {
|
private void setUpShuffleButton() {
|
||||||
shuffleButton.setOnClickListener(new View.OnClickListener() {
|
shuffleButton.setOnClickListener(v -> MusicPlayerRemote.toggleShuffleMode());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
MusicPlayerRemote.toggleShuffleMode();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateShuffleState() {
|
private void updateShuffleState() {
|
||||||
|
|
@ -229,12 +211,7 @@ public class FlatPlayerPlaybackControlsFragment extends AbsMusicServiceFragment
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUpRepeatButton() {
|
private void setUpRepeatButton() {
|
||||||
repeatButton.setOnClickListener(new View.OnClickListener() {
|
repeatButton.setOnClickListener(v -> MusicPlayerRemote.cycleRepeatMode());
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
MusicPlayerRemote.cycleRepeatMode();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateRepeatState() {
|
private void updateRepeatState() {
|
||||||
|
|
|
||||||
|
|
@ -318,14 +318,11 @@ public class MusicUtil {
|
||||||
patterns.add(Pattern.compile(String.format(format, filename), Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE));
|
patterns.add(Pattern.compile(String.format(format, filename), Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE));
|
||||||
patterns.add(Pattern.compile(String.format(format, songtitle), Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE));
|
patterns.add(Pattern.compile(String.format(format, songtitle), Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE));
|
||||||
|
|
||||||
File[] files = dir.listFiles(new FileFilter() {
|
File[] files = dir.listFiles(f -> {
|
||||||
@Override
|
for (Pattern pattern : patterns) {
|
||||||
public boolean accept(File f) {
|
if (pattern.matcher(f.getName()).matches()) return true;
|
||||||
for (Pattern pattern : patterns) {
|
|
||||||
if (pattern.matcher(f.getName()).matches()) return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (files != null && files.length > 0) {
|
if (files != null && files.length > 0) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue