diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java index 25de9f79..f642f132 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/mainactivity/LibraryFragment.java @@ -32,6 +32,7 @@ import java.util.Objects; import code.name.monkey.appthemehelper.ThemeStore; import code.name.monkey.appthemehelper.common.ATHToolbarActivity; import code.name.monkey.appthemehelper.util.ATHUtil; +import code.name.monkey.appthemehelper.util.DrawableUtil; import code.name.monkey.appthemehelper.util.TintHelper; import code.name.monkey.appthemehelper.util.ToolbarContentTintHelper; import code.name.monkey.retromusic.R; @@ -42,6 +43,7 @@ import code.name.monkey.retromusic.helper.SortOrder; import code.name.monkey.retromusic.interfaces.CabHolder; import code.name.monkey.retromusic.interfaces.MainActivityFragmentCallbacks; import code.name.monkey.retromusic.util.Compressor; +import code.name.monkey.retromusic.util.ImageUtil; import code.name.monkey.retromusic.util.PreferenceUtil; import code.name.monkey.retromusic.util.RetroColorUtil; import code.name.monkey.retromusic.util.RetroUtil; @@ -167,7 +169,7 @@ public class LibraryFragment extends AbsMainActivityFragment implements CabHolde TintHelper.setTintAuto(contentContainer, primaryColor, true); toolbar.setBackgroundColor(primaryColor); - + toolbar.setLogo( R.drawable.ic_person_flat); toolbar.setNavigationIcon(null); appBarLayout.setBackgroundColor(primaryColor); appBarLayout.addOnOffsetChangedListener((appBarLayout, verticalOffset) -> diff --git a/app/src/main/java/code/name/monkey/retromusic/util/ImagePicker.java b/app/src/main/java/code/name/monkey/retromusic/util/ImagePicker.java deleted file mode 100644 index b7bc2dba..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/util/ImagePicker.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.util; - -import android.app.Activity; -import android.content.ContentUris; -import android.content.Context; -import android.content.Intent; -import android.content.pm.ResolveInfo; -import android.content.res.AssetFileDescriptor; -import android.database.Cursor; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Matrix; -import android.media.ExifInterface; -import android.net.Uri; -import android.provider.DocumentsContract; -import android.provider.MediaStore; -import android.util.Log; - -import androidx.annotation.Nullable; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.List; - -import code.name.monkey.retromusic.App; - -/** - * Author: Mario Velasco Casquero - * Date: 08/09/2015 - * Email: m3ario@gmail.com - */ -public class ImagePicker { - private static final int DEFAULT_MIN_WIDTH_QUALITY = 400; // min pixels - private static final String TAG = "ImagePicker"; - private static final String TEMP_IMAGE_NAME = "tempImage"; - public static int minWidthQuality = DEFAULT_MIN_WIDTH_QUALITY; - - - - private static List addIntentsToList(Context context, List list, Intent intent) { - List resInfo = context.getPackageManager().queryIntentActivities(intent, 0); - for (ResolveInfo resolveInfo : resInfo) { - String packageName = resolveInfo.activityInfo.packageName; - Intent targetedIntent = new Intent(intent); - targetedIntent.setPackage(packageName); - list.add(targetedIntent); - Log.d(TAG, "Intent: " + intent.getAction() + " package: " + packageName); - } - return list; - } - - - public static Bitmap getImageFromResult(Context context, int resultCode, - Intent imageReturnedIntent) { - Log.d(TAG, "getImageFromResult, resultCode: " + resultCode); - Bitmap bm = null; - File imageFile = getTempFile(context); - if (resultCode == Activity.RESULT_OK) { - Uri selectedImage; - boolean isCamera = (imageReturnedIntent == null || - imageReturnedIntent.getData() == null || - imageReturnedIntent.getData().toString().contains(imageFile.toString())); - if (isCamera) { /** CAMERA **/ - selectedImage = Uri.fromFile(imageFile); - } else { /** ALBUM **/ - selectedImage = imageReturnedIntent.getData(); - } - Log.d(TAG, "selectedImage: " + selectedImage); - - bm = getImageResized(context, selectedImage); - int rotation = getRotation(context, selectedImage, isCamera); - bm = rotate(bm, rotation); - } - return bm; - } - - - private static File getTempFile(Context context) { - File imageFile = new File(context.getExternalCacheDir(), TEMP_IMAGE_NAME); - imageFile.getParentFile().mkdirs(); - return imageFile; - } - - private static Bitmap decodeBitmap(Context context, Uri theUri, int sampleSize) { - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inSampleSize = sampleSize; - - AssetFileDescriptor fileDescriptor = null; - try { - fileDescriptor = context.getContentResolver().openAssetFileDescriptor(theUri, "r"); - } catch (FileNotFoundException e) { - e.printStackTrace(); - } - - Bitmap actuallyUsableBitmap = BitmapFactory.decodeFileDescriptor( - fileDescriptor.getFileDescriptor(), null, options); - - Log.d(TAG, options.inSampleSize + " sample method bitmap ... " + - actuallyUsableBitmap.getWidth() + " " + actuallyUsableBitmap.getHeight()); - - return actuallyUsableBitmap; - } - - /** - * Resize to avoid using too much memory loading big images (e.g.: 2560*1920) - **/ - private static Bitmap getImageResized(Context context, Uri selectedImage) { - Bitmap bm = null; - int[] sampleSizes = new int[]{5, 3, 2, 1}; - int i = 0; - do { - bm = decodeBitmap(context, selectedImage, sampleSizes[i]); - Log.d(TAG, "resizer: new bitmap width = " + bm.getWidth()); - i++; - } while (bm.getWidth() < minWidthQuality && i < sampleSizes.length); - return bm; - } - - - private static int getRotation(Context context, Uri imageUri, boolean isCamera) { - int rotation; - if (isCamera) { - rotation = getRotationFromCamera(context, imageUri); - } else { - rotation = getRotationFromGallery(context, imageUri); - } - Log.d(TAG, "Image rotation: " + rotation); - return rotation; - } - - private static int getRotationFromCamera(Context context, Uri imageFile) { - int rotate = 0; - try { - - context.getContentResolver().notifyChange(imageFile, null); - ExifInterface exif = new ExifInterface(imageFile.getPath()); - int orientation = exif.getAttributeInt( - ExifInterface.TAG_ORIENTATION, - ExifInterface.ORIENTATION_NORMAL); - - switch (orientation) { - case ExifInterface.ORIENTATION_ROTATE_270: - rotate = 270; - break; - case ExifInterface.ORIENTATION_ROTATE_180: - rotate = 180; - break; - case ExifInterface.ORIENTATION_ROTATE_90: - rotate = 90; - break; - } - } catch (Exception e) { - e.printStackTrace(); - } - return rotate; - } - - public static int getRotationFromGallery(Context context, Uri imageUri) { - int result = 0; - String[] columns = {MediaStore.Images.Media.ORIENTATION}; - Cursor cursor = null; - try { - cursor = context.getContentResolver().query(imageUri, columns, null, null, null); - if (cursor != null && cursor.moveToFirst()) { - int orientationColumnIndex = cursor.getColumnIndex(columns[0]); - result = cursor.getInt(orientationColumnIndex); - } - } catch (Exception e) { - //Do nothing - } finally { - if (cursor != null) { - cursor.close(); - } - }//End of try-catch block - return result; - } - - - private static Bitmap rotate(Bitmap bm, int rotation) { - if (rotation != 0) { - Matrix matrix = new Matrix(); - matrix.postRotate(rotation); - Bitmap bmOut = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true); - return bmOut; - } - return bm; - } -} \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/util/MusicLibrary.java b/app/src/main/java/code/name/monkey/retromusic/util/MusicLibrary.java deleted file mode 100644 index a31acbad..00000000 --- a/app/src/main/java/code/name/monkey/retromusic/util/MusicLibrary.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2019 Hemanth Savarala. - * - * Licensed under the GNU General Public License v3 - * - * This is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by - * the Free Software Foundation either version 3 of the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the GNU General Public License for more details. - */ - -package code.name.monkey.retromusic.util; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.support.v4.media.MediaBrowserCompat; -import android.support.v4.media.MediaMetadataCompat; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.TreeMap; - -import code.name.monkey.retromusic.BuildConfig; - -public class MusicLibrary { - private static final TreeMap music = new TreeMap<>(); - private static final HashMap albumRes = new HashMap<>(); - private static final HashMap musicRes = new HashMap<>(); - - public static String getRoot() { - return "root"; - } - - public static String getSongUri(String mediaId) { - return "android.resource://" + BuildConfig.APPLICATION_ID + "/" + getMusicRes(mediaId); - } - - private static String getAlbumArtUri(String albumArtResName) { - return "android.resource://" + BuildConfig.APPLICATION_ID + "/drawable/" + albumArtResName; - } - - private static int getMusicRes(String mediaId) { - return musicRes.containsKey(mediaId) ? musicRes.get(mediaId) : 0; - } - - private static int getAlbumRes(String mediaId) { - return albumRes.containsKey(mediaId) ? albumRes.get(mediaId) : 0; - } - - public static Bitmap getAlbumBitmap(Context ctx, String mediaId) { - return BitmapFactory.decodeResource(ctx.getResources(), MusicLibrary.getAlbumRes(mediaId)); - } - - public static List getMediaItems() { - List result = new ArrayList<>(); - for (MediaMetadataCompat metadata : music.values()) { - result.add( - new MediaBrowserCompat.MediaItem( - metadata.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE)); - } - return result; - } - - public static String getPreviousSong(String currentMediaId) { - String prevMediaId = music.lowerKey(currentMediaId); - if (prevMediaId == null) { - prevMediaId = music.firstKey(); - } - return prevMediaId; - } - - public static String getNextSong(String currentMediaId) { - String nextMediaId = music.higherKey(currentMediaId); - if (nextMediaId == null) { - nextMediaId = music.firstKey(); - } - return nextMediaId; - } - - public static MediaMetadataCompat getMetadata(Context ctx, String mediaId) { - MediaMetadataCompat metadataWithoutBitmap = music.get(mediaId); - Bitmap albumArt = getAlbumBitmap(ctx, mediaId); - - // Since MediaMetadataCompat is immutable, we need to create a copy to set the album art. - // We don't set it initially on all items so that they don't take unnecessary memory. - MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); - for (String key : - new String[]{ - MediaMetadataCompat.METADATA_KEY_MEDIA_ID, - MediaMetadataCompat.METADATA_KEY_ALBUM, - MediaMetadataCompat.METADATA_KEY_ARTIST, - MediaMetadataCompat.METADATA_KEY_GENRE, - MediaMetadataCompat.METADATA_KEY_TITLE - }) { - builder.putString(key, metadataWithoutBitmap.getString(key)); - } - builder.putLong( - MediaMetadataCompat.METADATA_KEY_DURATION, - metadataWithoutBitmap.getLong(MediaMetadataCompat.METADATA_KEY_DURATION)); - builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, albumArt); - return builder.build(); - } - - private static void createMediaMetadataCompat( - String mediaId, - String title, - String artist, - String album, - String genre, - long duration, - int musicResId, - int albumArtResId, - String albumArtResName) { - music.put(mediaId, - new MediaMetadataCompat.Builder() - .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, mediaId) - .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, album) - .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist) - .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, duration * 1000) - .putString(MediaMetadataCompat.METADATA_KEY_GENRE, genre) - .putString( - MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, - getAlbumArtUri(albumArtResName)) - .putString( - MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, - getAlbumArtUri(albumArtResName)) - .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title) - .build()); - albumRes.put(mediaId, albumArtResId); - musicRes.put(mediaId, musicResId); - } -}