package kr.kdev.dg1s.biowiki.ui.prefs;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceCategory;
import android.preference.PreferenceGroup;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
import com.actionbarsherlock.view.MenuItem;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.google.gson.internal.StringMap;
import org.wordpress.passcodelock.AppLockManager;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import kr.kdev.dg1s.biowiki.BioWiki;
import kr.kdev.dg1s.biowiki.R;
import kr.kdev.dg1s.biowiki.ui.ShareIntentReceiverActivity;
import kr.kdev.dg1s.biowiki.ui.accounts.ManageBlogsActivity;
import kr.kdev.dg1s.biowiki.ui.accounts.WelcomeActivity;
import kr.kdev.dg1s.biowiki.ui.notifications.NotificationUtils;
import kr.kdev.dg1s.biowiki.util.AppLog;
import kr.kdev.dg1s.biowiki.util.BWEditTextPreference;
import kr.kdev.dg1s.biowiki.util.MapUtils;
import kr.kdev.dg1s.biowiki.util.StringUtils;
import kr.kdev.dg1s.biowiki.util.ToastUtils;
@SuppressWarnings("deprecation")
public class PreferencesActivity extends SherlockPreferenceActivity {
public static final int RESULT_SIGNED_OUT = RESULT_FIRST_USER;
private OnPreferenceClickListener signOutPreferenceClickListener = new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(PreferencesActivity.this);
dialogBuilder.setTitle(getResources().getText(R.string.sign_out));
dialogBuilder.setMessage(getString(R.string.sign_out_confirm));
dialogBuilder.setPositiveButton(R.string.sign_out,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// set the result code so caller knows the user signed out
setResult(RESULT_SIGNED_OUT);
BioWiki.signOut(PreferencesActivity.this);
finish();
}
}
);
dialogBuilder.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
// Just close the window.
}
}
);
dialogBuilder.setCancelable(true);
if (!isFinishing())
dialogBuilder.create().show();
return true;
}
};
private static Comparator<StringMap<?>> BlogNameComparatorForMutedBlogsList = new Comparator<StringMap<?>>() {
public int compare(StringMap<?> blog1, StringMap<?> blog2) {
StringMap<?> blogMap1 = blog1;
StringMap<?> blogMap2 = blog2;
String blogName1 = blogMap1.get("blog_name").toString();
if (blogName1.length() == 0) {
blogName1 = blogMap1.get("url").toString();
}
String blogName2 = blogMap2.get("blog_name").toString();
if (blogName2.length() == 0) {
blogName2 = blogMap2.get("url").toString();
}
return blogName1.compareToIgnoreCase(blogName2);
}
};
BWEditTextPreference mTaglineTextPreference;
private ArrayList<StringMap<Double>> mMutedBlogsList;
private Map<String, Object> mNotificationSettings;
private SharedPreferences mSettings;
private boolean mNotificationSettingsChanged;
/**
* Listens for changes to notification type settings
*/
private OnPreferenceChangeListener mTypeChangeListener = new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// Update the mNoteSettings map with the new value
if (preference instanceof CheckBoxPreference) {
CheckBoxPreference checkBoxPreference = (CheckBoxPreference) preference;
boolean isChecked = (Boolean) newValue;
String key = preference.getKey();
StringMap<Integer> typeMap = (StringMap<Integer>) mNotificationSettings.get(key);
typeMap.put("value", (isChecked) ? 1 : 0);
mNotificationSettings.put(key, typeMap);
checkBoxPreference.setChecked(isChecked);
mNotificationSettingsChanged = true;
}
return false;
}
};
/**
* Listens for changes to notification blogs settings
*/
private OnPreferenceChangeListener mMuteBlogChangeListener = new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference instanceof CheckBoxPreference) {
CheckBoxPreference checkBoxPreference = (CheckBoxPreference) preference;
boolean isChecked = (Boolean) newValue;
int id = checkBoxPreference.getOrder();
StringMap<Double> blogMap = (StringMap<Double>) mMutedBlogsList.get(id);
blogMap.put("value", (!isChecked) ? 1.0 : 0.0);
mMutedBlogsList.set(id, blogMap);
StringMap<ArrayList> mutedBlogsMap = (StringMap<ArrayList>) mNotificationSettings.get("muted_blogs");
mutedBlogsMap.put("value", mMutedBlogsList);
mNotificationSettings.put("muted_blogs", mutedBlogsMap);
checkBoxPreference.setChecked(isChecked);
mNotificationSettingsChanged = true;
}
return false;
}
};
/**
* Listens for changes to notification enabled toggle
*/
private OnPreferenceChangeListener mNotificationsEnabledChangeListener = new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference instanceof CheckBoxPreference) {
final boolean isChecked = (Boolean) newValue;
if (isChecked) {
StringMap<String> muteUntilMap = (StringMap<String>) mNotificationSettings.get("mute_until");
muteUntilMap.put("value", "0");
mNotificationSettings.put("mute_until", muteUntilMap);
mNotificationSettingsChanged = true;
return true;
} else {
final Dialog dialog = new Dialog(PreferencesActivity.this);
dialog.setContentView(R.layout.notifications_enabled_dialog);
dialog.setTitle(R.string.notifications);
dialog.setCancelable(true);
Button offButton = (Button) dialog.findViewById(R.id.notificationsOff);
offButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
enabledButtonClick(v);
dialog.dismiss();
}
});
Button oneHourButton = (Button) dialog.findViewById(R.id.notifications1Hour);
oneHourButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
enabledButtonClick(v);
dialog.dismiss();
}
});
Button eightHoursButton = (Button) dialog.findViewById(R.id.notifications8Hours);
eightHoursButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
enabledButtonClick(v);
dialog.dismiss();
}
});
dialog.show();
}
}
return false;
}
};
private PreferenceGroup mNotificationsGroup;
private OnPreferenceClickListener signInPreferenceClickListener = new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Intent i = new Intent(PreferencesActivity.this, WelcomeActivity.class);
i.putExtra("wpcom", true);
i.putExtra("auth-only", true);
startActivityForResult(i, 0);
return true;
}
};
private OnPreferenceClickListener resetAUtoSharePreferenceClickListener =
new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Editor editor = mSettings.edit();
editor.remove(ShareIntentReceiverActivity.SHARE_IMAGE_BLOG_ID_KEY);
editor.remove(ShareIntentReceiverActivity.SHARE_IMAGE_ADDTO_KEY);
editor.remove(ShareIntentReceiverActivity.SHARE_TEXT_BLOG_ID_KEY);
editor.commit();
ToastUtils.showToast(getBaseContext(), R.string.auto_sharing_preference_reset,
ToastUtils.Duration.SHORT);
return true;
}
};
/**
* Sets up the action bar for an {@link PreferenceScreen}
*/
public static void initializeActionBar(PreferenceScreen preferenceScreen) {
if (android.os.Build.VERSION.SDK_INT < 11)
return;
final Dialog dialog = preferenceScreen.getDialog();
if (dialog != null) {
// Initialize the action bar
dialog.getActionBar().setDisplayHomeAsUpEnabled(true);
// Apply custom home button area click listener to close the PreferenceScreen because PreferenceScreens are dialogs which swallow
// events instead of passing to the activity
// Related Issue: https://code.google.com/p/android/issues/detail?id=4611
View homeBtn = dialog.findViewById(android.R.id.home);
if (homeBtn != null) {
OnClickListener dismissDialogClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
};
// Prepare yourselves for some hacky programming
ViewParent homeBtnContainer = homeBtn.getParent();
// The home button is an ImageView inside a FrameLayout
if (homeBtnContainer instanceof FrameLayout) {
ViewGroup containerParent = (ViewGroup) homeBtnContainer.getParent();
if (containerParent instanceof LinearLayout) {
// This view also contains the title text, set the whole view as clickable
((LinearLayout) containerParent).setOnClickListener(dismissDialogClickListener);
} else {
// Just set it on the home button
((FrameLayout) homeBtnContainer).setOnClickListener(dismissDialogClickListener);
}
} else {
// The 'If all else fails' default case
homeBtn.setOnClickListener(dismissDialogClickListener);
}
}
}
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
overridePendingTransition(R.anim.slide_up, R.anim.do_nothing);
setTitle(getResources().getText(R.string.settings));
ActionBar ab = getSupportActionBar();
ab.setDisplayHomeAsUpEnabled(true);
addPreferencesFromResource(R.xml.preferences);
mNotificationsGroup = (PreferenceGroup) findPreference("wp_pref_notifications_category");
OnPreferenceChangeListener preferenceChangeListener = new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (newValue != null) { // cancelled dismiss keyboard
preference.setSummary(newValue.toString());
}
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getListView().getWindowToken(), 0);
return true;
}
};
mTaglineTextPreference = (BWEditTextPreference) findPreference("wp_pref_post_signature");
if (mTaglineTextPreference != null) {
mTaglineTextPreference.setOnPreferenceChangeListener(preferenceChangeListener);
}
Preference signOutPreference = findPreference("wp_pref_sign_out");
signOutPreference.setOnPreferenceClickListener(signOutPreferenceClickListener);
// Preferences.xml wp_share_pref
// Preference resetAutoShare = findPreference("wp_reset_share_pref");
// resetAutoShare.setOnPreferenceClickListener(resetAUtoSharePreferenceClickListener);
mSettings = PreferenceManager.getDefaultSharedPreferences(this);
// AuthenticatorRequest notification settings if needed
/*
if (BioWiki.hasValidWPComCredentials(PreferencesActivity.this)) {
String settingsJson = mSettings.getString(NotificationUtils.WPCOM_PUSH_DEVICE_NOTIFICATION_SETTINGS, null);
if (settingsJson == null) {
com.wordpress.rest.RestRequest.Listener listener = new RestRequest.Listener() {
@Override
public void onResponse(JSONObject jsonObject) {
AppLog.d(AppLog.T.NOTIFS, "Get settings action succeeded");
Editor editor = mSettings.edit();
try {
JSONObject settingsJSON = jsonObject.getJSONObject("settings");
editor.putString(NotificationUtils.WPCOM_PUSH_DEVICE_NOTIFICATION_SETTINGS, settingsJSON.toString());
editor.commit();
} catch (JSONException e) {
AppLog.e(AppLog.T.NOTIFS, "Can't parse the JSON object returned from the server that contains PN settings.", e);
}
refreshWPComAuthCategory();
}
};
RestRequest.ErrorListener errorListener = new RestRequest.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
AppLog.e(AppLog.T.NOTIFS, "Get settings action failed", volleyError); }
};
NotificationUtils.getPushNotificationSettings(PreferencesActivity.this, listener, errorListener);
}
}
*/
//Passcode Lock not supported
if (AppLockManager.getInstance().isAppLockFeatureEnabled() == false) {
PreferenceScreen rootScreen = (PreferenceScreen) findPreference("wp_pref_root");
PreferenceGroup passcodeGroup = (PreferenceGroup) findPreference("wp_passcode_lock_category");
rootScreen.removePreference(passcodeGroup);
} else {
final CheckBoxPreference passcodeEnabledCheckBoxPreference = (CheckBoxPreference) findPreference("wp_pref_passlock_enabled");
//disable on-click changes on the property
passcodeEnabledCheckBoxPreference.setOnPreferenceClickListener(
new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
passcodeEnabledCheckBoxPreference.setChecked(AppLockManager.getInstance().getCurrentAppLock().isPasswordLocked());
return false;
}
}
);
}
displayPreferences();
}
private void hidePostSignatureCategory() {
PreferenceScreen preferenceScreen = (PreferenceScreen) findPreference("wp_pref_root");
PreferenceCategory postSignature = (PreferenceCategory) findPreference("wp_post_signature");
if (preferenceScreen != null && postSignature != null) {
preferenceScreen.removePreference(postSignature);
}
}
private void hideNotificationBlogsCategory() {
PreferenceScreen preferenceScreen = (PreferenceScreen)
findPreference("wp_pref_notifications");
PreferenceCategory blogs = (PreferenceCategory)
findPreference("wp_pref_notification_blogs");
if (preferenceScreen != null && blogs != null) {
preferenceScreen.removePreference(blogs);
}
}
@Override
public void onResume() {
super.onResume();
// the set of blogs may have changed while we were away
updateSelfHostedBlogsPreferenceCategory();
refreshWPComAuthCategory();
//update Passcode lock row if available
if (AppLockManager.getInstance().isAppLockFeatureEnabled()) {
CheckBoxPreference passcodeEnabledCheckBoxPreference = (CheckBoxPreference) findPreference("wp_pref_passlock_enabled");
if (AppLockManager.getInstance().getCurrentAppLock().isPasswordLocked()) {
passcodeEnabledCheckBoxPreference.setChecked(true);
} else {
passcodeEnabledCheckBoxPreference.setChecked(false);
}
}
}
@Override
protected void onPause() {
overridePendingTransition(R.anim.do_nothing, R.anim.slide_down);
setResult(RESULT_OK);
super.onPause();
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
super.onPreferenceTreeClick(preferenceScreen, preference);
// Workaround for Action Bar Home Button not functional with nested PreferenceScreen
if (preference != null && preference instanceof PreferenceScreen) {
// If the user has clicked on a preference screen, set up the action bar
if (preference instanceof PreferenceScreen) {
initializeActionBar((PreferenceScreen) preference);
}
}
return false;
}
/**
* Update the "wpcom blogs" preference blank_linearlayout to contain a preference for each blog to configure
* blog-specific settings.
*/
protected void updateSelfHostedBlogsPreferenceCategory() {
PreferenceCategory blogsCategory = (PreferenceCategory) findPreference("wp_pref_self_hosted_blogs");
blogsCategory.removeAll();
int order = 0;
// Add self-hosted blog button
Preference addBlogPreference = new Preference(this);
addBlogPreference.setTitle(R.string.add_self_hosted_blog);
Intent intentWelcome = new Intent(this, WelcomeActivity.class);
intentWelcome.putExtra(WelcomeActivity.START_FRAGMENT_KEY,
WelcomeActivity.ADD_SELF_HOSTED_BLOG);
addBlogPreference.setIntent(intentWelcome);
addBlogPreference.setOrder(order++);
blogsCategory.addPreference(addBlogPreference);
// Add self hosted list
List<Map<String, Object>> accounts = BioWiki.wpDB.getAccountsBy("dotcomFlag=0", null);
addAccounts(blogsCategory, accounts, order);
}
protected int getEnabledBlogsCount() {
PreferenceScreen selectBlogsCategory = (PreferenceScreen) findPreference("wp_pref_notification_blogs");
int enabledBlogCtr = 0;
for (int i = 0; i < selectBlogsCategory.getPreferenceCount(); i++) {
CheckBoxPreference blogPreference = (CheckBoxPreference) selectBlogsCategory.getPreference(i);
if (blogPreference.isChecked())
enabledBlogCtr++;
}
return enabledBlogCtr;
}
/*
private void addWpComSignIn(PreferenceCategory wpComCategory, int order) {
if (BioWiki.hasValidWPComCredentials(PreferencesActivity.this)) {
String username = mSettings.getString(BioWiki.WPCOM_USERNAME_PREFERENCE, null);
Preference usernamePref = new Preference(this);
usernamePref.setTitle(getString(R.string.username));
usernamePref.setSummary(username);
usernamePref.setSelectable(false);
usernamePref.setOrder(order);
wpComCategory.addPreference(usernamePref);
Preference createWPComBlogPref = new Preference(this);
createWPComBlogPref.setTitle(getString(R.string.create_new_blog_wpcom));
Intent intent = new Intent(this, NewBlogActivity.class);
createWPComBlogPref.setIntent(intent);
createWPComBlogPref.setOrder(order + 1);
wpComCategory.addPreference(createWPComBlogPref);
loadNotifications();
} else {
Preference signInPref = new Preference(this);
signInPref.setTitle(getString(R.string.sign_in));
signInPref.setOnPreferenceClickListener(signInPreferenceClickListener);
wpComCategory.addPreference(signInPref);
PreferenceScreen rootScreen = (PreferenceScreen)findPreference("wp_pref_root");
rootScreen.removePreference(mNotificationsGroup);
}
}
*/
public void displayPreferences() {
// Post signature
if (BioWiki.wpDB.getNumVisibleAccounts() == 0) {
hidePostSignatureCategory();
hideNotificationBlogsCategory();
} else {
if (mTaglineTextPreference.getText() == null || mTaglineTextPreference.getText().equals("")) {
mTaglineTextPreference.setSummary(R.string.posted_from);
mTaglineTextPreference.setText(getString(R.string.posted_from));
} else {
mTaglineTextPreference.setSummary(mTaglineTextPreference.getText());
}
}
}
private void enabledButtonClick(View v) {
StringMap<String> muteUntilMap = (StringMap<String>) mNotificationSettings
.get("mute_until");
if (muteUntilMap != null) {
if (v.getId() == R.id.notificationsOff) {
muteUntilMap.put("value", "forever");
} else if (v.getId() == R.id.notifications1Hour) {
muteUntilMap.put("value",
String.valueOf((System.currentTimeMillis() / 1000) + 3600));
} else if (v.getId() == R.id.notifications8Hours) {
muteUntilMap.put("value",
String.valueOf((System.currentTimeMillis() / 1000) + (3600 * 8)));
}
CheckBoxPreference enabledCheckBoxPreference = (CheckBoxPreference) findPreference("wp_pref_notifications_enabled");
enabledCheckBoxPreference.setChecked(false);
mNotificationSettings.put("mute_until", muteUntilMap);
mNotificationSettingsChanged = true;
}
}
private void sendNotificationsSettings() {
AppLog.d(AppLog.T.NOTIFS, "Send push notification settings");
new sendNotificationSettingsTask().execute();
}
private void addWpComShowHideButton(PreferenceCategory wpComCategory, int order) {
if (BioWiki.wpDB.getNumDotComAccounts() > 0) {
Preference manageBlogPreference = new Preference(this);
manageBlogPreference.setTitle(R.string.show_and_hide_blogs);
Intent intentManage = new Intent(this, ManageBlogsActivity.class);
manageBlogPreference.setIntent(intentManage);
manageBlogPreference.setOrder(order);
wpComCategory.addPreference(manageBlogPreference);
}
}
private void addAccounts(PreferenceCategory category, List<Map<String, Object>> blogs, int order) {
for (Map<String, Object> account : blogs) {
String blogName = StringUtils.unescapeHTML(account.get("blogName").toString());
int accountId = (Integer) account.get("id");
Preference blogSettingsPreference = new Preference(this);
blogSettingsPreference.setTitle(blogName);
try {
// set blog hostname as preference summary if it differs from the blog name
URL blogUrl = new URL(account.get("url").toString());
if (!blogName.equals(blogUrl.getHost())) {
blogSettingsPreference.setSummary(blogUrl.getHost());
}
} catch (MalformedURLException e) {
// do nothing
}
Intent intent = new Intent(this, BlogPreferencesActivity.class);
intent.putExtra("id", accountId);
blogSettingsPreference.setIntent(intent);
blogSettingsPreference.setOrder(order++);
category.addPreference(blogSettingsPreference);
}
}
private void refreshWPComAuthCategory() {
/*
PreferenceCategory wpComCategory = (PreferenceCategory) findPreference("wp_pref_wpcom");
wpComCategory.removeAll();
addWpComSignIn(wpComCategory, 0);
addWpComShowHideButton(wpComCategory, 5);
List<Map<String, Object>> accounts = BioWiki.wpDB.getAccountsBy("dotcomFlag = 1 AND isHidden = 0", null);
addAccounts(wpComCategory, accounts, 10);
*/
}
private void loadNotifications() {
AppLog.d(AppLog.T.NOTIFS, "Preferences > loading notification settings");
// Add notifications group back in case it was previously removed from being logged out
PreferenceScreen rootScreen = (PreferenceScreen) findPreference("wp_pref_root");
rootScreen.addPreference(mNotificationsGroup);
PreferenceCategory notificationTypesCategory = (PreferenceCategory) findPreference("wp_pref_notification_types");
notificationTypesCategory.removeAll();
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
String settingsJson = settings.getString(NotificationUtils.WPCOM_PUSH_DEVICE_NOTIFICATION_SETTINGS, null);
if (settingsJson == null) {
rootScreen.removePreference(mNotificationsGroup);
return;
} else {
try {
Gson gson = new Gson();
mNotificationSettings = gson.fromJson(settingsJson, HashMap.class);
StringMap<?> mutedBlogsMap = (StringMap<?>) mNotificationSettings.get("muted_blogs");
mMutedBlogsList = (ArrayList<StringMap<Double>>) mutedBlogsMap.get("value");
Collections.sort(mMutedBlogsList, this.BlogNameComparatorForMutedBlogsList);
Object[] mTypeList = mNotificationSettings.keySet().toArray();
for (int i = 0; i < mTypeList.length; i++) {
if (!mTypeList[i].equals("muted_blogs") && !mTypeList[i].equals("mute_until")) {
StringMap<?> typeMap = (StringMap<?>) mNotificationSettings
.get(mTypeList[i].toString());
CheckBoxPreference typePreference = new CheckBoxPreference(this);
typePreference.setKey(mTypeList[i].toString());
typePreference.setChecked(MapUtils.getMapBool(typeMap, "value"));
typePreference.setTitle(typeMap.get("desc").toString());
typePreference.setOnPreferenceChangeListener(mTypeChangeListener);
notificationTypesCategory.addPreference(typePreference);
}
}
PreferenceCategory selectBlogsCategory = (PreferenceCategory) findPreference("wp_pref_notification_blogs");
selectBlogsCategory.removeAll();
for (int i = 0; i < mMutedBlogsList.size(); i++) {
StringMap<?> blogMap = (StringMap<?>) mMutedBlogsList.get(i);
String blogName = (String) blogMap.get("blog_name");
if (blogName == null || blogName.trim().equals(""))
blogName = (String) blogMap.get("url");
CheckBoxPreference blogPreference = new CheckBoxPreference(this);
blogPreference.setChecked(!MapUtils.getMapBool(blogMap, "value"));
blogPreference.setTitle(StringUtils.unescapeHTML(blogName));
blogPreference.setOnPreferenceChangeListener(mMuteBlogChangeListener);
// set the order here so it matches the key in mMutedBlogsList since
// mMuteBlogChangeListener uses the order to locate the clicked blog
blogPreference.setOrder(i);
selectBlogsCategory.addPreference(blogPreference);
}
} catch (JsonSyntaxException e) {
AppLog.v(AppLog.T.NOTIFS, "Notification Settings Json could not be parsed.");
return;
} catch (Exception e) {
AppLog.v(AppLog.T.NOTIFS, "Failed to load notification settings.");
return;
}
CheckBoxPreference notificationsEnabledCheckBox = (CheckBoxPreference) findPreference("wp_pref_notifications_enabled");
notificationsEnabledCheckBox.setOnPreferenceChangeListener(mNotificationsEnabledChangeListener);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
refreshWPComAuthCategory();
super.onActivityResult(requestCode, resultCode, data);
}
public void onStop() {
super.onStop();
if (mNotificationSettingsChanged) {
sendNotificationsSettings();
}
}
/**
* Performs the notification settings save in the background
*/
private class sendNotificationSettingsTask extends AsyncTask<Void, Void, Void> {
// Sends updated notification settings to WP.com
@Override
protected Void doInBackground(Void... params) {
if (mNotificationSettings != null) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(PreferencesActivity.this);
SharedPreferences.Editor editor = settings.edit();
Gson gson = new Gson();
String settingsJson = gson.toJson(mNotificationSettings);
editor.putString(NotificationUtils.WPCOM_PUSH_DEVICE_NOTIFICATION_SETTINGS, settingsJson);
editor.commit();
NotificationUtils.setPushNotificationSettings(PreferencesActivity.this);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
mNotificationSettingsChanged = false;
}
}
}