From 585fd1013c03c77d7c7f776aa82bc4c329c3ae55 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sun, 3 Jan 2016 01:54:04 +0100 Subject: [PATCH] Added option to only download artist images on wifi --- app/src/main/AndroidManifest.xml | 1 + .../glide/artistimage/ArtistImageFetcher.java | 20 ++++++++++++------- .../glide/artistimage/ArtistImageLoader.java | 8 +++++--- .../ui/activities/SettingsActivity.java | 10 ++++++++++ .../gramophone/util/PreferenceUtil.java | 6 ++++++ .../com/kabouzeid/gramophone/util/Util.java | 17 ++++++++++++++++ app/src/main/res/values/strings.xml | 4 ++++ .../res/values/strings_activity_settings.xml | 12 +++++++++++ app/src/main/res/xml/pref_images.xml | 10 ++++++++++ 9 files changed, 78 insertions(+), 10 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a16f7279..b14f5e2c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,6 +7,7 @@ + diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageFetcher.java b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageFetcher.java index 868191a2..372c35c4 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageFetcher.java +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageFetcher.java @@ -1,5 +1,7 @@ package com.kabouzeid.gramophone.glide.artistimage; +import android.content.Context; + import com.bumptech.glide.Priority; import com.bumptech.glide.load.data.DataFetcher; import com.bumptech.glide.load.data.HttpUrlFetcher; @@ -8,6 +10,7 @@ import com.kabouzeid.gramophone.lastfm.rest.LastFMRestClient; import com.kabouzeid.gramophone.lastfm.rest.model.LastFmArtist; import com.kabouzeid.gramophone.util.LastFMUtil; import com.kabouzeid.gramophone.util.MusicUtil; +import com.kabouzeid.gramophone.util.Util; import java.io.InputStream; @@ -15,12 +18,14 @@ import java.io.InputStream; * @author Karim Abou Zeid (kabouzeid) */ public class ArtistImageFetcher implements DataFetcher { + private Context context; private final LastFMRestClient lastFMRestClient; private final ArtistImageRequest model; private HttpUrlFetcher urlFetcher; private volatile boolean isCancelled; - public ArtistImageFetcher(LastFMRestClient lastFMRestClient, ArtistImageRequest model) { + public ArtistImageFetcher(Context context, LastFMRestClient lastFMRestClient, ArtistImageRequest model) { + this.context = context; this.lastFMRestClient = lastFMRestClient; this.model = model; } @@ -32,14 +37,15 @@ public class ArtistImageFetcher implements DataFetcher { @Override public InputStream loadData(Priority priority) throws Exception { - if (MusicUtil.isArtistNameUnknown(model.artistName)) return null; + if (!MusicUtil.isArtistNameUnknown(model.artistName) && Util.isAllowedToAutoDownload(context)) { + LastFmArtist lastFmArtist = lastFMRestClient.getApiService().getArtistInfo(model.artistName, model.skipOkHttpCache ? "no-cache" : null).execute().body(); - LastFmArtist lastFmArtist = lastFMRestClient.getApiService().getArtistInfo(model.artistName, model.skipOkHttpCache ? "no-cache" : null).execute().body(); + if (isCancelled) return null; - if (isCancelled) return null; - - urlFetcher = new HttpUrlFetcher(new GlideUrl(LastFMUtil.getLargestArtistImageUrl(lastFmArtist.getArtist().getImage()))); - return urlFetcher.loadData(priority); + urlFetcher = new HttpUrlFetcher(new GlideUrl(LastFMUtil.getLargestArtistImageUrl(lastFmArtist.getArtist().getImage()))); + return urlFetcher.loadData(priority); + } + return null; } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageLoader.java b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageLoader.java index 1cbf4ea7..3d57108e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageLoader.java +++ b/app/src/main/java/com/kabouzeid/gramophone/glide/artistimage/ArtistImageLoader.java @@ -16,15 +16,17 @@ import java.io.InputStream; */ public class ArtistImageLoader implements StreamModelLoader { + private Context context; private LastFMRestClient lastFMRestClient; - public ArtistImageLoader(LastFMRestClient lastFMRestClient) { + public ArtistImageLoader(Context context, LastFMRestClient lastFMRestClient) { + this.context = context; this.lastFMRestClient = lastFMRestClient; } @Override public DataFetcher getResourceFetcher(ArtistImageRequest model, int width, int height) { - return new ArtistImageFetcher(lastFMRestClient, model); + return new ArtistImageFetcher(context, lastFMRestClient, model); } public static class Factory implements ModelLoaderFactory { @@ -51,7 +53,7 @@ public class ArtistImageLoader implements StreamModelLoader @Override public ModelLoader build(Context context, GenericLoaderFactory factories) { - return new ArtistImageLoader(client); + return new ArtistImageLoader(context, client); } @Override diff --git a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java index 9b8dfd01..8030e1de 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java +++ b/app/src/main/java/com/kabouzeid/gramophone/ui/activities/SettingsActivity.java @@ -148,6 +148,16 @@ public class SettingsActivity extends AbsBaseActivity implements ColorChooserDia } }); + final Preference autoDownloadImagesPolicy = findPreference("auto_download_images_policy"); + setSummary(autoDownloadImagesPolicy); + autoDownloadImagesPolicy.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, @NonNull Object o) { + setSummary(autoDownloadImagesPolicy, o); + return true; + } + }); + ColorChooserPreference primaryColor = (ColorChooserPreference) findPreference("primary_color"); primaryColor.setColor(PreferenceUtil.getInstance(getActivity()).getThemeColorPrimary(getActivity())); primaryColor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java index 9790d2d7..5f5ac57b 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/PreferenceUtil.java @@ -63,6 +63,8 @@ public final class PreferenceUtil { public static final String LAST_CHANGELOG_VERSION = "last_changelog_version"; public static final String INTRO_SHOWN = "intro_shown"; + public static final String AUTO_DOWNLOAD_IMAGES_POLICY = "auto_download_images_policy"; + private static PreferenceUtil sInstance; private final SharedPreferences mPreferences; @@ -371,4 +373,8 @@ public final class PreferenceUtil { public final boolean introShown() { return mPreferences.getBoolean(INTRO_SHOWN, false); } + + public final String autoDownloadImagesPolicy() { + return mPreferences.getString(AUTO_DOWNLOAD_IMAGES_POLICY, "only_wifi"); + } } diff --git a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java index 8f28b9d6..b08c61b0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/util/Util.java +++ b/app/src/main/java/com/kabouzeid/gramophone/util/Util.java @@ -9,6 +9,8 @@ import android.content.res.TypedArray; import android.graphics.Point; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.os.Build; import android.support.annotation.AttrRes; import android.support.annotation.DrawableRes; @@ -114,4 +116,19 @@ public class Util { return config.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; } else return false; } + + public static boolean isAllowedToAutoDownload(final Context context) { + switch (PreferenceUtil.getInstance(context).autoDownloadImagesPolicy()) { + case "always": + return true; + case "only_wifi": + final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo netInfo = connectivityManager.getActiveNetworkInfo(); + return netInfo != null && netInfo.getType() == ConnectivityManager.TYPE_WIFI && netInfo.isConnectedOrConnecting(); + case "never": + default: + return false; + } + } + } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 107c838c..5960a2b6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -96,6 +96,9 @@ Light Dark Black (AMOLED) + Always + Only on wifi + Never Equalizer Colors Now playing @@ -107,6 +110,7 @@ Colored navigation bar Start page Show album cover + Auto download artist images Blur album cover Colored notification Ignore Media Store covers diff --git a/app/src/main/res/values/strings_activity_settings.xml b/app/src/main/res/values/strings_activity_settings.xml index 850e2d65..80c9fbe6 100644 --- a/app/src/main/res/values/strings_activity_settings.xml +++ b/app/src/main/res/values/strings_activity_settings.xml @@ -27,4 +27,16 @@ 2 + + @string/always + @string/only_on_wifi + @string/never + + + + always + only_wifi + never + + diff --git a/app/src/main/res/xml/pref_images.xml b/app/src/main/res/xml/pref_images.xml index 1b29a4e9..3a6614dc 100644 --- a/app/src/main/res/xml/pref_images.xml +++ b/app/src/main/res/xml/pref_images.xml @@ -11,6 +11,16 @@ android:title="@string/pref_title_ignore_media_store_artwork" android:widgetLayout="@layout/preference_dynamic_checkbox" /> + + \ No newline at end of file