refactor utils namespace

This commit is contained in:
dkanada 2020-04-29 16:00:34 +09:00
commit 07f0349367
13 changed files with 21 additions and 393 deletions

View file

@ -1,6 +1,5 @@
package com.kabouzeid.gramophone.adapter; package com.kabouzeid.gramophone.adapter;
import android.content.Context;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.os.Build; import android.os.Build;
import androidx.annotation.LayoutRes; import androidx.annotation.LayoutRes;
@ -12,10 +11,8 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.PopupMenu; import android.widget.PopupMenu;
import android.widget.Toast;
import com.kabouzeid.appthemehelper.util.ATHUtil; import com.kabouzeid.appthemehelper.util.ATHUtil;
import com.kabouzeid.gramophone.App;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter; import com.kabouzeid.gramophone.adapter.base.AbsMultiSelectAdapter;
import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder;
@ -25,15 +22,12 @@ import com.kabouzeid.gramophone.helper.menu.PlaylistMenuHelper;
import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper; import com.kabouzeid.gramophone.helper.menu.SongsMenuHelper;
import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.loader.PlaylistSongLoader; import com.kabouzeid.gramophone.loader.PlaylistSongLoader;
import com.kabouzeid.gramophone.misc.WeakContextAsyncTask;
import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist; import com.kabouzeid.gramophone.model.playlist.AbsSmartPlaylist;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import com.kabouzeid.gramophone.util.NavigationUtil; import com.kabouzeid.gramophone.util.NavigationUtil;
import com.kabouzeid.gramophone.util.PlaylistsUtil;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View file

@ -10,7 +10,6 @@ import com.kabouzeid.gramophone.interfaces.CabHolder;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import com.kabouzeid.gramophone.util.MusicUtil; import com.kabouzeid.gramophone.util.MusicUtil;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class AlbumSongAdapter extends SongAdapter { public class AlbumSongAdapter extends SongAdapter {

View file

@ -1,43 +0,0 @@
package com.kabouzeid.gramophone.util;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import androidx.annotation.NonNull;
import com.bumptech.glide.signature.StringSignature;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class ArtistSignatureUtil {
private static final String ARTIST_SIGNATURE_PREFS = "artist_signatures";
private static ArtistSignatureUtil sInstance;
private final SharedPreferences mPreferences;
private ArtistSignatureUtil(@NonNull final Context context) {
mPreferences = context.getSharedPreferences(ARTIST_SIGNATURE_PREFS, Context.MODE_PRIVATE);
}
public static ArtistSignatureUtil getInstance(@NonNull final Context context) {
if (sInstance == null) {
sInstance = new ArtistSignatureUtil(context.getApplicationContext());
}
return sInstance;
}
@SuppressLint("CommitPrefEdits")
public void updateArtistSignature(String artistName) {
mPreferences.edit().putLong(artistName, System.currentTimeMillis()).commit();
}
public long getArtistSignatureRaw(String artistName) {
return mPreferences.getLong(artistName, 0);
}
public StringSignature getArtistSignature(String artistName) {
return new StringSignature(String.valueOf(getArtistSignatureRaw(artistName)));
}
}

View file

@ -3,9 +3,6 @@ package com.kabouzeid.gramophone.util;
import java.util.Calendar; import java.util.Calendar;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
/**
* @author Eugene Cheung (arkon)
*/
public class CalendarUtil { public class CalendarUtil {
private static final long MS_PER_MINUTE = 60 * 1000; private static final long MS_PER_MINUTE = 60 * 1000;
private static final long MS_PER_DAY = 24 * 60 * MS_PER_MINUTE; private static final long MS_PER_DAY = 24 * 60 * MS_PER_MINUTE;
@ -23,7 +20,8 @@ public class CalendarUtil {
*/ */
public long getElapsedToday() { public long getElapsedToday() {
// Time elapsed so far today // Time elapsed so far today
return (calendar.get(Calendar.HOUR_OF_DAY) * 60 + calendar.get(Calendar.MINUTE)) * MS_PER_MINUTE return (calendar.get(Calendar.HOUR_OF_DAY) * 60
+ calendar.get(Calendar.MINUTE)) * MS_PER_MINUTE
+ calendar.get(Calendar.SECOND) * 1000 + calendar.get(Calendar.SECOND) * 1000
+ calendar.get(Calendar.MILLISECOND); + calendar.get(Calendar.MILLISECOND);
} }
@ -63,9 +61,8 @@ public class CalendarUtil {
* @return Time elapsed this month in milliseconds. * @return Time elapsed this month in milliseconds.
*/ */
public long getElapsedMonth() { public long getElapsedMonth() {
// Today + rest of this month // Today and the rest of this month
return getElapsedToday() + return getElapsedToday() + ((calendar.get(Calendar.DAY_OF_MONTH) - 1) * MS_PER_DAY);
((calendar.get(Calendar.DAY_OF_MONTH) - 1) * MS_PER_DAY);
} }
/** /**
@ -75,7 +72,7 @@ public class CalendarUtil {
* @return Time elapsed this month and the last numMonths months in milliseconds. * @return Time elapsed this month and the last numMonths months in milliseconds.
*/ */
public long getElapsedMonths(int numMonths) { public long getElapsedMonths(int numMonths) {
// Today + rest of this month // Today and the rest of this month
long elapsed = getElapsedMonth(); long elapsed = getElapsedMonth();
// Previous numMonths months // Previous numMonths months
@ -108,7 +105,6 @@ public class CalendarUtil {
int year = calendar.get(Calendar.YEAR); int year = calendar.get(Calendar.YEAR);
while (month > Calendar.JANUARY) { while (month > Calendar.JANUARY) {
elapsed += getDaysInMonth(year, month) * MS_PER_DAY; elapsed += getDaysInMonth(year, month) * MS_PER_DAY;
month--; month--;
} }

View file

@ -1,203 +0,0 @@
package com.kabouzeid.gramophone.util;
import android.content.Context;
import android.database.Cursor;
import android.provider.MediaStore;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.webkit.MimeTypeMap;
import com.kabouzeid.gramophone.loader.SongLoader;
import com.kabouzeid.gramophone.loader.SortedCursor;
import com.kabouzeid.gramophone.model.Song;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public final class FileUtil {
private FileUtil() {
}
@NonNull
public static List<Song> matchFilesWithMediaStore(@NonNull Context context, @Nullable List<File> files) {
return SongLoader.getSongs(makeSongCursor(context, files));
}
@Nullable
public static SortedCursor makeSongCursor(@NonNull final Context context, @Nullable final List<File> files) {
String selection = null;
String[] paths = null;
if (files != null) {
paths = toPathArray(files);
if (files.size() > 0 && files.size() < 999) { // 999 is the max amount Androids SQL implementation can handle.
selection = MediaStore.Audio.AudioColumns.DATA + " IN (" + makePlaceholders(files.size()) + ")";
}
}
Cursor songCursor = SongLoader.makeSongCursor(context, selection, selection == null ? null : paths);
return songCursor == null ? null : new SortedCursor(songCursor, paths, MediaStore.Audio.AudioColumns.DATA);
}
private static String makePlaceholders(int len) {
StringBuilder sb = new StringBuilder(len * 2 - 1);
sb.append("?");
for (int i = 1; i < len; i++) {
sb.append(",?");
}
return sb.toString();
}
@Nullable
private static String[] toPathArray(@Nullable List<File> files) {
if (files != null) {
String[] paths = new String[files.size()];
for (int i = 0; i < files.size(); i++) {
paths[i] = safeGetCanonicalPath(files.get(i));
}
return paths;
}
return null;
}
@NonNull
public static List<File> listFiles(@NonNull File directory, @Nullable FileFilter fileFilter) {
List<File> fileList = new LinkedList<>();
File[] found = directory.listFiles(fileFilter);
if (found != null) {
Collections.addAll(fileList, found);
}
return fileList;
}
@NonNull
public static List<File> listFilesDeep(@NonNull File directory, @Nullable FileFilter fileFilter) {
List<File> files = new LinkedList<>();
internalListFilesDeep(files, directory, fileFilter);
return files;
}
@NonNull
public static List<File> listFilesDeep(@NonNull Collection<File> files, @Nullable FileFilter fileFilter) {
List<File> resFiles = new LinkedList<>();
for (File file : files) {
if (file.isDirectory()) {
internalListFilesDeep(resFiles, file, fileFilter);
} else if (fileFilter == null || fileFilter.accept(file)) {
resFiles.add(file);
}
}
return resFiles;
}
private static void internalListFilesDeep(@NonNull Collection<File> files, @NonNull File directory, @Nullable FileFilter fileFilter) {
File[] found = directory.listFiles(fileFilter);
if (found != null) {
for (File file : found) {
if (file.isDirectory()) {
internalListFilesDeep(files, file, fileFilter);
} else {
files.add(file);
}
}
}
}
public static boolean fileIsMimeType(File file, String mimeType, MimeTypeMap mimeTypeMap) {
if (mimeType == null || mimeType.equals("*/*")) {
return true;
} else {
// get the file mime type
String filename = file.toURI().toString();
int dotPos = filename.lastIndexOf('.');
if (dotPos == -1) {
return false;
}
String fileExtension = filename.substring(dotPos + 1).toLowerCase();
String fileType = mimeTypeMap.getMimeTypeFromExtension(fileExtension);
if (fileType == null) {
return false;
}
// check the 'type/subtype' pattern
if (fileType.equals(mimeType)) {
return true;
}
// check the 'type/*' pattern
int mimeTypeDelimiter = mimeType.lastIndexOf('/');
if (mimeTypeDelimiter == -1) {
return false;
}
String mimeTypeMainType = mimeType.substring(0, mimeTypeDelimiter);
String mimeTypeSubtype = mimeType.substring(mimeTypeDelimiter + 1);
if (!mimeTypeSubtype.equals("*")) {
return false;
}
int fileTypeDelimiter = fileType.lastIndexOf('/');
if (fileTypeDelimiter == -1) {
return false;
}
String fileTypeMainType = fileType.substring(0, fileTypeDelimiter);
return fileTypeMainType.equals(mimeTypeMainType);
}
}
public static String stripExtension(String str) {
if (str == null) return null;
int pos = str.lastIndexOf('.');
if (pos == -1) return str;
return str.substring(0, pos);
}
public static String readFromStream(InputStream is) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
if (sb.length() > 0) sb.append("\n");
sb.append(line);
}
reader.close();
return sb.toString();
}
public static String read(File file) throws Exception {
FileInputStream fin = new FileInputStream(file);
String ret = readFromStream(fin);
fin.close();
return ret;
}
public static String safeGetCanonicalPath(File file) {
try {
return file.getCanonicalPath();
} catch (IOException e) {
e.printStackTrace();
return file.getAbsolutePath();
}
}
public static File safeGetCanonicalFile(File file) {
try {
return file.getCanonicalFile();
} catch (IOException e) {
e.printStackTrace();
return file.getAbsoluteFile();
}
}
}

View file

@ -19,9 +19,6 @@ import java.io.InputStream;
import com.kabouzeid.appthemehelper.util.TintHelper; import com.kabouzeid.appthemehelper.util.TintHelper;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class ImageUtil { public class ImageUtil {
public static int calculateInSampleSize(int width, int height, int reqWidth) { public static int calculateInSampleSize(int width, int height, int reqWidth) {
@ -60,6 +57,7 @@ public class ImageUtil {
if (maxForSmallerSize >= width) { if (maxForSmallerSize >= width) {
return src; return src;
} }
float ratio = (float) height / width; float ratio = (float) height / width;
dstWidth = maxForSmallerSize; dstWidth = maxForSmallerSize;
dstHeight = Math.round(maxForSmallerSize * ratio); dstHeight = Math.round(maxForSmallerSize * ratio);
@ -67,6 +65,7 @@ public class ImageUtil {
if (maxForSmallerSize >= height) { if (maxForSmallerSize >= height) {
return src; return src;
} }
float ratio = (float) width / height; float ratio = (float) width / height;
dstWidth = Math.round(maxForSmallerSize * ratio); dstWidth = Math.round(maxForSmallerSize * ratio);
dstHeight = maxForSmallerSize; dstHeight = maxForSmallerSize;
@ -91,6 +90,7 @@ public class ImageUtil {
if (Build.VERSION.SDK_INT >= 21) { if (Build.VERSION.SDK_INT >= 21) {
return res.getDrawable(resId, theme); return res.getDrawable(resId, theme);
} }
return VectorDrawableCompat.create(res, resId, theme); return VectorDrawableCompat.create(res, resId, theme);
} }
@ -116,6 +116,5 @@ public class ImageUtil {
public static Bitmap resize(InputStream stream, int scaledWidth, int scaledHeight) { public static Bitmap resize(InputStream stream, int scaledWidth, int scaledHeight) {
final Bitmap bitmap = BitmapFactory.decodeStream(stream); final Bitmap bitmap = BitmapFactory.decodeStream(stream);
return Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true); return Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true);
} }
} }

View file

@ -29,16 +29,11 @@ import com.kabouzeid.gramophone.model.Genre;
import com.kabouzeid.gramophone.model.Playlist; import com.kabouzeid.gramophone.model.Playlist;
import com.kabouzeid.gramophone.model.Song; import com.kabouzeid.gramophone.model.Song;
import org.jellyfin.apiclient.interaction.ApiClient;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class MusicUtil { public class MusicUtil {
public static Uri getSongFileUri(Song song) { public static Uri getSongFileUri(Song song) {
return Uri.parse(App.getApiClient().getApiUrl() + "/Audio/" + song.id + "/stream?static=true"); return Uri.parse(App.getApiClient().getApiUrl() + "/Audio/" + song.id + "/stream?static=true");
@ -127,6 +122,7 @@ public class MusicUtil {
for (int i = 0; i < songs.size(); i++) { for (int i = 0; i < songs.size(); i++) {
duration += songs.get(i).duration; duration += songs.get(i).duration;
} }
return duration; return duration;
} }
@ -142,15 +138,8 @@ public class MusicUtil {
} }
} }
/**
* Build a concatenated string from the provided arguments
* The intended purpose is to show extra annotations
* to a music library item.
* Ex: for a given album --> buildInfoString(album.artist, album.songCount)
*/
@NonNull @NonNull
public static String buildInfoString(@Nullable final String string1, @Nullable final String string2) public static String buildInfoString(@Nullable final String string1, @Nullable final String string2) {
{
// Skip empty strings // Skip empty strings
if (TextUtils.isEmpty(string1)) { if (TextUtils.isEmpty(string1)) {
//noinspection ConstantConditions //noinspection ConstantConditions
@ -170,104 +159,6 @@ public class MusicUtil {
return trackNumberToFix % 1000; return trackNumberToFix % 1000;
} }
public static void insertAlbumArt(@NonNull Context context, int albumId, String path) {
ContentResolver contentResolver = context.getContentResolver();
Uri artworkUri = Uri.parse("content://media/external/audio/albumart");
contentResolver.delete(ContentUris.withAppendedId(artworkUri, albumId), null, null);
ContentValues values = new ContentValues();
values.put("album_id", albumId);
values.put("_data", path);
contentResolver.insert(artworkUri, values);
}
public static void deleteAlbumArt(@NonNull Context context, int albumId) {
ContentResolver contentResolver = context.getContentResolver();
Uri localUri = Uri.parse("content://media/external/audio/albumart");
contentResolver.delete(ContentUris.withAppendedId(localUri, albumId), null, null);
}
@NonNull
public static File createAlbumArtFile() {
return new File(createAlbumArtDir(), String.valueOf(System.currentTimeMillis()));
}
@NonNull
@SuppressWarnings("ResultOfMethodCallIgnored")
public static File createAlbumArtDir() {
File albumArtDir = new File(Environment.getExternalStorageDirectory(), "/albumthumbs/");
if (!albumArtDir.exists()) {
albumArtDir.mkdirs();
try {
new File(albumArtDir, ".nomedia").createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return albumArtDir;
}
public static void deleteTracks(@NonNull final Context context, @NonNull final List<Song> songs) {
final String[] projection = new String[]{
BaseColumns._ID, MediaStore.MediaColumns.DATA
};
final StringBuilder selection = new StringBuilder();
selection.append(BaseColumns._ID + " IN (");
for (int i = 0; i < songs.size(); i++) {
selection.append(songs.get(i).id);
if (i < songs.size() - 1) {
selection.append(",");
}
}
selection.append(")");
try {
final Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selection.toString(),
null, null);
if (cursor != null) {
// Step 1: Remove selected tracks from the current playlist, as well
// as from the album art cache
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
final int id = cursor.getInt(0);
final Song song = SongLoader.getSong(context, id);
MusicPlayerRemote.removeFromQueue(song);
cursor.moveToNext();
}
// Step 2: Remove selected tracks from the database
context.getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
selection.toString(), null);
// Step 3: Remove files from card
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
final String name = cursor.getString(1);
try { // File.delete can throw a security exception
final File f = new File(name);
if (!f.delete()) {
// I'm not sure if we'd ever get here (deletion would
// have to fail, but no exception thrown)
Log.e("MusicUtils", "Failed to delete file " + name);
}
cursor.moveToNext();
} catch (@NonNull final SecurityException ex) {
cursor.moveToNext();
} catch (NullPointerException e) {
Log.e("MusicUtils", "Failed to find file " + name);
}
}
cursor.close();
}
context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
Toast.makeText(context, context.getString(R.string.deleted_x_songs, songs.size()), Toast.LENGTH_SHORT).show();
} catch (SecurityException ignored) {
}
}
public static boolean isFavoritePlaylist(@NonNull final Context context, @NonNull final Playlist playlist) { public static boolean isFavoritePlaylist(@NonNull final Context context, @NonNull final Playlist playlist) {
return playlist.name != null && playlist.name.equals(context.getString(R.string.favorites)); return playlist.name != null && playlist.name.equals(context.getString(R.string.favorites));
} }
@ -303,12 +194,14 @@ public class MusicUtil {
@NonNull @NonNull
public static String getSectionName(@Nullable String musicMediaTitle) { public static String getSectionName(@Nullable String musicMediaTitle) {
if (TextUtils.isEmpty(musicMediaTitle)) return ""; if (TextUtils.isEmpty(musicMediaTitle)) return "";
musicMediaTitle = musicMediaTitle.trim().toLowerCase(); musicMediaTitle = musicMediaTitle.trim().toLowerCase();
if (musicMediaTitle.startsWith("the ")) { if (musicMediaTitle.startsWith("the ")) {
musicMediaTitle = musicMediaTitle.substring(4); musicMediaTitle = musicMediaTitle.substring(4);
} else if (musicMediaTitle.startsWith("a ")) { } else if (musicMediaTitle.startsWith("a ")) {
musicMediaTitle = musicMediaTitle.substring(2); musicMediaTitle = musicMediaTitle.substring(2);
} }
if (musicMediaTitle.isEmpty()) return ""; if (musicMediaTitle.isEmpty()) return "";
return String.valueOf(musicMediaTitle.charAt(0)).toUpperCase(); return String.valueOf(musicMediaTitle.charAt(0)).toUpperCase();
} }

View file

@ -10,9 +10,6 @@ import com.kabouzeid.appthemehelper.util.ColorUtil;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class PhonographColorUtil { public class PhonographColorUtil {
@Nullable @Nullable
@ -40,6 +37,7 @@ public class PhonographColorUtil {
return Collections.max(palette.getSwatches(), SwatchComparator.getInstance()).getRgb(); return Collections.max(palette.getSwatches(), SwatchComparator.getInstance()).getRgb();
} }
} }
return fallback; return fallback;
} }
@ -50,6 +48,7 @@ public class PhonographColorUtil {
if (sInstance == null) { if (sInstance == null) {
sInstance = new SwatchComparator(); sInstance = new SwatchComparator();
} }
return sInstance; return sInstance;
} }
@ -64,6 +63,7 @@ public class PhonographColorUtil {
while (ColorUtil.isColorLight(backgroundColor)) { while (ColorUtil.isColorLight(backgroundColor)) {
backgroundColor = ColorUtil.darkenColor(backgroundColor); backgroundColor = ColorUtil.darkenColor(backgroundColor);
} }
return backgroundColor; return backgroundColor;
} }
@ -72,6 +72,7 @@ public class PhonographColorUtil {
while (!ColorUtil.isColorLight(backgroundColor)) { while (!ColorUtil.isColorLight(backgroundColor)) {
backgroundColor = ColorUtil.lightenColor(backgroundColor); backgroundColor = ColorUtil.lightenColor(backgroundColor);
} }
return backgroundColor; return backgroundColor;
} }
} }

View file

@ -10,9 +10,6 @@ import com.kabouzeid.gramophone.model.Song;
import java.util.List; import java.util.List;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class PlaylistsUtil { public class PlaylistsUtil {
public static boolean doesPlaylistExist(@NonNull final Context context, final String name) { public static boolean doesPlaylistExist(@NonNull final Context context, final String name) {
return false; return false;

View file

@ -126,6 +126,7 @@ public final class PreferenceUtil {
for (NowPlayingScreen nowPlayingScreen : NowPlayingScreen.values()) { for (NowPlayingScreen nowPlayingScreen : NowPlayingScreen.values()) {
if (nowPlayingScreen.id == id) return nowPlayingScreen; if (nowPlayingScreen.id == id) return nowPlayingScreen;
} }
return NowPlayingScreen.CARD; return NowPlayingScreen.CARD;
} }
@ -251,6 +252,7 @@ public final class PreferenceUtil {
interval = calendarUtil.getElapsedMonth(); interval = calendarUtil.getElapsedMonth();
break; break;
} }
return (System.currentTimeMillis() - interval) / 1000; return (System.currentTimeMillis() - interval) / 1000;
} }

View file

@ -45,12 +45,12 @@ public class SwipeAndDragHelper extends ItemTouchHelper.Callback {
float alpha = 1 - (Math.abs(dX) / recyclerView.getWidth()); float alpha = 1 - (Math.abs(dX) / recyclerView.getWidth());
viewHolder.itemView.setAlpha(alpha); viewHolder.itemView.setAlpha(alpha);
} }
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
} }
public interface ActionCompletionContract { public interface ActionCompletionContract {
void onViewMoved(int oldPosition, int newPosition); void onViewMoved(int oldPosition, int newPosition);
} }
} }

View file

@ -20,9 +20,6 @@ import android.view.inputmethod.InputMethodManager;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class Util { public class Util {
public static int getActionBarSize(@NonNull Context context) { public static int getActionBarSize(@NonNull Context context) {
@ -51,8 +48,7 @@ public class Util {
public static void setAllowDrawUnderStatusBar(@NonNull Window window) { public static void setAllowDrawUnderStatusBar(@NonNull Window window) {
window.getDecorView().setSystemUiVisibility( window.getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
} }
public static void hideSoftKeyboard(@Nullable Activity activity) { public static void hideSoftKeyboard(@Nullable Activity activity) {
@ -87,5 +83,4 @@ public class Util {
return config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; return config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
} else return false; } else return false;
} }
} }

View file

@ -24,9 +24,6 @@ import com.kabouzeid.appthemehelper.util.MaterialValueHelper;
import com.kabouzeid.gramophone.R; import com.kabouzeid.gramophone.R;
import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView;
/**
* @author Karim Abou Zeid (kabouzeid)
*/
public class ViewUtil { public class ViewUtil {
public final static int PHONOGRAPH_ANIM_TIME = 1000; public final static int PHONOGRAPH_ANIM_TIME = 1000;
@ -51,6 +48,7 @@ public class ViewUtil {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
animator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f)); animator.setInterpolator(new PathInterpolator(0.4f, 0f, 1f, 1f));
} }
animator.setDuration(PHONOGRAPH_ANIM_TIME); animator.setDuration(PHONOGRAPH_ANIM_TIME);
return animator; return animator;
} }