package com.rafali.flickruploader.ui.activity; import java.util.Arrays; import java.util.List; import org.androidannotations.api.BackgroundExecutor; import org.slf4j.LoggerFactory; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.support.v7.app.ActionBar; import android.text.Html; import android.view.MenuItem; import android.widget.EditText; import com.google.common.base.Joiner; import com.rafali.flickruploader.FlickrUploader; import com.rafali.flickruploader.tool.Utils; import com.rafali.flickruploader2.R; @SuppressWarnings("deprecation") public class PreferencesAdvancedActivity extends AbstractPreferenceActivity implements OnSharedPreferenceChangeListener { static final org.slf4j.Logger LOG = LoggerFactory.getLogger(PreferencesAdvancedActivity.class); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); } addPreferencesFromResource(R.xml.preferences_advanced); PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this); findPreference("clear_logs").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Utils.showConfirmCancel(PreferencesAdvancedActivity.this, "Delete logs", "Do you confirm deleting all log files?", new Utils.Callback<Boolean>() { @Override public void onResult(Boolean result) { if (result) { BackgroundExecutor.execute(new Runnable() { @Override public void run() { FlickrUploader.deleteAllLogs(); render(); } }); } } }); return false; } }); findPreference("upload_description").setOnPreferenceClickListener(new PremiumOnclick("upload_description")); findPreference("custom_tags").setOnPreferenceClickListener(new PremiumOnclick("custom_tags")); findPreference("check_premium_status").setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { runOnUiThread(new Runnable() { @Override public void run() { findPreference("check_premium_status").setSummary("Checking from server…"); } }); BackgroundExecutor.execute(new Runnable() { @Override public void run() { Utils.checkPremium(true, new Utils.Callback<Boolean>() { @Override public void onResult(final Boolean result) { runOnUiThread(new Runnable() { @Override public void run() { String message; if (result) { message = "PRO status confirmed!"; } else { if (Utils.customSku == null) { message = "No PRO info found for your device email: " + Joiner.on(", ").join(Utils.getAccountEmails()); } else { message = "Your coupon has been applied to the device!"; } } findPreference("check_premium_status").setSummary(message); } }); } }); } }); return false; } }); render(); } class PremiumOnclick implements OnPreferenceClickListener { private String prefKey; public PremiumOnclick(String prefKey) { this.prefKey = prefKey; } @Override public boolean onPreferenceClick(Preference preference) { AlertDialog.Builder alert = new AlertDialog.Builder(PreferencesAdvancedActivity.this); alert.setTitle(findPreference(prefKey).getTitle()); if (Utils.isPremium()) { // Set an EditText view to get user input final EditText input = new EditText(PreferencesAdvancedActivity.this); if (prefKey.equals("upload_description")) { input.setText(Utils.getUploadDescription()); } else { input.setText(Utils.getStringProperty(prefKey)); } alert.setView(input); alert.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { String value = input.getText().toString(); LOG.debug("value : " + value); Utils.setStringProperty(prefKey, value); render(); } }); alert.setNegativeButton("Cancel", null); } else { alert.setMessage("A PRO account is needed to customize this branding feature"); alert.setPositiveButton("Buy PRO Now", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Utils.startGooglePayment(PreferencesAdvancedActivity.this, new Utils.Callback<Boolean>() { @Override public void onResult(Boolean result) { render(); } }); } }); alert.setNegativeButton("Later", null); } alert.show(); return false; } } private void render() { BackgroundExecutor.execute(new Runnable() { @Override public void run() { final long size = FlickrUploader.getLogSize(); final List<String> autoupload_delay_values = Arrays.asList(getResources().getStringArray(R.array.autoupload_delay_values)); final String[] autoupload_delay_entries = getResources().getStringArray(R.array.autoupload_delay_entries); final String autoupload_delay_value = Utils.getStringProperty("autoupload_delay", autoupload_delay_values.get(0)); runOnUiThread(new Runnable() { @Override public void run() { findPreference("clear_logs").setSummary("Files size: " + Utils.formatFileSize(size)); String autoupload_delay = autoupload_delay_entries[autoupload_delay_values.indexOf(autoupload_delay_value)]; if (autoupload_delay.equalsIgnoreCase("custom")) { findPreference("autoupload_delay").setSummary(autoupload_delay); } else { findPreference("autoupload_delay").setSummary(autoupload_delay); } findPreference("upload_description").setSummary(Html.fromHtml(Utils.getUploadDescription())); findPreference("custom_tags").setSummary(Utils.getStringProperty("custom_tags")); } }); } }); } @Override public void onSharedPreferenceChanged(SharedPreferences sp, String key) { if ("autoupload_delay".equals(key) && sp.getString(key, "").equalsIgnoreCase("custom")) { LOG.debug("custom"); } render(); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); } return super.onOptionsItemSelected(item); } @Override protected void onDestroy() { super.onDestroy(); PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this); } }