/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.activity.setting; import android.accounts.Account; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.database.Cursor; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.Preference; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; import com.galaxy.meetup.client.android.EsAsyncTaskLoader; import com.galaxy.meetup.client.android.LabelPreference; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.analytics.EsAnalytics; import com.galaxy.meetup.client.android.analytics.OzViews; import com.galaxy.meetup.client.android.content.EsAccount; import com.galaxy.meetup.client.android.content.EsAccountsData; import com.galaxy.meetup.client.android.iu.InstantUploadFacade; import com.galaxy.meetup.client.android.service.AndroidContactsSync; import com.galaxy.meetup.client.android.service.EsService; import com.galaxy.meetup.client.android.service.Hangout; import com.galaxy.meetup.client.util.AccountsUtil; import com.galaxy.meetup.client.util.AndroidUtils; import com.galaxy.meetup.client.util.HelpUrl; /** * * @author sihai * */ public class SettingsActivity extends BaseSettingsActivity { private static String sContactsStatsSyncKey; private static String sContactsSyncKey; private static String sHangoutKey; private static String sHangoutOnOffKey; private static String sInstantUploadKey; private static String sMessengerKey; private static String sMessengerOnOffKey; private static String sNotificationsKey; private static String sNotificationsOnOffKey; public SettingsActivity() { } private void setOnOffLabel(LabelPreference labelpreference, boolean flag) { Resources resources = getResources(); if(flag) { labelpreference.setLabel(getString(R.string.preference_on)); labelpreference.setLabelColor(resources.getColor(R.color.preference_label_on)); } else { labelpreference.setLabel(getString(R.string.preference_off)); labelpreference.setLabelColor(resources.getColor(R.color.preference_label_off)); } } public void onCreate(Bundle bundle) { super.onCreate(bundle); setTitle(getString(R.string.home_menu_settings)); Object obj = getIntent().getParcelableExtra("account"); if(null == obj) { if(android.os.Build.VERSION.SDK_INT >= 14 && "android.intent.action.MANAGE_NETWORK_USAGE".equals(getIntent().getAction())) obj = EsAccountsData.getActiveAccount(getApplicationContext()); } if(null == obj) { finish(); return; } getIntent().putExtra("account", (EsAccount)obj); Object obj1 = obj; if(sNotificationsKey == null) { sNotificationsKey = getString(R.string.communication_preference_notifications_key); sMessengerKey = getString(R.string.communication_preference_messenger_key); sHangoutKey = getString(R.string.communication_preference_hangout_key); sInstantUploadKey = getString(R.string.photo_preference_instant_upload_key); sContactsSyncKey = getString(R.string.contacts_sync_preference_key); sContactsStatsSyncKey = getString(R.string.contacts_stats_sync_preference_key); sNotificationsOnOffKey = getString(R.string.notifications_preference_enabled_key); sMessengerOnOffKey = getString(R.string.realtimechat_notify_setting_key); sHangoutOnOffKey = getString(R.string.hangout_notify_setting_key); } EsAccount esaccount = null; if((obj1 instanceof EsAccount)) { esaccount = (EsAccount)obj1; if(esaccount.isPlusPage()) { addPreferencesFromResource(R.xml.main_preferences_plus_page); } else { addPreferencesFromResource(R.xml.main_preferences); addPreferencesFromResource(R.xml.contacts_sync_preferences); if(AndroidContactsSync.isAndroidSyncSupported(this)) { CheckBoxPreference checkboxpreference1 = (CheckBoxPreference)findPreference(sContactsSyncKey); checkboxpreference1.setChecked(EsAccountsData.isContactsSyncEnabled(this, esaccount)); checkboxpreference1.setOnPreferenceChangeListener(new ContactsSyncPreferenceChangeListener(esaccount)); } CheckBoxPreference checkboxpreference = (CheckBoxPreference)findPreference(sContactsStatsSyncKey); Resources resources = getResources(); int i; if(AndroidUtils.hasTelephony(this)) i = R.string.contacts_stats_sync_preference_enabled_phone_summary; else i = R.string.contacts_stats_sync_preference_enabled_tablet_summary; checkboxpreference.setSummary(resources.getString(i)); checkboxpreference.setChecked(EsAccountsData.isContactsStatsSyncEnabled(this, esaccount)); checkboxpreference.setOnPreferenceChangeListener(new ContactsStatsSyncPreferenceChangeListener(esaccount)); } putAccountExtra(getPreferenceScreen(), esaccount); return; } else if((obj1 instanceof Account)) { esaccount = EsService.getActiveAccount(this); if(null == esaccount) { Toast.makeText(this, getString(R.string.not_signed_in), 1).show(); finish(); return; } else { getIntent().putExtra("account", esaccount); if(esaccount.isPlusPage()) { addPreferencesFromResource(R.xml.main_preferences_plus_page); } else { addPreferencesFromResource(R.xml.main_preferences); addPreferencesFromResource(R.xml.contacts_sync_preferences); if(AndroidContactsSync.isAndroidSyncSupported(this)) { CheckBoxPreference checkboxpreference1 = (CheckBoxPreference)findPreference(sContactsSyncKey); checkboxpreference1.setChecked(EsAccountsData.isContactsSyncEnabled(this, esaccount)); checkboxpreference1.setOnPreferenceChangeListener(new ContactsSyncPreferenceChangeListener(esaccount)); } CheckBoxPreference checkboxpreference = (CheckBoxPreference)findPreference(sContactsStatsSyncKey); Resources resources = getResources(); int i; if(AndroidUtils.hasTelephony(this)) i = R.string.contacts_stats_sync_preference_enabled_phone_summary; else i = R.string.contacts_stats_sync_preference_enabled_tablet_summary; checkboxpreference.setSummary(resources.getString(i)); checkboxpreference.setChecked(EsAccountsData.isContactsStatsSyncEnabled(this, esaccount)); checkboxpreference.setOnPreferenceChangeListener(new ContactsStatsSyncPreferenceChangeListener(esaccount)); } putAccountExtra(getPreferenceScreen(), esaccount); } } } public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.preferences_menu, menu); return true; } public boolean onOptionsItemSelected(MenuItem menuitem) { boolean flag; if(menuitem.getItemId() == R.id.menu_help) { startExternalActivity(new Intent("android.intent.action.VIEW", HelpUrl.getHelpUrl(this, getResources().getString(R.string.url_param_help_settings)))); flag = true; } else { flag = super.onOptionsItemSelected(menuitem); } return flag; } public void onResume() { LabelPreference labelpreference2; SharedPreferences sharedpreferences; Resources resources; LabelPreference labelpreference; LabelPreference labelpreference1; EsAccount esaccount; super.onResume(); if(!getAccount().isPlusPage()) { boolean flag = ContentResolver.getSyncAutomatically(AccountsUtil.newAccount(getAccount().getName()), "com.galaxy.meetup.client.android.iu.EsGalaxyIuProvider"); boolean flag1 = ContentResolver.getMasterSyncAutomatically(); LabelPreference labelpreference3 = (LabelPreference)findPreference(sInstantUploadKey); if(flag1 && flag) { labelpreference3.setSummary(null); labelpreference3.setOnPreferenceClickListener(null); (new InstantUploadSettingsLoader(this)).startLoading(); } else { if(flag1) { String s = getString(R.string.es_google_iu_provider); labelpreference3.setSummary(getString(R.string.photo_sync_disabled_summary, new Object[] { s })); } else { labelpreference3.setSummary(R.string.master_sync_disabled_summary); } labelpreference3.setOnPreferenceClickListener(new android.preference.Preference.OnPreferenceClickListener() { public final boolean onPreferenceClick(Preference preference) { startActivity(new Intent("android.settings.SYNC_SETTINGS")); return true; } }); setOnOffLabel(labelpreference3, false); } } sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this); resources = getResources(); labelpreference = (LabelPreference)findPreference(sNotificationsKey); if(labelpreference != null) setOnOffLabel(labelpreference, sharedpreferences.getBoolean(sNotificationsOnOffKey, resources.getBoolean(R.bool.notifications_preference_enabled_default_value))); labelpreference1 = (LabelPreference)findPreference(sMessengerKey); if(labelpreference1 != null) setOnOffLabel(labelpreference1, sharedpreferences.getBoolean(sMessengerOnOffKey, resources.getBoolean(R.bool.realtimechat_notify_setting_default_value))); labelpreference2 = (LabelPreference)findPreference(sHangoutKey); if(labelpreference2 == null) { return; } esaccount = getAccount(); if(esaccount == null || Hangout.getSupportedStatus(this, esaccount) != Hangout.SupportStatus.SUPPORTED) { PreferenceScreen preferencescreen = getPreferenceScreen(); if(preferencescreen != null) preferencescreen.removePreference(labelpreference2); } else { setOnOffLabel(labelpreference2, sharedpreferences.getBoolean(sHangoutOnOffKey, resources.getBoolean(R.bool.hangout_notify_setting_default_value))); } } private final class ContactsStatsSyncPreferenceChangeListener implements android.preference.Preference.OnPreferenceChangeListener { private final EsAccount mAccount; ContactsStatsSyncPreferenceChangeListener(EsAccount esaccount) { super(); mAccount = esaccount; } public final boolean onPreferenceChange(Preference preference, Object obj) { boolean flag = ((Boolean)obj).booleanValue(); SettingsActivity settingsactivity = SettingsActivity.this; EsAccountsData.saveContactsStatsSyncPreference(settingsactivity, mAccount, flag); EsService.saveLastContactedTimestamp(settingsactivity, mAccount, -1L); EsAnalytics.recordImproveSuggestionsPreferenceChange(settingsactivity, mAccount, flag, OzViews.GENERAL_SETTINGS); if(flag) EsService.disableWipeoutStats(settingsactivity, mAccount); else EsService.enableAndPerformWipeoutStats(settingsactivity, mAccount); return true; } } private final class ContactsSyncPreferenceChangeListener implements android.preference.Preference.OnPreferenceChangeListener { private final EsAccount mAccount; ContactsSyncPreferenceChangeListener(EsAccount esaccount) { super(); mAccount = esaccount; } public final boolean onPreferenceChange(Preference preference, Object obj) { boolean flag = ((Boolean)obj).booleanValue(); if(EsAccountsData.isContactsSyncEnabled(SettingsActivity.this, mAccount) != flag) { EsAccountsData.saveContactsSyncPreference(SettingsActivity.this, mAccount, flag); AndroidContactsSync.requestSync(SettingsActivity.this, true); } return true; } } private final class InstantUploadSettingsLoader extends EsAsyncTaskLoader { public InstantUploadSettingsLoader(Context context) { super(context); } public final Object esLoadInBackground() { boolean flag; Cursor cursor = null; flag = true; ContentResolver contentresolver = getContext().getContentResolver(); android.net.Uri uri = InstantUploadFacade.SETTINGS_URI; String as[] = new String[1]; as[0] = "auto_upload_enabled"; try { cursor = contentresolver.query(uri, as, null, null, null); if(null != cursor && cursor.moveToFirst()) { if(cursor.getInt(0) != 1) flag = false; mHandler.post(new Runnable() { public final void run() { LabelPreference labelpreference = (LabelPreference)findPreference(SettingsActivity.sInstantUploadKey); // TODO setOnOffLabel(labelpreference, true/*instantUploadEnabled*/); } }); } return null; } finally { if(null != cursor) { cursor.close(); } } } protected final void onStartLoading() { forceLoad(); } } }