package com.linangran.tgfcapp.utils; import android.content.Context; import android.content.SharedPreferences; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.preference.PreferenceManager; import android.provider.Settings; import com.google.android.vending.licensing.AESObfuscator; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.linangran.tgfcapp.data.ForumBasicData; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; /** * Created by linangran on 25/1/15. */ public class PreferenceUtils { public static final String KEY_IS_LOGIN = "is_login"; public static final String KEY_PIKA_UID = "tgc_pika_uid"; public static final String KEY_PIKA_VERIFY = "tgc_pika_verify"; public static final String KEY_USERNAME = "username"; public static final String KEY_PINNED_LIST = "pinned_list"; public static final String KEY_DRAFT_TITLE = "draft_title"; public static final String KEY_DRAFT_CONTENT = "draft_content"; public static final String KEY_HAS_DRAFT = "has_draft"; public static final String KEY_LAST_VIEWED_FORUM_ID = "last_viewed_forum_id"; public static final String KEY_ABOUT_VERSION = "about_version"; public static final String KEY_ITEMS_PER_PAGE = "items_per_page"; public static final String KEY_POSTS_PER_PAGE = "posts_per_page"; public static final String KEY_SHOW_PINNED_POSTS = "show_pinned_posts"; public static final String KEY_SHOW_IMAGE_ON_WIFI = "show_image_on_wifi"; public static final String KEY_SHOW_IMAGE_ON_CELLULAR = "show_image_on_cellular"; public static final String KEY_HIDE_QUICK_PANEL = "hide_quick_panel"; public static final String KEY_VIRTUAL_KEY_OPTIMIZATION = "virtual_key_layout_optimization"; public static final String KEY_SYNCHRONIZE_ACCOUNTS = "synchronize_accounts"; public static final String KEY_HAS_CHECKED_GOOGLE_PLAY = "has_checked_google_play"; public static AESObfuscator AES_OBFUSCATOR; static SharedPreferences pref = null; static Context applicationContext = null; public static void setContext(Context context) { PreferenceUtils.applicationContext = context; PreferenceUtils.pref = PreferenceManager.getDefaultSharedPreferences(context); AES_OBFUSCATOR = new AESObfuscator(APIURL.SALT, applicationContext.getPackageName(), Settings.Secure.ANDROID_ID); } public static boolean isLogin() { return pref.getBoolean(KEY_IS_LOGIN, false); } public static String getUID() { return pref.getString(KEY_PIKA_UID, null); } public static ForumBasicData getLastViewedForum() { int fid = pref.getInt(KEY_LAST_VIEWED_FORUM_ID, -1); if (fid == -1) { return ForumBasicDataList.getDefaultForum(); } else { ForumBasicData data = ForumBasicDataList.getForumBasicDataByFid(fid); if (data != null) { return data; } else { return ForumBasicDataList.getDefaultForum(); } } } public static void saveLastViewedForum(int fid) { SharedPreferences.Editor editor = pref.edit(); editor.putInt(KEY_LAST_VIEWED_FORUM_ID, fid); editor.commit(); return; } private static <T> T getObject(String key, Type type) { String s = pref.getString(key, null); if (s == null) { return null; } else { Gson gson = new Gson(); return gson.fromJson(s, type); } } private static <T> void putObject(String key, Object value) { Gson gson = new Gson(); String gsonData = gson.toJson(value); SharedPreferences.Editor editor = pref.edit(); editor.putString(key, gsonData); //Log.i("", gsonData); editor.commit(); return; } public static List<ForumBasicData> getPinnedList() { Type type = new TypeToken<List<ForumBasicData>>() { }.getType(); List<ForumBasicData> storedValue = getObject(KEY_PINNED_LIST, type); if (storedValue == null) { return new ArrayList<ForumBasicData>(); } else { return storedValue; } } public static void addToPinnedList(int fid) { List<ForumBasicData> storedValue = getPinnedList(); int t = getPinnedDataById(fid, storedValue); if (t == -1) { storedValue.add(ForumBasicDataList.getForumBasicDataByFid(fid)); putObject(KEY_PINNED_LIST, storedValue); } return; } public static void removeFromPinnedList(int fid) { List<ForumBasicData> storedValue = getPinnedList(); int t = getPinnedDataById(fid, storedValue); if (t != -1) { storedValue.remove(t); putObject(KEY_PINNED_LIST, storedValue); } return; } public static boolean isPinned(int fid) { List<ForumBasicData> storedValue = getPinnedList(); int t = getPinnedDataById(fid, storedValue); return t != -1; } private static int getPinnedDataById(int fid, List<ForumBasicData> list) { int r = -1; for (int i = 0; i < list.size(); i++) { if (list.get(i).fid == fid) { r = i; break; } } return r; } public static String getVerify() { return pref.getString(KEY_PIKA_VERIFY, null); } public static String getUsername() { return pref.getString(KEY_USERNAME, null); } public static void setLogin(String uid, String verify, String username) { SharedPreferences.Editor editor = pref.edit(); editor.putBoolean(KEY_IS_LOGIN, true); editor.putString(KEY_PIKA_UID, uid); editor.putString(KEY_PIKA_VERIFY, verify); editor.putString(KEY_USERNAME, username); editor.commit(); } public static void prepareLogin(String uid, String verify) { SharedPreferences.Editor editor = pref.edit(); editor.putString(KEY_PIKA_UID, uid); editor.putString(KEY_PIKA_VERIFY, verify); editor.commit(); } public static void setLogout() { SharedPreferences.Editor editor = pref.edit(); editor.putBoolean(KEY_IS_LOGIN, false); editor.commit(); } public static boolean hasDraft() { return pref.getBoolean(KEY_HAS_DRAFT, false); } public static String getDraftTitle() { return pref.getString(KEY_DRAFT_TITLE, ""); } public static String getDraftContent() { return pref.getString(KEY_DRAFT_CONTENT, ""); } public static void saveDraft(String title, String content) { SharedPreferences.Editor editor = pref.edit(); editor.putBoolean(KEY_HAS_DRAFT, true); if (title != null && title.length() != 0) { editor.putString(KEY_DRAFT_TITLE, title); } editor.putString(KEY_DRAFT_CONTENT, content); editor.commit(); } public static void discardDraft() { SharedPreferences.Editor editor = pref.edit(); editor.putBoolean(KEY_HAS_DRAFT, false); editor.commit(); } public static boolean shouldShowImage() { if (isOnWifi()) { return showImageOnWifi(); } else { return showImageOnCellular(); } } public static int getItemCountOnForumList() { String value = pref.getString(KEY_ITEMS_PER_PAGE, "30"); return Integer.valueOf(value); } public static int getPostCountOnContentList() { String value = pref.getString(KEY_POSTS_PER_PAGE, "30"); return Integer.valueOf(value); } public static boolean showPinnedPosts() { return pref.getBoolean(KEY_SHOW_PINNED_POSTS, true); } public static boolean hideQuickPanel() { return pref.getBoolean(KEY_HIDE_QUICK_PANEL, false); } private static boolean showImageOnWifi() { return pref.getBoolean(KEY_SHOW_IMAGE_ON_WIFI, true); } private static boolean showImageOnCellular() { return pref.getBoolean(KEY_SHOW_IMAGE_ON_CELLULAR, false); } private static boolean isOnWifi() { ConnectivityManager connManager = (ConnectivityManager) applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return mWifi.isConnected(); } public static boolean hasRegisteredOnGooglePlay() { //return true; return pref.getBoolean(KEY_HAS_CHECKED_GOOGLE_PLAY, false); } public static void setRegisteredOnGooglePlay() { SharedPreferences.Editor edit = pref.edit(); edit.putBoolean(KEY_HAS_CHECKED_GOOGLE_PLAY, true); edit.commit(); return; } public static boolean useVirtualKeyOptimization() { return pref.getBoolean(KEY_VIRTUAL_KEY_OPTIMIZATION, false); } public static boolean syncAccounts() { return pref.getBoolean(KEY_SYNCHRONIZE_ACCOUNTS, false); } }