package com.myMinistry.ui; import java.util.ArrayList; import java.util.Locale; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.view.LayoutInflater; import android.view.View; import android.webkit.WebView; import com.myMinistry.R; import com.myMinistry.util.HelpUtils; import com.myMinistry.util.PrefUtils; public class SettingsActivity extends PreferenceActivity { private String versionName = "0"; @SuppressWarnings("deprecation") @SuppressLint("InflateParams") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); changeLang(PrefUtils.getLocale(getApplicationContext())); addPreferencesFromResource(R.xml.preferences); try { PackageInfo pi = getPackageManager().getPackageInfo( getPackageName(), 0); versionName = pi.versionName; } catch (NameNotFoundException e) {} if(!versionName.endsWith("W")) { PreferenceScreen ps = getPreferenceScreen(); ps.removePreference(findPreference("checkForUpdate")); } findPreference("version").setTitle(getApplicationContext().getString(R.string.app_name) + " " + versionName); findPreference("recalculate_ro_time").setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(final Preference preference) { final ProgressDialog ringProgressDialog = ProgressDialog.show(preference.getContext(), getResources().getString(R.string.updating_app), getResources().getString(R.string.please_be_patient), true); ringProgressDialog.setCancelable(true); new Thread(new Runnable() { @Override public void run() { try { HelpUtils.processRolloverTime(getApplicationContext()); } catch (Exception e) { } ringProgressDialog.dismiss(); } }).start(); return true; } }); findPreference("change_locale").setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(final Preference preference) { AlertDialog.Builder builder = new AlertDialog.Builder(preference.getContext()); ArrayList<String> localesToShow = new ArrayList<String>(); final Locale[] locales = new Locale[9]; Locale locale = new Locale("en"); locales[0] = locale; localesToShow.add(locale.getDisplayLanguage() + " - ("+ locale.toString() + ")"); locale = new Locale("es"); locales[1] = locale; localesToShow.add(locale.getDisplayLanguage() + " - ("+ locale.toString() + ")"); locale = new Locale("fr"); locales[2] = locale; localesToShow.add(locale.getDisplayLanguage() + " - ("+ locale.toString() + ")"); locale = new Locale("hu"); locales[3] = locale; localesToShow.add(locale.getDisplayLanguage() + " - ("+ locale.toString() + ")"); locale = new Locale("id"); locales[4] = locale; localesToShow.add(locale.getDisplayLanguage() + " - ("+ locale.toString() + ")"); locale = new Locale("it"); locales[5] = locale; localesToShow.add(locale.getDisplayLanguage() + " - ("+ locale.toString() + ")"); locale = new Locale("nl"); locales[6] = locale; localesToShow.add(locale.getDisplayLanguage() + " - ("+ locale.toString() + ")"); locale = new Locale("pt"); locales[7] = locale; localesToShow.add(locale.getDisplayLanguage() + " - ("+ locale.toString() + ")"); locale = new Locale("ru"); locales[8] = locale; localesToShow.add(locale.getDisplayLanguage() + " - ("+ locale.toString() + ")"); String[] items = new String[localesToShow.size()]; items = localesToShow.toArray(items); builder.setTitle(preference.getContext().getString(R.string.menu_options)); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { PrefUtils.setLocale(getApplicationContext(), locales[which].toString()); } }); builder.create().show(); return true; } }); findPreference("email_developer").setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(final Preference preference) { AlertDialog.Builder builder = new AlertDialog.Builder(preference.getContext()); final String[] items = preference.getContext().getResources().getStringArray(R.array.contact_email_entries); builder.setTitle(preference.getContext().getString(R.string.menu_options)); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { String emailFooter = "\n\n\n" + preference.getContext().getString(R.string.email_content_version_with_space) + versionName + "\n" + preference.getContext().getString(R.string.email_content_brand_with_space) + android.os.Build.BRAND + "\n" + preference.getContext().getString(R.string.email_content_model_with_space) + android.os.Build.MODEL + "\n" + preference.getContext().getString(R.string.email_content_sdk_with_space) + android.os.Build.VERSION.SDK_INT + "\n" + preference.getContext().getString(R.string.email_content_locale_with_space) + Locale.getDefault().toString() + "\n" + preference.getContext().getString(R.string.email_content_selected_locale_with_space) + PrefUtils.getLocale(getApplicationContext()); String[] values = preference.getContext().getResources().getStringArray(R.array.contact_email_entryValues); Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); emailIntent.setType("text/plain"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] {values[which]}); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, items[which]); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, emailFooter); startActivity(Intent.createChooser(emailIntent, null)); } }); builder.create().show(); return true; } }); findPreference("donate").setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { String url = getApplicationContext().getString(R.string.link_donate); Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); return true; } }); findPreference("licences").setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { HelpUtils.showOpenSourceLicenses(SettingsActivity.this); } else { LayoutInflater li = LayoutInflater.from(SettingsActivity.this); View promptsView = li.inflate(R.layout.d_webview, null); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(SettingsActivity.this); alertDialogBuilder.setTitle(R.string.pref_about_licenses); alertDialogBuilder.setView(promptsView); final WebView webview = (WebView) promptsView.findViewById(R.id.webview_dialog); webview.loadUrl("file:///android_asset/licenses.html"); final AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); } return true; } }); findPreference("changelog").setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { String url = getApplicationContext().getString(R.string.link_changelog); Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); return true; } }); if (findPreference("checkForUpdate") != null) { findPreference("checkForUpdate").setOnPreferenceClickListener(new OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) { String url = getApplicationContext().getString(R.string.link_download_with_slash) + versionName; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); return true; } }); } } public void changeLang(String lang) { if (lang.equalsIgnoreCase("")) return; Locale myLocale = new Locale(lang); Locale.setDefault(myLocale); android.content.res.Configuration config = new android.content.res.Configuration(); config.locale = myLocale; getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); } }