Add java8 support

This commit is contained in:
Karim Abou Zeid 2017-12-18 20:23:03 +01:00
commit 7793cc822d
44 changed files with 512 additions and 929 deletions

View file

@ -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'
} }

View file

@ -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();
}); });
} }
} }

View file

@ -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);
}
} }
}); });
} }

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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();

View file

@ -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)) {

View file

@ -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();

View file

@ -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();
} }

View file

@ -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();
} }
} }
}) })

View file

@ -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();
} }

View file

@ -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();
} }

View file

@ -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;
} }

View file

@ -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();
} }

View file

@ -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();

View file

@ -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();

View file

@ -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();

View file

@ -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);
}
}; };
} }

View file

@ -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();
} }

View file

@ -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();
} }
}); });
} }

View file

@ -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();
} }

View file

@ -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;

View file

@ -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) {

View file

@ -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);
}
}); });
} }

View file

@ -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);
}
}); });
} }

View file

@ -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;

View file

@ -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);

View file

@ -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)));
}
} }
}); });

View file

@ -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);
} }

View file

@ -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();

View file

@ -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();

View file

@ -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();
} }
} }

View file

@ -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;
} }

View file

@ -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);
} }

View file

@ -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();
} }
} }

View file

@ -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) {

View file

@ -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);
}
}); });
} }

View file

@ -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()) {

View file

@ -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() {

View file

@ -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()) {

View file

@ -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() {

View file

@ -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) {