package what.whatandroid; import android.app.Application; import android.content.Context; import android.support.v7.app.AppCompatDelegate; import android.view.View; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.Spinner; import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.drawable.GlideDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; import api.soup.MySoup; import what.whatandroid.imgloader.ImageLoadFailTracker; import what.whatandroid.settings.SettingsActivity; /** * Created by fatih on 11.9.2015. * This base application keeps the MySoup session with the site active and takes care of loading * images using Glide */ public class WhatApplication extends Application { //TODO: Developers put your local Gazelle install IP here instead of testing on the live site //I recommend setting up with Vagrant: https://github.com/dr4g0nnn/VagrantGazelle public static final String DEFAULT_SITE = ""; @Override public void onCreate() { super.onCreate(); initSoup(DEFAULT_SITE); if (SettingsActivity.lightThemeEnabled(getApplicationContext())) { AppCompatDelegate.setDefaultNightMode( AppCompatDelegate.MODE_NIGHT_NO); } else { AppCompatDelegate.setDefaultNightMode( AppCompatDelegate.MODE_NIGHT_YES); } } /** * Initialize MySoup so that we can start making API requests */ public void initSoup(String site) { MySoup.setSite(site, true); MySoup.setUserAgent("WhatAndroid Android"); } /** * Main method for all image displaying operations * Fail tracking is done here instead of wherever this method is called from. */ public static void loadImage(Context context, final String url, final ImageView imageView, final ProgressBar spinner, final ImageLoadFailTracker failTracker, final Integer failImage) { if (failTracker != null && failTracker.failed(url)) { if (spinner != null) spinner.setVisibility(View.GONE); if (failImage != null) { imageView.setImageResource(failImage); } else { imageView.setImageResource(R.drawable.no_artwork); } } else { if (spinner != null) spinner.setVisibility(View.VISIBLE); Glide.with(context) .load(url) .listener(new RequestListener<String, GlideDrawable>() { @Override public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { if (spinner != null) { spinner.setVisibility(View.GONE); } if (failTracker != null) { failTracker.addFailed(url); } if (failImage != null) { imageView.setImageResource(failImage); } else { imageView.setImageResource(R.drawable.no_artwork); } return true; } @Override public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) { if (spinner != null) { spinner.setVisibility(View.GONE); } // imageView.setImageDrawable(resource); return false; } }) .into(imageView); } } }