/**
* galaxy inc.
* meetup client for android
*/
package com.galaxy.meetup.client.android.ui.activity.setting;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceManager;
import android.util.Log;
import com.galaxy.meetup.client.android.R;
import com.galaxy.meetup.client.android.content.EsAccount;
import com.galaxy.meetup.client.android.realtimechat.Client;
import com.galaxy.meetup.client.android.realtimechat.Data;
import com.galaxy.meetup.client.android.realtimechat.RealTimeChatService;
import com.galaxy.meetup.client.android.realtimechat.RealTimeChatServiceListener;
import com.galaxy.meetup.client.android.realtimechat.RealTimeChatServiceResult;
import com.galaxy.meetup.client.util.EsLog;
/**
*
* @author sihai
*
*/
public class MessengerSettingsActivity extends BaseSettingsActivity {
private Integer mAclSummaryToSet;
private String mAclValueToSet;
private String mCurrentBackend;
private Integer mRequestId;
private final RealTimeChatServiceListener mServiceListener = new RealTimeChatServiceListener() {
public final void onResponseReceived(int i, RealTimeChatServiceResult realtimechatserviceresult)
{
if(mRequestId != null && i == mRequestId.intValue())
if(realtimechatserviceresult.getErrorCode() == 1)
{
processSetAclResult(realtimechatserviceresult.getCommand());
} else
{
if(EsLog.isLoggable("MessengerSettings", 4))
Log.i("MessengerSettings", (new StringBuilder("Error setting acl ")).append(realtimechatserviceresult.getErrorCode()).toString());
dismissDialog(1);
showDialog(2);
}
}
};
private Runnable mTimeoutRunnable;
public MessengerSettingsActivity()
{
}
private void processSetAclResult(Client.BunchServerResponse bunchserverresponse)
{
mRequestId = null;
if(!bunchserverresponse.hasSetAclsResponse()) {
dismissDialog(1);
showDialog(2);
} else {
Client.SetAclsResponse setaclsresponse = bunchserverresponse.getSetAclsResponse();
if(setaclsresponse == null || !setaclsresponse.hasStatus() || setaclsresponse.getStatus() != Data.ResponseStatus.OK) {
dismissDialog(1);
showDialog(2);
} else {
ListPreference listpreference = (ListPreference)findPreference(getString(R.string.realtimechat_acl_key));
listpreference.setValue(mAclValueToSet);
listpreference.setSummary(mAclSummaryToSet.intValue());
android.content.SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
editor.putString(getString(R.string.realtimechat_acl_key), mAclValueToSet);
editor.commit();
dismissDialog(1);
mHandler.removeCallbacks(mTimeoutRunnable);
}
}
}
public void onCreate(Bundle bundle)
{
String s;
String s1;
int i;
super.onCreate(bundle);
if(bundle != null)
{
if(bundle.containsKey("request_id"))
mRequestId = Integer.valueOf(bundle.getInt("request_id"));
if(bundle.containsKey("acl_value"))
mAclValueToSet = bundle.getString("acl_value");
if(bundle.containsKey("acl_summary_string_id"))
mAclSummaryToSet = Integer.valueOf(bundle.getInt("acl_summary_string_id"));
}
addPreferencesFromResource(R.xml.realtimechat_preferences);
if(RealTimeChatService.debuggable())
{
addPreferencesFromResource(R.xml.realtimechat_development_preferences);
findPreference(getString(R.string.realtimechat_backend_key)).setOnPreferenceChangeListener(new BackendPreferenceChangeListener());
mCurrentBackend = PreferenceManager.getDefaultSharedPreferences(this).getString(getString(R.string.realtimechat_backend_key), getString(R.string.debug_realtimechat_default_backend));
}
SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
s = getString(R.string.realtimechat_acl_key);
s1 = sharedpreferences.getString(s, getString(R.string.realtimechat_default_acl_key));
i = -1;
if(s1.equals(getString(R.string.key_acl_setting_anyone))) {
i = R.string.realtimechat_acl_subtitle_anyone;
} else if(s1.equals(getString(R.string.key_acl_setting_my_circles))) {
i = R.string.realtimechat_acl_subtitle_my_circles;
} else if(s1.equals(getString(R.string.key_acl_setting_extended_circles))) {
i = R.string.realtimechat_acl_subtitle_extended_circles;
}
Preference preference = findPreference(s);
preference.setOnPreferenceChangeListener(new AclPreferenceChangeListener());
if(i != -1)
preference.setSummary(i);
String s2 = getString(R.string.realtimechat_ringtone_setting_key);
Preference preference1 = findPreference(s2);
String s3 = getString(R.string.notifications_preference_ringtone_default_value);
String s4 = getRingtoneName(null, s2, s3);
preference1.setOnPreferenceChangeListener(new BaseSettingsActivity.RingtonePreferenceChangeListener(s2, s3));
if(s4 != null)
preference1.setSummary(s4);
}
public Dialog onCreateDialog(int i, Bundle bundle)
{
Dialog dialog = null;
if(i == 1) {
dialog = new ProgressDialog(this);
((ProgressDialog) (dialog)).setTitle(getString(R.string.realtimechat_acl_update_pending_title));
((ProgressDialog) (dialog)).setMessage(getString(R.string.realtimechat_acl_update_pending));
((ProgressDialog) (dialog)).setCancelable(false);
((ProgressDialog) (dialog)).setCanceledOnTouchOutside(false);
} else if(2 == i) {
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(this);
builder.setTitle(getString(R.string.realtimechat_acl_update_failed_title));
builder.setMessage(getString(R.string.realtimechat_acl_update_failed));
builder.setPositiveButton(0x104000a, null);
dialog = builder.create();
}
return dialog;
}
public void onPause()
{
super.onPause();
mHandler.removeCallbacks(mTimeoutRunnable);
RealTimeChatService.unregisterListener(mServiceListener);
}
public void onResume()
{
super.onResume();
RealTimeChatService.registerListener(mServiceListener);
if(mRequestId != null)
if(!RealTimeChatService.isRequestPending(mRequestId.intValue()))
{
RealTimeChatServiceResult realtimechatserviceresult = RealTimeChatService.removeResult(mRequestId.intValue());
if(realtimechatserviceresult != null && realtimechatserviceresult.getCommand() != null)
{
processSetAclResult(realtimechatserviceresult.getCommand());
} else
{
dismissDialog(1);
showDialog(2);
}
} else
{
mHandler.postDelayed(mTimeoutRunnable, 10000L);
}
}
public void onSaveInstanceState(Bundle bundle)
{
super.onSaveInstanceState(bundle);
if(mRequestId != null)
bundle.putInt("request_id", mRequestId.intValue());
if(mAclValueToSet != null)
bundle.putString("acl_value", mAclValueToSet);
if(mAclSummaryToSet != null)
bundle.putInt("acl_summary_string_id", mAclSummaryToSet.intValue());
}
final class AclPreferenceChangeListener implements android.preference.Preference.OnPreferenceChangeListener {
public final boolean onPreferenceChange(Preference preference, Object obj)
{
if(obj instanceof String)
{
String s = (String)obj;
byte byte0 = -1;
int i;
if(s.equals(getString(R.string.key_acl_setting_anyone)))
{
byte0 = 1;
i = R.string.realtimechat_acl_subtitle_anyone;
} else
if(s.equals(getString(R.string.key_acl_setting_my_circles)))
{
byte0 = 3;
i = R.string.realtimechat_acl_subtitle_my_circles;
} else
{
boolean flag = s.equals(getString(R.string.key_acl_setting_extended_circles));
i = 0;
if(flag)
{
byte0 = 2;
i = R.string.realtimechat_acl_subtitle_extended_circles;
}
}
if(byte0 != -1)
{
mAclValueToSet = s;
mAclSummaryToSet = Integer.valueOf(i);
if(EsLog.isLoggable("MessengerSettings", 3))
Log.d("MessengerSettings", (new StringBuilder("Changing acl to ")).append(obj).toString());
EsAccount esaccount = getAccount();
mRequestId = Integer.valueOf(RealTimeChatService.setAcl(MessengerSettingsActivity.this, esaccount, byte0));
showDialog(1, null);
mTimeoutRunnable = new TimeoutRunnable();
mHandler.postDelayed(mTimeoutRunnable, 10000L);
} else
if(EsLog.isLoggable("MessengerSettings", 5))
Log.w("MessengerSettings", (new StringBuilder("Invalid ACL value (")).append(s).append(")").toString());
}
return false;
}
}
private final class BackendPreferenceChangeListener implements android.preference.Preference.OnPreferenceChangeListener {
public final boolean onPreferenceChange(Preference preference, Object obj)
{
if((obj instanceof String) && !mCurrentBackend.equals(obj))
{
EsAccount esaccount = getAccount();
RealTimeChatService.logout(MessengerSettingsActivity.this, esaccount);
}
return true;
}
}
final class TimeoutRunnable implements Runnable {
public final void run()
{
dismissDialog(1);
showDialog(2);
}
}
}