Added option to only download artist images on wifi

This commit is contained in:
Karim Abou Zeid 2016-01-03 01:54:04 +01:00
commit 585fd1013c
9 changed files with 78 additions and 10 deletions

View file

@ -7,6 +7,7 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="com.android.vending.BILLING" />

View file

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

View file

@ -16,15 +16,17 @@ import java.io.InputStream;
*/
public class ArtistImageLoader implements StreamModelLoader<ArtistImageRequest> {
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<InputStream> getResourceFetcher(ArtistImageRequest model, int width, int height) {
return new ArtistImageFetcher(lastFMRestClient, model);
return new ArtistImageFetcher(context, lastFMRestClient, model);
}
public static class Factory implements ModelLoaderFactory<ArtistImageRequest, InputStream> {
@ -51,7 +53,7 @@ public class ArtistImageLoader implements StreamModelLoader<ArtistImageRequest>
@Override
public ModelLoader<ArtistImageRequest, InputStream> build(Context context, GenericLoaderFactory factories) {
return new ArtistImageLoader(client);
return new ArtistImageLoader(context, client);
}
@Override

View file

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

View file

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

View file

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

View file

@ -96,6 +96,9 @@
<string name="light_theme_name">Light</string>
<string name="dark_theme_name">Dark</string>
<string name="black_theme_name">Black (AMOLED)</string>
<string name="always">Always</string>
<string name="only_on_wifi">Only on wifi</string>
<string name="never">Never</string>
<string name="equalizer">Equalizer</string>
<string name="pref_header_colors">Colors</string>
<string name="pref_header_now_playing_screen">Now playing</string>
@ -107,6 +110,7 @@
<string name="pref_title_navigation_bar">Colored navigation bar</string>
<string name="pref_title_set_default_start_page">Start page</string>
<string name="pref_title_album_art_on_lockscreen">Show album cover</string>
<string name="pref_title_auto_download_artist_images">Auto download artist images</string>
<string name="pref_title_blurred_album_art">Blur album cover</string>
<string name="pref_title_colored_notification">Colored notification</string>
<string name="pref_title_ignore_media_store_artwork">Ignore Media Store covers</string>

View file

@ -27,4 +27,16 @@
<item>2</item>
</string-array>
<string-array name="pref_auto_download_images_titles">
<item>@string/always</item>
<item>@string/only_on_wifi</item>
<item>@string/never</item>
</string-array>
<string-array name="pref_auto_download_images_values">
<item>always</item>
<item>only_wifi</item>
<item>never</item>
</string-array>
</resources>

View file

@ -11,6 +11,16 @@
android:title="@string/pref_title_ignore_media_store_artwork"
android:widgetLayout="@layout/preference_dynamic_checkbox" />
<com.afollestad.materialdialogs.prefs.MaterialListPreference
android:defaultValue="only_wifi"
android:entries="@array/pref_auto_download_images_titles"
android:entryValues="@array/pref_auto_download_images_values"
android:key="auto_download_images_policy"
android:layout="@layout/preference_custom"
android:negativeButtonText="@null"
android:positiveButtonText="@null"
android:title="@string/pref_title_auto_download_artist_images" />
</com.kabouzeid.gramophone.prefs.DynamicPreferenceCategory>
</PreferenceScreen>