/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.activity.setting;
import java.util.ArrayList;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.widget.Toast;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.content.NotificationSetting;
import com.galaxy.meetup.client.android.content.NotificationSettingsCategory;
import com.galaxy.meetup.client.android.content.NotificationSettingsData;
import com.galaxy.meetup.client.android.service.EsService;
import com.galaxy.meetup.client.android.service.EsServiceListener;
import com.galaxy.meetup.client.android.service.ServiceResult;
/**
*
* @author sihai
*
*/
public class NotificationSettingsActivity extends BaseSettingsActivity {
private Integer mGetNotificationsRequestId;
private NotificationSettingsData mNotificationSettings;
private final EsServiceListener mServiceListener = new EsServiceListener() {
public final void onChangeNotificationsRequestComplete(EsAccount esaccount, ServiceResult serviceresult)
{
if(esaccount.equals(getAccount()) && serviceresult.hasError())
Toast.makeText(NotificationSettingsActivity.this, R.string.notification_settings_save_failed, 0).show();
}
public final void onGetNotificationSettings(int i, EsAccount esaccount, NotificationSettingsData notificationsettingsdata)
{
if(esaccount.equals(getAccount()) && mGetNotificationsRequestId != null && mGetNotificationsRequestId.equals(Integer.valueOf(i)))
{
mGetNotificationsRequestId = null;
mNotificationSettings = notificationsettingsdata;
setupPreferences();
dismissDialog(0x7f0a003f);
}
}
};
public NotificationSettingsActivity()
{
}
private void setupPreferences()
{
PreferenceScreen preferencescreen = getPreferenceScreen();
if(preferencescreen != null)
preferencescreen.removeAll();
addPreferencesFromResource(R.xml.notifications_preferences);
PreferenceScreen preferencescreen1 = getPreferenceScreen();
CheckBoxPreference checkboxpreference = (CheckBoxPreference)findPreference(getString(R.string.notifications_preference_enabled_key));
String s;
Preference preference;
String s1;
String s2;
BaseSettingsActivity.RingtonePreferenceChangeListener ringtonepreferencechangelistener;
if(getAccount() != null)
checkboxpreference.setEnabled(true);
else
checkboxpreference.setEnabled(false);
hookMasterSwitch(null, checkboxpreference);
checkboxpreference.setOnPreferenceChangeListener(new android.preference.Preference.OnPreferenceChangeListener() {
public final boolean onPreferenceChange(Preference preference2, Object obj)
{
NotificationSettingsActivity notificationsettingsactivity = NotificationSettingsActivity.this;
boolean flag;
if(obj == Boolean.TRUE)
flag = true;
else
flag = false;
notificationsettingsactivity.updatedEnabledStates(flag);
return true;
}
});
s = getString(R.string.notifications_preference_ringtone_key);
preference = findPreference(s);
s1 = getString(R.string.notifications_preference_ringtone_default_value);
s2 = getRingtoneName(null, s, s1);
ringtonepreferencechangelistener = new BaseSettingsActivity.RingtonePreferenceChangeListener(s, s1);
preference.setOnPreferenceChangeListener(ringtonepreferencechangelistener);
if(s2 != null)
preference.setSummary(s2);
if(mNotificationSettings != null)
{
final NotificationSettingsData settings = mNotificationSettings;
int i = 0;
for(int j = settings.getCategoriesCount(); i < j; i++)
{
NotificationSettingsCategory notificationsettingscategory = settings.getCategory(i);
PreferenceCategory preferencecategory1 = new PreferenceCategory(this);
preferencecategory1.setTitle(notificationsettingscategory.getDescription());
preferencecategory1.setOrder(1000 * (i + 2));
preferencescreen1.addPreference(preferencecategory1);
int k = 0;
for(int l = notificationsettingscategory.getSettingsCount(); k < l; k++)
{
final NotificationSetting setting = notificationsettingscategory.getSetting(k);
CheckBoxPreference checkboxpreference1 = new CheckBoxPreference(this);
checkboxpreference1.setLayoutResource(R.layout.label_preference);
checkboxpreference1.setTitle(setting.getDescription());
checkboxpreference1.setChecked(setting.isEnabled());
android.preference.Preference.OnPreferenceChangeListener onpreferencechangelistener = new android.preference.Preference.OnPreferenceChangeListener() {
public final boolean onPreferenceChange(Preference preference2, Object obj)
{
setting.setEnabled(((Boolean)obj).booleanValue());
ArrayList arraylist = new ArrayList(1);
arraylist.add(new NotificationSetting(setting));
ArrayList arraylist1 = new ArrayList(1);
arraylist1.add(new NotificationSettingsCategory(null, arraylist));
NotificationSettingsData notificationsettingsdata = new NotificationSettingsData(settings.getEmailAddress(), settings.getMobileNotificationType(), arraylist1);
EsService.changeNotificationSettings(NotificationSettingsActivity.this, getAccount(), notificationsettingsdata);
return true;
}
};
checkboxpreference1.setOnPreferenceChangeListener(onpreferencechangelistener);
preferencecategory1.addPreference(checkboxpreference1);
}
}
} else
{
PreferenceCategory preferencecategory = new PreferenceCategory(this);
preferencecategory.setTitle(getString(R.string.notifications_preference_no_network_category));
preferencecategory.setOrder(2000);
preferencescreen1.addPreference(preferencecategory);
Preference preference1 = new Preference(this);
preference1.setLayoutResource(R.layout.label_preference);
preference1.setTitle(getString(R.string.notifications_preference_no_network_alert));
preference1.setOnPreferenceClickListener(new android.preference.Preference.OnPreferenceClickListener() {
public final boolean onPreferenceClick(Preference preference2)
{
mGetNotificationsRequestId = EsService.getNotificationSettings(getBaseContext(), getAccount());
showDialog(0x7f0a003f);
return true;
}
});
preferencecategory.addPreference(preference1);
}
updatedEnabledStates(checkboxpreference.isChecked());
}
private void updatedEnabledStates(boolean flag)
{
PreferenceScreen preferencescreen = getPreferenceScreen();
int i = 0;
for(int j = preferencescreen.getPreferenceCount(); i < j; i++)
preferencescreen.getPreference(i).setEnabled(flag);
Preference preference = findPreference(getString(R.string.notifications_preference_enabled_key));
if(preference != null)
preference.setEnabled(true);
}
public void onCreate(Bundle bundle)
{
super.onCreate(bundle);
if(bundle != null)
{
if(bundle.containsKey("pending_request_id"))
mGetNotificationsRequestId = Integer.valueOf(bundle.getInt("pending_request_id"));
if(bundle.containsKey("notification_settings"))
mNotificationSettings = (NotificationSettingsData)bundle.getParcelable("notification_settings");
}
}
public Dialog onCreateDialog(int i, Bundle bundle)
{
Dialog dialog = null;
if(2131361855 == i) {
dialog = new ProgressDialog(this);
((ProgressDialog) (dialog)).setProgressStyle(0);
((ProgressDialog) (dialog)).setMessage(getString(R.string.loading));
((ProgressDialog) (dialog)).setCancelable(false);
}
return dialog;
}
public void onPause()
{
super.onPause();
EsService.unregisterListener(mServiceListener);
}
public void onResume()
{
super.onResume();
EsService.registerListener(mServiceListener);
EsAccount esaccount = getAccount();
if(mGetNotificationsRequestId != null) {
if(!EsService.isRequestPending(mGetNotificationsRequestId.intValue()))
{
ServiceResult serviceresult = EsService.removeResult(mGetNotificationsRequestId.intValue());
if(serviceresult != null && serviceresult.hasError())
{
mGetNotificationsRequestId = null;
mNotificationSettings = null;
setupPreferences();
dismissDialog(0x7f0a003f);
} else
{
mGetNotificationsRequestId = EsService.getNotificationSettings(this, esaccount);
}
}
} else {
if(mNotificationSettings == null)
{
mGetNotificationsRequestId = EsService.getNotificationSettings(this, esaccount);
showDialog(0x7f0a003f);
} else
{
setupPreferences();
}
}
}
public void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
if(mGetNotificationsRequestId != null)
bundle.putInt("pending_request_id", mGetNotificationsRequestId.intValue());
if(mNotificationSettings != null)
bundle.putParcelable("notification_settings", mNotificationSettings);
}
}