package info.justaway.model; import android.content.Context; import android.content.SharedPreferences; import android.os.AsyncTask; import android.view.View; import android.widget.ImageView; import com.google.gson.Gson; import java.util.ArrayList; import java.util.HashMap; import info.justaway.JustawayApplication; import info.justaway.settings.BasicSettings; import info.justaway.util.ImageUtil; import twitter4j.ResponseList; import twitter4j.TwitterException; import twitter4j.User; import twitter4j.auth.AccessToken; public class UserIconManager { private static final String PREF_NAME_USER_ICON_MAP = "user_icon_map"; private static final String PREF_KEY_USER_ICON_MAP = "data/v2"; private static HashMap<String, String> sUserIconMap = new HashMap<String, String>(); private static final String PREF_KEY_USER_NAME_MAP = "data/name"; private static HashMap<String, String> sUserNameMap = new HashMap<String, String>(); private static SharedPreferences getSharedPreferences() { return JustawayApplication.getApplication() .getSharedPreferences(PREF_NAME_USER_ICON_MAP, Context.MODE_PRIVATE); } public static void displayUserIcon(User user, final ImageView view) { String url; String size = BasicSettings.getUserIconSize(); switch (size) { case "bigger": url = user.getBiggerProfileImageURL(); break; case "normal": url = user.getProfileImageURL(); break; case "mini": url = user.getMiniProfileImageURL(); break; default: view.setVisibility(View.GONE); return; } if (BasicSettings.getUserIconRoundedOn()) { ImageUtil.displayRoundedImage(url, view); } else { ImageUtil.displayImage(url, view); } } public static String getName(final long userId) { String name = sUserNameMap.get(String.valueOf(userId)); if (name != null) { return name; } return ""; } /** * userIdからアイコンを取得する */ public static void displayUserIcon(final long userId, final ImageView view) { String url = sUserIconMap.get(String.valueOf(userId)); if (url != null) { ImageUtil.displayRoundedImage(url, view); return; } // すぐにURLが取れない時は一旦消す view.setImageDrawable(null); } @SuppressWarnings("unchecked") public static void addUserIconMap(User user) { final SharedPreferences preferences = getSharedPreferences(); final Gson gson = new Gson(); String iconJson = getSharedPreferences().getString(PREF_KEY_USER_ICON_MAP, null); if (iconJson != null) { sUserIconMap = gson.fromJson(iconJson, sUserIconMap.getClass()); } String nameJson = getSharedPreferences().getString(PREF_KEY_USER_NAME_MAP, null); if (nameJson != null) { sUserNameMap = gson.fromJson(nameJson, sUserNameMap.getClass()); } sUserIconMap.put(String.valueOf(user.getId()), user.getBiggerProfileImageURL()); sUserNameMap.put(String.valueOf(user.getId()), user.getName()); SharedPreferences.Editor editor = preferences.edit(); editor.clear(); editor.putString(PREF_KEY_USER_ICON_MAP, gson.toJson(sUserIconMap)); editor.putString(PREF_KEY_USER_NAME_MAP, gson.toJson(sUserNameMap)); editor.apply(); } @SuppressWarnings("unchecked") public static void warmUpUserIconMap() { ArrayList<AccessToken> accessTokens = AccessTokenManager.getAccessTokens(); if (accessTokens == null || accessTokens.size() == 0) { return; } final Gson gson = new Gson(); String iconJson = getSharedPreferences().getString(PREF_KEY_USER_ICON_MAP, null); if (iconJson != null) { sUserIconMap = gson.fromJson(iconJson, sUserIconMap.getClass()); } String nameJson = getSharedPreferences().getString(PREF_KEY_USER_NAME_MAP, null); if (nameJson != null) { sUserNameMap = gson.fromJson(nameJson, sUserNameMap.getClass()); } final long userIds[] = new long[accessTokens.size()]; int i = 0; for (AccessToken accessToken : accessTokens) { userIds[i] = accessToken.getUserId(); i++; } new AsyncTask<Void, Void, ResponseList<User>>() { @Override protected ResponseList<User> doInBackground(Void... voids) { try { return TwitterManager.getTwitter().lookupUsers(userIds); } catch (TwitterException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(ResponseList<User> users) { if (users == null) { return; } sUserIconMap.clear(); sUserNameMap.clear(); for (User user : users) { sUserIconMap.put(String.valueOf(user.getId()), user.getBiggerProfileImageURL()); sUserNameMap.put(String.valueOf(user.getId()), user.getName()); } SharedPreferences.Editor editor = getSharedPreferences().edit(); editor.clear(); editor.putString(PREF_KEY_USER_ICON_MAP, gson.toJson(sUserIconMap)); editor.putString(PREF_KEY_USER_NAME_MAP, gson.toJson(sUserNameMap)); editor.apply(); } }.execute(); } }