package net.everythingandroid.smspopup.ui; import net.everythingandroid.smspopup.R; import net.everythingandroid.smspopup.preferences.AppEnabledCheckBoxPreference; import net.everythingandroid.smspopup.preferences.ButtonListPreference; import net.everythingandroid.smspopup.preferences.DialogPreference; import net.everythingandroid.smspopup.preferences.QuickReplyCheckBoxPreference; import net.everythingandroid.smspopup.util.Eula; import net.everythingandroid.smspopup.util.SmsPopupUtils; 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.pm.PackageManager.NameNotFoundException; 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.PreferenceActivity; import android.preference.PreferenceCategory; import android.preference.PreferenceManager; import android.preference.PreferenceScreen; import android.telephony.TelephonyManager; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class SmsPopupConfigActivity extends PreferenceActivity { private static final int DIALOG_DONATE = Menu.FIRST; private static final int DIALOG_EMAIL = Menu.FIRST + 1; private Preference donateDialogPref = null; private QuickReplyCheckBoxPreference quickReplyPref; private ButtonListPreference button1; private ButtonListPreference button2; private ButtonListPreference button3; private String version = ""; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); // Try and find app version number try { // Get version number, not sure if there is a better way to do this version = " v" + getPackageManager().getPackageInfo(getPackageName(), 0).versionName; } catch (NameNotFoundException e) { } // Set the version number in the about dialog preference final DialogPreference aboutPref = (DialogPreference) findPreference(getString(R.string.pref_about_key)); aboutPref.setDialogTitle(getString(R.string.app_name) + version); aboutPref.setDialogLayoutResource(R.layout.about); // Set intent for contact notification option final PreferenceScreen contactsPS = (PreferenceScreen) findPreference(getString(R.string.contacts_key)); contactsPS.setIntent( new Intent(this, net.everythingandroid.smspopup.ui.ConfigContactsActivity.class)); // Set intent for quick message option final PreferenceScreen quickMessagePS = (PreferenceScreen) findPreference(getString(R.string.quickmessages_key)); quickMessagePS.setIntent( new Intent(this, net.everythingandroid.smspopup.ui.ConfigQuickMessagesActivity.class)); // Button 1 preference button1 = (ButtonListPreference) findPreference(getString(R.string.pref_button1_key)); button1.refreshSummary(); button1.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { quickReplyPref.setChecked( isQuickReplyActive((String) newValue, button2.getValue(), button3 .getValue())); updateReplyTypePref((String) newValue, button2.getValue(), button3.getValue()); return true; } }); // Button 2 preference button2 = (ButtonListPreference) findPreference(getString(R.string.pref_button2_key)); button2.refreshSummary(); button2.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { quickReplyPref.setChecked( isQuickReplyActive((String) newValue, button1.getValue(), button3 .getValue())); updateReplyTypePref((String) newValue, button1.getValue(), button3.getValue()); return true; } }); // Button 3 preference button3 = (ButtonListPreference) findPreference(getString(R.string.pref_button3_key)); button3.refreshSummary(); button3.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { quickReplyPref.setChecked( isQuickReplyActive((String) newValue, button1.getValue(), button2 .getValue())); updateReplyTypePref((String) newValue, button1.getValue(), button2.getValue()); return true; } }); // Quick Reply checkbox preference quickReplyPref = (QuickReplyCheckBoxPreference) findPreference(getString(R.string.pref_quickreply_key)); quickReplyPref.setChecked( isQuickReplyActive(button1.getValue(), button2.getValue(), button3.getValue())); // Refresh reply type pref updateReplyTypePref(button1.getValue(), button2.getValue(), button3.getValue()); /* * This is a really manual way of dealing with this, but I didn't think it was worth * spending the time to make it more generic. This will basically look through the active * buttons and switch any Reply buttons to Quick Reply buttons when enabling and the * opposite when disabling. */ quickReplyPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { int button1val = Integer.valueOf(button1.getValue()); int button2val = Integer.valueOf(button2.getValue()); int button3val = Integer.valueOf(button3.getValue()); int count = 0; if (button1.isReplyButton()) count++; if (button2.isReplyButton()) count++; if (button3.isReplyButton()) count++; if (count > 1) { Toast.makeText(SmsPopupConfigActivity.this, R.string.pref_quickreply_bothreplybuttons, Toast.LENGTH_LONG).show(); return false; } else if (count == 0) { Toast.makeText(SmsPopupConfigActivity.this, R.string.pref_quickreply_noreplybuttons, Toast.LENGTH_LONG).show(); return false; } if (Boolean.FALSE == newValue) { // Quick Reply should be turned off if (button1val == ButtonListPreference.BUTTON_QUICKREPLY) { button1.setValue(String.valueOf(ButtonListPreference.BUTTON_REPLY)); } else if (button2val == ButtonListPreference.BUTTON_QUICKREPLY) { button2.setValue(String.valueOf(ButtonListPreference.BUTTON_REPLY)); } else if (button3val == ButtonListPreference.BUTTON_QUICKREPLY) { button3.setValue(String.valueOf(ButtonListPreference.BUTTON_REPLY)); } button1.refreshSummary(); button2.refreshSummary(); button3.refreshSummary(); return true; } else if (Boolean.TRUE == newValue) { // Quick Reply should be turned on if (button1val == ButtonListPreference.BUTTON_REPLY) { button1.setValue(String.valueOf(ButtonListPreference.BUTTON_QUICKREPLY)); } else if (button2val == ButtonListPreference.BUTTON_REPLY) { button2.setValue(String.valueOf(ButtonListPreference.BUTTON_QUICKREPLY)); } else if (button3val == ButtonListPreference.BUTTON_REPLY) { button3.setValue(String.valueOf(ButtonListPreference.BUTTON_QUICKREPLY)); } button1.refreshSummary(); button2.refreshSummary(); button3.refreshSummary(); return true; } return false; } }); // Donate dialog preference donateDialogPref = findPreference(getString(R.string.pref_donate_key)); if (donateDialogPref != null) { donateDialogPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { showDialog(DIALOG_DONATE); return true; } }); } // Split long messages preference (for some CDMA carriers like Verizon) CheckBoxPreference splitLongMessagesPref = (CheckBoxPreference) findPreference(getString(R.string.pref_split_message_key)); // This pref is only shown for CDMA phones if (splitLongMessagesPref != null) { TelephonyManager mTM = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); if (mTM.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA) { PreferenceCategory quickreplyPrefCategory = (PreferenceCategory) findPreference(getString(R.string.pref_quickreply_cat_key)); quickreplyPrefCategory.removePreference(splitLongMessagesPref); splitLongMessagesPref = null; } } Eula.show(this); } @Override protected void onResume() { super.onResume(); SharedPreferences myPrefs = PreferenceManager.getDefaultSharedPreferences(this); // Donate Dialog if (donateDialogPref != null) { boolean donated = myPrefs.getBoolean(this.getString(R.string.pref_donated_key), false); // boolean donated = true; if (donated) { PreferenceCategory otherPrefCategory = (PreferenceCategory) findPreference(getString(R.string.pref_other_key)); otherPrefCategory.removePreference(donateDialogPref); donateDialogPref = null; } } /* * This is quite hacky - in case the app was enabled or disabled externally (by * ExternalEventReceiver) this will refresh the checkbox that is visible to the user */ AppEnabledCheckBoxPreference mEnabledPreference = (AppEnabledCheckBoxPreference) findPreference(getString(R.string.pref_enabled_key)); boolean enabled = myPrefs.getBoolean(getString(R.string.pref_enabled_key), true); mEnabledPreference.setChecked(enabled); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case DIALOG_DONATE: LayoutInflater factory = getLayoutInflater(); final View donateView = factory.inflate(R.layout.donate, null); Button donateMarketButton = (Button) donateView.findViewById(R.id.DonateMarketButton); donateMarketButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(SmsPopupUtils.DONATE_MARKET_URI); SmsPopupConfigActivity.this.startActivity( Intent.createChooser(i, getString(R.string.pref_donate_title))); } }); Button donatePaypalButton = (Button) donateView.findViewById(R.id.DonatePaypalButton); donatePaypalButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(SmsPopupUtils.DONATE_PAYPAL_URI); SmsPopupConfigActivity.this.startActivity(i); } }); return new AlertDialog.Builder(this) .setIcon(R.drawable.smspopup_icon) .setTitle(R.string.pref_donate_title) .setView(donateView) .setPositiveButton(android.R.string.ok, null) .create(); case DIALOG_EMAIL: Dialog.OnClickListener listener = new Dialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case Dialog.BUTTON_POSITIVE: SmsPopupUtils.launchEmailToIntent(SmsPopupConfigActivity.this, getString(R.string.app_name) + version, true); break; case Dialog.BUTTON_NEGATIVE: SmsPopupUtils.launchEmailToIntent(SmsPopupConfigActivity.this, getString(R.string.app_name) + version, false); break; } } }; return new AlertDialog.Builder(this) .setIcon(R.drawable.smspopup_icon) .setTitle(R.string.pref_sendemail_title) .setMessage(R.string.pref_sendemail_dialog) .setPositiveButton(R.string.pref_sendemail_buttonok, listener) .setNegativeButton(R.string.pref_sendemail_buttoncancel, listener) .create(); } return super.onCreateDialog(id); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.smspopup_config, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.email_menu_item: showDialog(DIALOG_EMAIL); break; } return super.onOptionsItemSelected(item); } /* * Quick method to work out if Quick Reply is active or not (to toggle the pref) */ private boolean isQuickReplyActive(String val1, String val2, String val3) { if (Integer.valueOf(val1) == ButtonListPreference.BUTTON_QUICKREPLY || Integer.valueOf(val2) == ButtonListPreference.BUTTON_QUICKREPLY || Integer.valueOf(val3) == ButtonListPreference.BUTTON_QUICKREPLY) { return true; } return false; } /* * Updates reply-type preference based on the value passed */ private void updateReplyTypePref(String val1, String val2, String val3) { SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor settings = mPrefs.edit(); if (Integer.valueOf(val1) == ButtonListPreference.BUTTON_REPLY_BY_ADDRESS || Integer.valueOf(val2) == ButtonListPreference.BUTTON_REPLY_BY_ADDRESS || Integer.valueOf(val3) == ButtonListPreference.BUTTON_REPLY_BY_ADDRESS) { settings.putBoolean(getString(R.string.pref_reply_to_thread_key), false); // if (BuildConfig.DEBUG) Log.v("Reply to address set"); } else { settings.putBoolean(getString(R.string.pref_reply_to_thread_key), true); // if (BuildConfig.DEBUG) Log.v("Reply to threadId set"); } settings.commit(); } }