package kz.virtex.htc.tweaker; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import kz.virtex.htc.tweaker.preference.IconsColorPreference; import kz.virtex.htc.tweaker.preference.MultiCheckPreference; import kz.virtex.htc.tweaker.preference.MultiCheckPreference.Row; import kz.virtex.htc.tweaker.preference.NumberPickerPreference; import kz.virtex.htc.tweaker.preference.SeekBarPreference; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.provider.Settings; import android.support.v4.app.NotificationCompat; import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.widget.SeekBar; import com.htc.preference.HtcEditTextPreference; import com.htc.preference.HtcListPreference; import com.htc.preference.HtcPreference; import com.htc.preference.HtcPreference.OnPreferenceFirstBindViewListener; import com.htc.preference.HtcPreferenceActivity; import com.htc.preference.HtcPreferenceCategory; import com.htc.preference.HtcPreferenceScreen; import com.htc.preference.HtcSwitchPreference; import com.htc.widget.HtcAlertDialog; @SuppressLint("DefaultLocale") public class Main extends HtcPreferenceActivity implements HtcPreference.OnPreferenceChangeListener, SharedPreferences.OnSharedPreferenceChangeListener { public static SharedPreferences preferences; private TweakerBroadcastReceiver broadcastReceiverInstance = null; private static ArrayList<String> mSettingsChanges = new ArrayList<String>(); private static NotificationManager mNotifyMgr; private static String DEBUG = "Main"; @SuppressWarnings("unused") private void test() { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(TweakerBroadcastReceiver.ACTION_DELETE_MESSAGE); intentFilter.addAction(TweakerBroadcastReceiver.ACTION_CALL_TO_CONTACT); intentFilter.addAction(TweakerBroadcastReceiver.ACTION_REPLY_MESSAGE); broadcastReceiverInstance = new TweakerBroadcastReceiver(); registerReceiver(broadcastReceiverInstance, intentFilter); Intent intentCallToContact = new Intent(); intentCallToContact.setAction(TweakerBroadcastReceiver.ACTION_CALL_TO_CONTACT); intentCallToContact.putExtra("ContactId", Long.parseLong(String.valueOf("123"))); intentCallToContact.putExtra("Sender", "Wow!"); PendingIntent mPintentCallToContact = PendingIntent.getBroadcast(this, 12345, intentCallToContact, 0); Notification.Builder localBuilder = new Notification.Builder(this); localBuilder.setSmallIcon(R.drawable.notification_icon); localBuilder.setContentTitle("Test Title"); localBuilder.setContentText("message text gere"); localBuilder.setStyle(new Notification.BigTextStyle().bigText("message text gere")); localBuilder.addAction(0, "Удалить", mPintentCallToContact); Notification localNotification = localBuilder.build(); mNotifyMgr.notify(12345, localNotification); } @SuppressLint( { "WorldReadableFiles", "WorldWriteableFiles", "DefaultLocale" }) public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); preferences = getSharedPreferences(Const.PREFERENCE_FILE, Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE); PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this); addPreferencesFromResource(R.xml.settings); // If Xposed not installed, let's do not confuse // users with working application and non working tweaks if (!Misc.isPackageInstalled("de.robv.android.xposed.installer", this)) { new HtcAlertDialog.Builder(this).setTitle(R.string.app_error).setMessage(R.string.no_xposed).setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Uri uriUrl = Uri.parse("http://forum.xda-developers.com/showthread.php?p=53011963"); Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl); startActivity(launchBrowser); Main.this.finish(); } }).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Main.this.finish(); } }).show(); } else { startService(new Intent(this, TweakerService.class).setAction(TweakerService.ACTION_CLEANUP_RECORDS)); init(); } } public boolean onCreateOptionsMenu(Menu paramMenu) { super.onCreateOptionsMenu(paramMenu); paramMenu.add(Menu.NONE, 101, Menu.NONE, "Info").setIcon(R.drawable.ic_menu_info_details).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return true; } public boolean onOptionsItemSelected(MenuItem paramMenuItem) { switch (paramMenuItem.getItemId()) { case 101: Intent intent = new Intent(this, AboutActivity.class); startActivity(intent); break; } return true; } private void init() { // Log.d(DEBUG,"init"); // test(); setupCallRecording(); setupRecordingTypeFilter(); setupRecordingAutoCaller(); setupRecordingAutoSlot(); setupRecordingDelete(); setupSimSettings(); setupDataIcons(); setupWeather(); setupWiFiIcons(); storeWeatherApkPath(); setupNetworkManager("slot_1_user_text", R.string.preferred_network_1); setupNetworkManager("slot_2_user_text", R.string.preferred_network_2); //setupNetworkManager("spn_1_user_text", R.string.spn_default); //setupNetworkManager("spn_2_user_text", R.string.spn_default); setupSense6(); setupDUAL(); setupCamera(); setupSlotSaturation(); // setupMediaKey(); // setupLogact(); setupBattery(); setupQS(); if (Misc.isDual()) { catchSimShowAction(Const.TWEAK_SHOW_SIM_CARD_DIAL_ACTION); catchSimShowAction(Const.TWEAK_SHOW_SIM_CARD_MESS_ACTION); setupSimShow(Const.TWEAK_SHOW_SIM_CARD_DIAL, Const.SIM_CARD_SEL_DIAL_SCREEN, Const.TWEAK_SHOW_SIM_CARD_DIAL_ACTION); setupSimShow(Const.TWEAK_SHOW_SIM_CARD_MESS, Const.SIM_CARD_SEL_MESS_SCREEN, Const.TWEAK_SHOW_SIM_CARD_MESS_ACTION); setupForceActivity(Const.SIM_CARD_FORCE_MESS_CAT, Const.TWEAK_FORCE_MESS, Const.TWEAK_FORCE_MESS_ACTION, Const.TWEAK_SHOW_SIM_CARD_MESS, Const.TWEAK_SHOW_SIM_CARD_MESS_ACTION); setupForceActivity(Const.SIM_CARD_FORCE_DIAL_CAT, Const.TWEAK_FORCE_DIAL, Const.TWEAK_FORCE_DIAL_ACTION, Const.TWEAK_SHOW_SIM_CARD_DIAL, Const.TWEAK_SHOW_SIM_CARD_DIAL_ACTION); } } private void setupForceActivity(String category_key, final String force_key, final String action_key, String multi_key, final String multi_key_action) { final HtcPreferenceCategory category = (HtcPreferenceCategory) findPreference(category_key); HtcListPreference force_pref = (HtcListPreference) findPreference(force_key); final HtcListPreference action_pref = (HtcListPreference) findPreference(action_key); // set on change listener final MultiCheckPreference multiSelector = (MultiCheckPreference) findPreference(multi_key); final HtcListPreference multiSelectorAct = (HtcListPreference) findPreference(multi_key_action); int force_value = Settings.System.getInt(getContentResolver(), force_key, 0); int action_value = Settings.System.getInt(getContentResolver(), action_key, 0); if (force_value == 0) { category.removePreference(action_pref); } else { // if forece value not null, then action value is in place if (multiSelectorAct != null) { multiSelectorAct.setValue(String.valueOf(action_value)); multiSelectorAct.setEnabled(false); } } Settings.System.putInt(getBaseContext().getContentResolver(), multi_key_action, action_value); refreshDependSelector(multiSelector, multiSelectorAct, force_value, category, action_pref); force_pref.setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(HtcPreference pref, Object object) { int value = Integer.parseInt(object.toString()); refreshDependSelector(multiSelector, multiSelectorAct, value, category, action_pref); Settings.System.putInt(pref.getContext().getContentResolver(), force_key, value); return true; } }); action_pref.setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(HtcPreference pref, Object object) { int value = Integer.parseInt(object.toString()); if (multiSelectorAct != null) { Settings.System.putInt(getBaseContext().getContentResolver(), multi_key_action, value); multiSelectorAct.setValue(String.valueOf(value)); } Settings.System.putInt(pref.getContext().getContentResolver(), action_key, value); return true; } }); } private void refreshDependSelector(MultiCheckPreference multiSelector, HtcListPreference multiSelectorAct, int value, HtcPreferenceCategory category, HtcListPreference action_pref) { if (value == 0) { category.removePreference(action_pref); // We do not remember how previously was set multiSelector.setAllChecked(); multiSelector.setEnabled(true); if (multiSelectorAct != null) multiSelectorAct.setEnabled(true); } else { category.addPreference(action_pref); // Set filtering value and disable option multiSelector.setAllUnChecked(); multiSelector.setChecked(value - 1); multiSelector.setEnabled(false); if (multiSelectorAct != null) multiSelectorAct.setEnabled(false); } } private void catchSimShowAction(final String option_key) { final HtcListPreference action = (HtcListPreference) findPreference(option_key); action.setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { int index = Integer.parseInt(object.toString()); Settings.System.putInt(preference.getContext().getContentResolver(), option_key, index); return true; } }); } private void setupSimShow(final String key, final String screen_key, final String option_key) { final String[] optional = new String[2]; String slot1_name = Settings.System.getString(getContentResolver(), "slot_1_user_text"); String slot2_name = Settings.System.getString(getContentResolver(), "slot_2_user_text"); if (TextUtils.isEmpty(slot1_name)) optional[0] = getResources().getString(R.string.preferred_network_1); else optional[0] = slot1_name; if (TextUtils.isEmpty(slot2_name)) optional[1] = getResources().getString(R.string.preferred_network_2); else optional[1] = slot2_name; final MultiCheckPreference pref = (MultiCheckPreference) findPreference(key); int total = changeFilterSummary(pref, pref.rows, optional); final HtcListPreference action = (HtcListPreference) findPreference(option_key); final HtcPreferenceCategory screen = (HtcPreferenceCategory) findPreference(screen_key); if (total == pref.rows.size()) { screen.removePreference(action); } pref.setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { @SuppressWarnings("unchecked") public boolean onPreferenceChange(HtcPreference preference, Object object) { int total = changeFilterSummary((MultiCheckPreference) preference, (ArrayList<Row>) object, optional); if (total == pref.rows.size()) { screen.removePreference(action); } else { screen.addPreference(action); catchSimShowAction(option_key); } ArrayList<Row> rows = (ArrayList<Row>) object; for (int i = 0; i < rows.size(); i++) { Settings.System.putInt(getContentResolver(), key + "_" + rows.get(i).getKey(), Misc.toInt(rows.get(i).getState())); } return true; } }); } private void setupQS() { final HtcPreferenceCategory screen = (HtcPreferenceCategory) findPreference(Const.QUICK_SETTINGS_CAT); final HtcListPreference side = (HtcListPreference) findPreference(Const.TWEAK_QUICK_SETTINGS_SIDE); HtcListPreference qs = (HtcListPreference) findPreference(Const.TWEAK_QUICK_SETTINGS); if (preferences.getString(Const.TWEAK_QUICK_SETTINGS, "0").equals("0")) { screen.removePreference(side); } qs.setOnPreferenceChangeListener(new HtcListPreference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(HtcPreference arg0, Object object) { if (object.toString().equals("0")) screen.removePreference(side); else screen.addPreference(side); return true; } }); } private void setupBattery() { HtcSwitchPreference colorBat = (HtcSwitchPreference) findPreference(Const.TWEAK_COLORED_BATTERY); colorBat.setDependency(Const.TWEAK_STOCK_BATTERY); } private void setupLogact() { MultiCheckPreference logcat = (MultiCheckPreference) findPreference(Const.TWEAK_LOGCAT_FILTER); logcat.unsetMinimum(); } private void setupMediaKey() { final HtcPreferenceCategory mediaCategory = (HtcPreferenceCategory) findPreference(Const.MEDIA_CONTROL_CAT); int mediaOptionVal = Integer.parseInt(preferences.getString(Const.TWEAK_MEDIA_OPTION, "0")); final HtcListPreference mediaOptionPref = (HtcListPreference) findPreference(Const.TWEAK_MEDIA_OPTION); final HtcListPreference mediaKeyUpPref = (HtcListPreference) findPreference(Const.TWEAK_MEDIA_KEY_UP); final HtcListPreference mediaKeyDownPref = (HtcListPreference) findPreference(Const.TWEAK_MEDIA_KEY_DOWN); if (mediaOptionVal == 0) { mediaCategory.removePreference(mediaKeyUpPref); mediaCategory.removePreference(mediaKeyDownPref); } mediaOptionPref.setOnPreferenceChangeListener(new HtcListPreference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(HtcPreference arg0, Object object) { Integer value = Integer.parseInt(object.toString()); if (value != 0) { mediaCategory.addPreference(mediaKeyUpPref); mediaCategory.addPreference(mediaKeyDownPref); } else { mediaCategory.removePreference(mediaKeyUpPref); mediaCategory.removePreference(mediaKeyDownPref); } return true; } }); } private void setupSlotSaturation() { if (Misc.isSense6() && Misc.isDual()) { final SeekBarPreference slot1 = (SeekBarPreference) findPreference(Const.TWEAK_SLOT1_COLOR); Misc.adjustHue(slot1.getIcon(), Misc.getHueValue(preferences.getInt(Const.TWEAK_SLOT1_COLOR, 0))); slot1.setOnSeekBarTrackListener(new SeekBarPreference.OnSeekBarTrackListener() { @Override public void onSeekBarTrack(SeekBar paramSeekBar, int value) { Misc.adjustHue(slot1.getIcon(), Misc.getHueValue(value)); // paramSeekBar.setBackgroundColor(Misc.colorTransform(-13388315, // Misc.getHueValue(value))); } }); final SeekBarPreference slot2 = (SeekBarPreference) findPreference(Const.TWEAK_SLOT2_COLOR); Misc.adjustHue(slot2.getIcon(), Misc.getHueValue(preferences.getInt(Const.TWEAK_SLOT2_COLOR, 0))); slot2.setOnSeekBarTrackListener(new SeekBarPreference.OnSeekBarTrackListener() { @Override public void onSeekBarTrack(SeekBar paramSeekBar, int value) { Misc.adjustHue(slot2.getIcon(), Misc.getHueValue(value)); // paramSeekBar.setBackgroundColor(Misc.colorTransform(-13128336, // Misc.getHueValue(value))); } }); } } @SuppressLint("SimpleDateFormat") private void setupCamera() { final HtcPreferenceCategory screen = (HtcPreferenceCategory) findPreference(Const.SCREEN_MEDIA); final HtcListPreference tweak = (HtcListPreference) findPreference(Const.TWEAK_PHOTO_PREFIX); final HtcListPreference position = (HtcListPreference) findPreference(Const.TWEAK_PHOTO_PREFIX_POSITION); tweak.setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { String value = object.toString(); if (!value.equals("0")) { screen.addPreference(position); String date = new SimpleDateFormat(value).format(new Date()); int posVal = Integer.parseInt(position.getValue()); String[] tokens = getResources().getString(R.string.enablePhotoPrefixSummary).split("\\.(?=[^\\.]+$)"); String ext = tokens[1]; String file = tokens[0]; if (posVal == 0) { tweak.setSummary(date + "_" + file + "." + ext); } else { tweak.setSummary(file + "_" + date + "." + ext); } } else { tweak.setSummary(getResources().getString(R.string.prefix_option_0)); screen.removePreference(position); } return true; } }); position.setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { int posVal = Integer.parseInt(object.toString()); String date = new SimpleDateFormat(tweak.getValue()).format(new Date()); String[] tokens = getResources().getString(R.string.enablePhotoPrefixSummary).split("\\.(?=[^\\.]+$)"); String ext = tokens[1]; String file = tokens[0]; if (posVal == 0) { tweak.setSummary(date + "_" + file + "." + ext); } else { tweak.setSummary(file + "_" + date + "." + ext); } return true; } }); String value = preferences.getString(Const.TWEAK_PHOTO_PREFIX, "0"); if (!value.equals("0")) { String date = new SimpleDateFormat(value).format(new Date()); int posVal = Integer.parseInt(position.getValue()); String[] tokens = getResources().getString(R.string.enablePhotoPrefixSummary).split("\\.(?=[^\\.]+$)"); String ext = tokens[1]; String file = tokens[0]; if (posVal == 0) { tweak.setSummary(date + "_" + file + "." + ext); } else { tweak.setSummary(file + "_" + date + "." + ext); } } else { screen.removePreference(position); } } private void setupSense6() { if (!Misc.isSense6()) { HtcPreferenceScreen preferenceScreen = (HtcPreferenceScreen) findPreference(Const.DUAL_SETTINGS_SCREEN_KEY); preferenceScreen.removePreference(findPreference(Const.ICON_INDICATOR_SLOT_SCREEN)); HtcPreferenceCategory preferenceCat = (HtcPreferenceCategory) findPreference(Const.OTHER_SETTINGS_SCREEN_KEY); preferenceCat.removePreference(findPreference(Const.TWEAK_OLD_SENSE_DIALER)); } } private void setupDUAL() { if (!Misc.isDual()) { HtcPreferenceCategory preferenceCat = (HtcPreferenceCategory) findPreference(Const.OTHER_SETTINGS_SCREEN_KEY); preferenceCat.removePreference(findPreference(Const.TWEAK_ENABLE_SIP)); preferenceCat = (HtcPreferenceCategory) findPreference(Const.SETTINGS_KEY_CAT); preferenceCat.removePreference(findPreference(Const.DUAL_SETTINGS_SCREEN_KEY)); } } private void storeWeatherApkPath() { PackageManager pm = getPackageManager(); ApplicationInfo ai; try { ai = pm.getApplicationInfo(Const.WEATHER_PACKAGE_NAME, 0); String sourceApk = ai.publicSourceDir; preferences.edit().putString(Const.WEATHER_PACKAGE_APK, sourceApk).commit(); } catch (NameNotFoundException e) { } } protected void onResume() { // Log.d(DEBUG,"onResume"); super.onResume(); // remove restart notification on resume mNotifyMgr.cancel(001); if (broadcastReceiverInstance != null) { unregisterReceiver(broadcastReceiverInstance); } final HtcSwitchPreference weatherPref = (HtcSwitchPreference) findPreference(Const.TWEAK_COLORED_WEATHER); if (Misc.isPackageInstalled(Const.WEATHER_PACKAGE_NAME, weatherPref.getContext())) { // weatherPref.setChecked(true); // putBoolean(Const.TWEAK_COLORED_WEATHER, true); storeWeatherApkPath(); } else { // weatherPref.setChecked(false); // putBoolean(Const.TWEAK_COLORED_WEATHER, false); } } protected void onPause() { // Log.d(DEBUG,"onPause"); if (broadcastReceiverInstance != null) { // unregisterReceiver(broadcastReceiverInstance); } super.onPause(); checkRestartRequired(); } protected void onStop() { // Log.d(DEBUG,"onStop"); super.onStop(); } protected void onDestroy() { // Log.d(DEBUG,"onDestroy"); super.onDestroy(); checkRestartRequired(); } private void setupWeather() { final HtcSwitchPreference weatherPref = (HtcSwitchPreference) findPreference(Const.TWEAK_COLORED_WEATHER); weatherPref.setOnPreferenceFirstBindViewListener(new OnPreferenceFirstBindViewListener() { public void onPreferenceFirstBindView(HtcPreference preference) { if (!Misc.isPackageInstalled(Const.WEATHER_PACKAGE_NAME, preference.getContext())) { // weatherPref.setEnabled(false); weatherPref.setChecked(false); putBoolean(Const.TWEAK_COLORED_WEATHER, false); } else { storeWeatherApkPath(); } } }); weatherPref.setOnPreferenceClickListener(new HtcPreference.OnPreferenceClickListener() { public boolean onPreferenceClick(HtcPreference preference) { if (!Misc.isPackageInstalled(Const.WEATHER_PACKAGE_NAME, preference.getContext())) { new AlertDialog.Builder(preference.getContext()).setTitle(R.string.dialog_weather_title).setMessage(R.string.dialog_weather_alert).setNeutralButton(R.string.dialog_download, new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + Const.WEATHER_PACKAGE_NAME)); marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); startActivity(marketIntent); } }).setNegativeButton(R.string.dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface arg0, int arg1) { } }).show(); weatherPref.setChecked(false); putBoolean(Const.TWEAK_COLORED_WEATHER, false); return false; } return true; } }); } @SuppressWarnings("unused") private void setupRecordingDeleteCount() { final NumberPickerPreference saveLast = (NumberPickerPreference) findPreference(Const.TWEAK_CALL_REC_AUTO_DELETE_COUNT); } private void setupWiFiIcons() { Misc.applyTheme(findPreference(Const.TWEAK_COLORED_WIFI_COLOR).getIcon(), Const.TWEAK_COLORED_WIFI_COLOR, preferences); Misc.applyTheme(findPreference(Const.TWEAK_COLORED_WIFI_COLOR).getIcon(), Const.TWEAK_COLORED_WIFI_COLOR, preferences); final HtcPreferenceCategory preferenceCategory = (HtcPreferenceCategory) findPreference(Const.SCREEN_ICONS_COLORING); HtcSwitchPreference wifiTweak = (HtcSwitchPreference) findPreference(Const.TWEAK_COLORED_WIFI); final IconsColorPreference wifiTweakColor = (IconsColorPreference) findPreference(Const.TWEAK_COLORED_WIFI_COLOR); wifiTweakColor.setColor("#FFFFFF"); if (!wifiTweak.isChecked()) { preferenceCategory.removePreference(wifiTweakColor); } wifiTweak.setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { Integer value = 0; if (object.toString() == "true") value = 1; if (value == 1) { preferenceCategory.addPreference(wifiTweakColor); } else { preferenceCategory.removePreference(wifiTweakColor); } return true; } }); } private void setupSimSettings() { final HtcPreferenceCategory preferenceCategory = (HtcPreferenceCategory) findPreference(Const.SCREEN_ICONS_COLORING); final HtcPreferenceScreen colorSimScreen = (HtcPreferenceScreen) findPreference(Const.COLOR_SIM_SCREEN); HtcSwitchPreference tweakColorSim = (HtcSwitchPreference) findPreference(Const.TWEAK_COLORED_SIM); if (!tweakColorSim.isChecked()) { preferenceCategory.removePreference(colorSimScreen); } else { Misc.applyTheme(findPreference(Const.COLOR_SIM_SCREEN).getIcon(), Const.TWEAK_COLOR_SIM1, preferences); Misc.applyTheme(findPreference(Const.TWEAK_COLOR_SIM1).getIcon(), Const.TWEAK_COLOR_SIM1, preferences); Misc.applyTheme(findPreference(Const.TWEAK_COLOR_SIM2).getIcon(), Const.TWEAK_COLOR_SIM2, preferences); } /* * findPreference(Const.TWEAK_COLOR_SIM1).setOnPreferenceChangeListener(new * HtcPreference.OnPreferenceChangeListener() { * * @Override public boolean onPreferenceChange(HtcPreference arg0, * Object arg1) { * Misc.applyTheme(findPreference(Const.COLOR_SIM_SCREEN).getIcon(), * Const.TWEAK_COLOR_SIM1); return false; } }); */ tweakColorSim.setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { Integer value = 0; if (object.toString() == "true") value = 1; if (value == 1) { preferenceCategory.addPreference(colorSimScreen); } else { preferenceCategory.removePreference(colorSimScreen); } return true; } }); } private void setupDataIcons() { Misc.applyTheme(findPreference(Const.TWEAK_DATA_ICONS_COLOR).getIcon(), Const.TWEAK_DATA_ICONS_COLOR, preferences); final HtcPreferenceCategory preferenceCategory = (HtcPreferenceCategory) findPreference(Const.SCREEN_ICONS_COLORING); HtcSwitchPreference dataTweak = (HtcSwitchPreference) findPreference(Const.TWEAK_DATA_ICONS); final IconsColorPreference dataTweakColor = (IconsColorPreference) findPreference(Const.TWEAK_DATA_ICONS_COLOR); dataTweakColor.setColor("#FFFFFF"); if (!dataTweak.isChecked()) { preferenceCategory.removePreference(dataTweakColor); } dataTweak.setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { Integer value = 0; if (object.toString() == "true") value = 1; if (value == 1) { preferenceCategory.addPreference(dataTweakColor); } else { preferenceCategory.removePreference(dataTweakColor); } return true; } }); } private void setupRecordingDelete() { final NumberPickerPreference countPreference = (NumberPickerPreference) findPreference(Const.TWEAK_CALL_REC_AUTO_DELETE_COUNT); countPreference.setEnabled(true); final NumberPickerPreference intervalPreference = (NumberPickerPreference) findPreference(Const.TWEAK_CALL_REC_AUTO_DELETE_INTERVAL); intervalPreference.setEnabled(true); final HtcPreferenceCategory preferenceScreen = (HtcPreferenceCategory) findPreference(Const.TWEAK_CALL_REC_AUTO_DELETE_CAT); preferenceScreen.removePreference(countPreference); preferenceScreen.removePreference(intervalPreference); int deleteValue = Integer.parseInt(preferences.getString(Const.TWEAK_CALL_REC_AUTO_DELETE, "0")); final String[] RecordingDelete = getResources().getStringArray(R.array.RecordingDelete); findPreference(Const.TWEAK_CALL_REC_AUTO_DELETE).setSummary(RecordingDelete[deleteValue]); switch (deleteValue) { case 1: preferenceScreen.addPreference(countPreference); countPreference.setEnabled(true); break; case 2: preferenceScreen.addPreference(intervalPreference); intervalPreference.setEnabled(true); break; } findPreference(Const.TWEAK_CALL_REC_AUTO_DELETE).setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { int index = Integer.parseInt(object.toString()); preference.setSummary(RecordingDelete[index]); Settings.System.putInt(preference.getContext().getContentResolver(), Const.TWEAK_CALL_REC_AUTO_DELETE, index); switch (index) { case 0: preferenceScreen.removePreference(countPreference); preferenceScreen.removePreference(intervalPreference); break; case 1: preferenceScreen.addPreference(countPreference); countPreference.setEnabled(true); preferenceScreen.removePreference(intervalPreference); break; case 2: preferenceScreen.removePreference(countPreference); preferenceScreen.addPreference(intervalPreference); intervalPreference.setEnabled(true); break; } return true; } }); } private void setupRecordingAutoCaller() { findPreference(Const.TWEAK_CALL_REC_AUTO_CALLER).setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { int index = Integer.parseInt(object.toString()); Settings.System.putInt(preference.getContext().getContentResolver(), Const.TWEAK_CALL_REC_AUTO_CALLER, index); return true; } }); } private void setupRecordingAutoSlot() { if (Misc.isDual()) { findPreference(Const.TWEAK_CALL_REC_AUTO_SLOT).setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { int index = Integer.parseInt(object.toString()); Settings.System.putInt(preference.getContext().getContentResolver(), Const.TWEAK_CALL_REC_AUTO_SLOT, index); return true; } }); } else { HtcPreferenceCategory preferenceCategory = (HtcPreferenceCategory) findPreference(Const.RECORDING_FILTER_CAT); preferenceCategory.removePreference(findPreference(Const.TWEAK_CALL_REC_AUTO_SLOT)); } } private void setupCallRecording() { findPreference(Const.TWEAK_CALL_REC_AUTO).setDependency(Const.TWEAK_CALL_REC); findPreference(Const.TWEAK_CALL_REC_AUTO).setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { Integer value = 0; if (object.toString() == "true") value = 1; Settings.System.putInt(preference.getContext().getContentResolver(), Const.TWEAK_CALL_REC_AUTO, value); findPreference(Const.TWEAK_CALL_REC_AUTO_SCREEN).setEnabled(object.toString() == "true"); return true; } }); final HtcSwitchPreference auto_rec = (HtcSwitchPreference) findPreference(Const.TWEAK_CALL_REC_AUTO); findPreference(Const.TWEAK_CALL_REC_AUTO_SCREEN).setEnabled(auto_rec.isChecked()); if (!auto_rec.isEnabled()) { findPreference(Const.TWEAK_CALL_REC_AUTO_SCREEN).setEnabled(false); } findPreference(Const.TWEAK_CALL_REC).setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { Integer value = 0; if (object.toString() == "true") value = 1; Settings.System.putInt(preference.getContext().getContentResolver(), Const.TWEAK_CALL_REC, value); findPreference(Const.TWEAK_CALL_REC_AUTO_SCREEN).setEnabled(object.toString() == "true"); if (value == 1) { findPreference(Const.TWEAK_CALL_REC_AUTO_SCREEN).setEnabled(auto_rec.isChecked()); } return true; } }); int storage = Integer.parseInt(preferences.getString(Const.TWEAK_CALL_REC_AUTO_STORAGE, "1")); final String[] RecordingStorage = getResources().getStringArray(R.array.RecordingStorage); findPreference(Const.TWEAK_CALL_REC_AUTO_STORAGE).setSummary(RecordingStorage[storage]); findPreference(Const.TWEAK_CALL_REC_AUTO_STORAGE).setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { int index = Integer.parseInt(object.toString()); preference.setSummary(RecordingStorage[index]); Settings.System.putInt(getContentResolver(), Const.TWEAK_CALL_REC_AUTO_STORAGE, index); return true; } }); } private void setupRecordingTypeFilter() { final MultiCheckPreference pref = (MultiCheckPreference) findPreference(Const.TWEAK_CALL_REC_AUTO_FILTER); changeFilterSummary(pref, pref.rows); findPreference(Const.TWEAK_CALL_REC_AUTO_FILTER).setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { @SuppressWarnings("unchecked") public boolean onPreferenceChange(HtcPreference preference, Object object) { changeFilterSummary((MultiCheckPreference) preference, (ArrayList<Row>) object); ArrayList<Row> rows = (ArrayList<Row>) object; for (int i = 0; i < rows.size(); i++) { Settings.System.putInt(getContentResolver(), Const.TWEAK_CALL_REC_AUTO_FILTER + "_" + rows.get(i).getKey(), Misc.toInt(rows.get(i).getState())); } return true; } }); } private int changeFilterSummary(MultiCheckPreference pref, ArrayList<Row> rows, String... optional) { int total = 0; ArrayList<String> summs = new ArrayList<String>(); for (int i = 0; i < rows.size(); i++) { if (rows.get(i).getState() == true) { total++; if (optional.length > 0 && optional[i] != null) summs.add(optional[i]); else summs.add(rows.get(i).getSummary()); } } StringBuilder builder = new StringBuilder(); pref.setSummary(builder.append(summs)); return total; } private void setupNetworkManager(final String key, final int standart) { HtcEditTextPreference slot = (HtcEditTextPreference) findPreference(key); String slot_name = Settings.System.getString(getContentResolver(), key); if (TextUtils.isEmpty(slot_name)) { slot.setSummary(standart); putString(key, getResources().getString(standart)); // save for // coloring } else { slot.setSummary(slot_name); putString(key, slot_name); // save for coloring } findPreference(key).setOnPreferenceChangeListener(new HtcPreference.OnPreferenceChangeListener() { public boolean onPreferenceChange(HtcPreference preference, Object object) { String name = object.toString(); if (name.length() > 0) { preference.setSummary(name); Settings.System.putString(getContentResolver(), key, name); putString(key, name); } else { preference.setSummary(standart); Settings.System.putString(getContentResolver(), key, null); preferences.edit().remove(name); } return true; } }); } public static void putBoolean(String name, int value) { preferences.edit().putBoolean(name, Misc.toBoolean(value)).commit(); } public static void putBoolean(String name, boolean value) { preferences.edit().putBoolean(name, value).commit(); } public static void putInt(String name, int value) { preferences.edit().putInt(name, value).commit(); } public static void putFloat(String name, float value) { preferences.edit().putFloat(name, value).commit(); } public static void putString(String name, String value) { preferences.edit().putString(name, value).commit(); } @Override public boolean onPreferenceChange(HtcPreference preference, Object object) { return false; } private void checkRestartRequired() { if (mSettingsChanges.size() > 0) { NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.notification_icon).setContentTitle(getResources().getString(R.string.restartRequired)).setContentText(getResources().getString(R.string.restartRequiredSummary)) .setStyle(new NotificationCompat.BigTextStyle().bigText(getResources().getString(R.string.restartRequiredSummary))); mNotifyMgr.notify(001, mBuilder.build()); } } @Override public void onSharedPreferenceChanged(SharedPreferences pref, String key) { // Call recording works on the fly if (!key.contains("tweak_call_rec") && !key.contains("tweak_show_sim")) { // && // !key.contains("tweak_force") // let's remove cause we are switched back if (mSettingsChanges.contains(key)) { // before removing we should check if it is not integer // if param not exist, then value will be -99999999 // then we should delete it int intChecker; long longChecker; float floatChecker; String strChecker; // surraund with try/catch case we can not intercast try { intChecker = pref.getInt(key, -99976999); } catch (ClassCastException e) { intChecker = -99976999; } try { longChecker = pref.getLong(key, 12345678910L); } catch (ClassCastException e) { longChecker = 12345678910L; } try { floatChecker = pref.getFloat(key, -99976999.0F); } catch (ClassCastException e) { floatChecker = -99976999.0F; } try { strChecker = pref.getString(key, "UnaVaiLabLe"); } catch (ClassCastException e) { strChecker = "UnaVaiLabLe"; } if (intChecker == -99976999 && longChecker == 12345678910L && strChecker.equals("UnaVaiLabLe") && floatChecker == -99976999.0F) { // it means we changing boolean value // so let's remove mSettingsChanges.remove(key); mSettingsChanges.trimToSize(); } } else { mSettingsChanges.add(key); } } // Log.d("onPreferenceChange", key); } }