package com.aero.control.settings; import android.app.ActionBar; import android.app.AlertDialog; import android.content.Context; import android.content.ContextWrapper; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.graphics.Typeface; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.text.method.LinkMovementMethod; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.aero.control.AeroActivity; import com.aero.control.R; import com.aero.control.helpers.Android.AboutDialog; import com.aero.control.helpers.Util; import com.aero.control.service.PerAppServiceHelper; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; /** * Created by Alexander Christ on 21.09.13. */ public class PrefsActivity extends PreferenceActivity { static Context context; public static final Typeface font = Typeface.create("sans-serif-condensed", Typeface.NORMAL); public int mActionBarTitleID; public TextView mActionBarTitle; private ActionBar mActionBar; private int mCounter; private CheckBoxPreference mPer_app_check, mRebootChecker, mPerAppMonitor, mPerAppToasts; private ListPreference mBootDelay; @Override public void onCreate(Bundle savedInstanceState) { mCounter = 0; super.onCreate(savedInstanceState); if(getResources().getBoolean(R.bool.portrait_only)){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mActionBar = getActionBar(); mActionBar.setIcon(android.R.color.transparent); } else { getActionBar().setIcon(R.drawable.app_icon_actionbar); mActionBarTitleID = getResources().getIdentifier("action_bar_title", "id", "android"); mActionBarTitle = (TextView) findViewById(mActionBarTitleID); mActionBarTitle.setTypeface(font); } // Load the preferences from an XML resource addPreferencesFromResource(R.layout.preference); // Get name; this.setTitle(R.string.aero_settings); context = this; getActionBar().setDisplayHomeAsUpEnabled(true); final PreferenceScreen root = this.getPreferenceScreen(); if (mRebootChecker == null) mRebootChecker = (CheckBoxPreference)root.findPreference("reboot_checker"); if (mPer_app_check == null) mPer_app_check = (CheckBoxPreference)root.findPreference("per_app_service"); if(mBootDelay == null) mBootDelay = (ListPreference) root.findPreference("boot_delay"); if (mPerAppMonitor == null) mPerAppMonitor = (CheckBoxPreference)root.findPreference("per_app_monitor"); if (mPerAppToasts == null) mPerAppToasts = (CheckBoxPreference)root.findPreference("per_app_toast"); Preference resetTutorials = root.findPreference("reset_tutorials"); Preference beta = root.findPreference("beta"); Preference about = root.findPreference("about"); Preference version = root.findPreference("version"); Preference google = root.findPreference("google+"); Preference legal = root.findPreference("legal"); Preference xda = root.findPreference("xda_thread"); Preference github = root.findPreference("github_link"); mRebootChecker.setIcon(R.drawable.ic_action_phone); setCheckedState(mRebootChecker); mPer_app_check.setIcon(R.drawable.ic_action_person); mPerAppMonitor.setIcon(R.drawable.ic_action_appmonitor); mBootDelay.setIcon(R.drawable.timer); mBootDelay.setDialogIcon(R.drawable.timer); mPerAppToasts.setIcon(R.drawable.ic_action_toast); setCheckedState(mPerAppToasts); setMinutes(mBootDelay, mBootDelay.getValue()); resetTutorials.setIcon(R.drawable.ic_action_warning); setCheckedState(mPer_app_check); setCheckedState(mPerAppMonitor); version.setIcon(R.drawable.rocket); beta.setIcon(R.drawable.beta); google.setIcon(R.drawable.google); xda.setIcon(R.drawable.xda); github.setIcon(R.drawable.github); if (AeroActivity.mJobManager != null) mPerAppMonitor.setChecked(AeroActivity.mJobManager.getJobManagerState()); if (!mPer_app_check.isChecked()) mPerAppMonitor.setEnabled(false); try { version.setTitle("Version: " + getPackageManager().getPackageInfo(getPackageName(), 0).versionName); version.setSummary("Build: " + getPackageManager().getPackageInfo(getPackageName(), 0).versionCode); } catch (PackageManager.NameNotFoundException e) {} about.setIcon(R.drawable.ic_action_about); legal.setIcon(R.drawable.ic_action_legal); beta.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { AboutDialog alertDialog = new AboutDialog(); LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.about_screen, null); TextView aboutText = (TextView) layout.findViewById(R.id.aboutScreen); alertDialog.setContext(context); alertDialog.setTitle(R.string.pref_beta_program); alertDialog.setIcon(R.drawable.beta); alertDialog.setView(layout); aboutText.setText(getText(R.string.pref_beta_program_text)); alertDialog.show(getFragmentManager(), ""); aboutText.setMovementMethod(LinkMovementMethod.getInstance()); return true; } }); google.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Uri uri = Uri.parse("https://plus.google.com/117941672478859152986/"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); return true; } }); xda.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Uri uri = Uri.parse("http://forum.xda-developers.com/showthread.php?t=2483827"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); return true; } }); github.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { Uri uri = Uri.parse("https://github.com/Blechd0se/android_packages_apps_AeroControl"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); return true; } }); mRebootChecker.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { setCheckedState((CheckBoxPreference) preference); return false; } }); mPerAppToasts.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { setCheckedState((CheckBoxPreference) preference); return false; } }); mBootDelay.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { setMinutes(mBootDelay, newValue.toString()); return false; } }); mPer_app_check.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { setCheckedState((CheckBoxPreference) preference); if (mPer_app_check.isChecked()) { Util.showUsageStatDialog(PrefsActivity.this); mPerAppMonitor.setEnabled(true); mPerAppMonitor.setChecked(true); AeroActivity.mJobManager.enable(); setCheckedState(mPerAppMonitor); // Only start if really down; if (AeroActivity.perAppService == null) AeroActivity.perAppService = new PerAppServiceHelper(getBaseContext()); if (!AeroActivity.perAppService.getState()) AeroActivity.perAppService.startService(); //** store preferences preference.getEditor().commit(); return true; } else { mPerAppMonitor.setEnabled(false); mPerAppMonitor.setChecked(false); AeroActivity.mJobManager.disable(); setCheckedState(mPerAppMonitor); // Only stop if running; if (AeroActivity.perAppService == null) { return false; } if (AeroActivity.perAppService.getState()) { AeroActivity.perAppService.stopService(); } return false; } } }); mPerAppMonitor.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { setCheckedState((CheckBoxPreference) preference); if (((CheckBoxPreference) preference).isChecked()) { Util.showUsageStatDialog(PrefsActivity.this); if (AeroActivity.mJobManager != null) AeroActivity.mJobManager.enable(); } else { if (AeroActivity.mJobManager != null) AeroActivity.mJobManager.disable(); } return false; } }); resetTutorials.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { final AlertDialog.Builder dialog = new AlertDialog.Builder(context); dialog.setTitle(R.string.pref_reset_tutorials_title); dialog.setMessage(R.string.pref_reset_tutorials_dialog); dialog.setIcon(R.drawable.warning); dialog.setPositiveButton(R.string.got_it, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { // Going to reset.. String[] fileArray = AeroActivity.shell.getDirInfo(getApplicationInfo().dataDir + "/files/", true); for (String s : fileArray) { if (!(new File(getApplicationInfo().dataDir + "/files/" + s).delete())) Log.e("Aero", "Couldn't delete: " + s); } } }); dialog.setNegativeButton(R.string.cancel, null); dialog.create().show(); return false; } }); about.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { AboutDialog alertDialog = new AboutDialog(); LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.about_screen, null); TextView aboutText = (TextView) layout.findViewById(R.id.aboutScreen); alertDialog.setContext(context); alertDialog.setTitle(R.string.about); alertDialog.setIcon(R.drawable.beer); alertDialog.setView(layout); alertDialog.setPayPalIcons(true); alertDialog.setNeutralButton(R.string.donation_quarx); alertDialog.setPositiveButton(R.string.donation_blechdose); aboutText.setText(getText(R.string.about_dialog)); alertDialog.show(getFragmentManager(), ""); return true; } }); legal.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { AlertDialog.Builder builder = new AlertDialog.Builder(context); LayoutInflater inflater = getLayoutInflater(); View layout = inflater.inflate(R.layout.about_screen, null); TextView aboutText = (TextView) layout.findViewById(R.id.aboutScreen); builder.setTitle(R.string.legal); builder.setIcon(R.drawable.email); aboutText.setText(getText(R.string.legal_dialog)); aboutText.setTextSize(13); builder.setView(layout) .setPositiveButton(R.string.send_email, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts( "mailto", "alex.christ@hotmail.de", null)); try { // Could help debugging emailIntent.putExtra(Intent.EXTRA_SUBJECT, "[AeroControl] Got something for you (" + getPackageManager().getPackageInfo(getPackageName(), 0).versionName + ")"); } catch (PackageManager.NameNotFoundException e) { emailIntent.putExtra(Intent.EXTRA_SUBJECT, "[AeroControl] Got something for you"); } startActivity(Intent.createChooser(emailIntent, getText(R.string.send_email))); } }); builder.show(); return true; } }); version.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { mCounter++; // Show testsuite if clicked; if (mCounter >= 7) { mCounter = 0; ContextWrapper cw = new ContextWrapper(getBaseContext()); File testsuite = new File(cw.getFilesDir() + "/testsuite"); if (testsuite.exists()) { testsuite.delete(); Toast.makeText(getApplicationContext(), "You have disabled the TestSuite!", Toast.LENGTH_LONG).show(); return false; } try { FileOutputStream fos = getApplicationContext().openFileOutput("testsuite", Context.MODE_PRIVATE); fos.write("1".getBytes()); fos.close(); } catch (IOException e) { Log.e("Aero", "Could not save file. ", e); } Toast.makeText(getApplicationContext(), "You have enabled the TestSuite!", Toast.LENGTH_LONG).show(); } return false; } }); } private void setCheckedState(CheckBoxPreference preference) { if (preference.isChecked()) preference.setSummary(R.string.enabled); else preference.setSummary(R.string.disabled); } private void setMinutes(ListPreference preference, String value) { if (value != null) { if (value.equals(getText(R.string.disabled)) || value.equals("" + 0)) { preference.setSummary(R.string.disabled); preference.setValue("" + 0); return; } int i = Integer.parseInt(value); if (i == 1) preference.setSummary(value + " " + getText(R.string.minute)); else preference.setSummary(value + " " + getText(R.string.minutes)); preference.setValue(value); } else { preference.setSummary(R.string.disabled); preference.setValue("" + 0); preference.setValueIndex(0); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); finish(); Intent i = new Intent(context, AeroActivity.class); context.startActivity(i); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); return true; default: return super.onOptionsItemSelected(item); } } }