PageRenderTime 22ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 1ms

/CMParts/src/com/cyanogenmod/cmparts/activities/TrackballNotificationActivity.java

https://github.com/molohov/X8Features
Java | 882 lines | 790 code | 79 blank | 13 comment | 165 complexity | 241c0e415c72dc714d320a4baa5c547f MD5 | raw file
  1. package com.cyanogenmod.cmparts.activities;
  2. import com.cyanogenmod.cmparts.R;
  3. import android.app.AlertDialog;
  4. import android.app.Notification;
  5. import android.app.NotificationManager;
  6. import android.app.ProgressDialog;
  7. import android.content.Context;
  8. import android.content.DialogInterface;
  9. import android.content.pm.PackageInfo;
  10. import android.content.pm.PackageManager;
  11. import android.content.SharedPreferences;
  12. import android.content.SharedPreferences.Editor;
  13. import android.graphics.Color;
  14. import android.os.Build;
  15. import android.os.Bundle;
  16. import android.os.Handler;
  17. import android.preference.CheckBoxPreference;
  18. import android.preference.ListPreference;
  19. import android.preference.Preference;
  20. import android.preference.PreferenceActivity;
  21. import android.preference.PreferenceCategory;
  22. import android.preference.PreferenceScreen;
  23. import android.preference.PreferenceManager;
  24. import android.provider.Settings;
  25. import android.util.Log;
  26. import android.widget.Toast;
  27. import android.widget.EditText;
  28. import android.view.LayoutInflater;
  29. import android.view.View;
  30. import java.io.File;
  31. import java.util.ArrayList;
  32. import java.util.Arrays;
  33. import java.util.HashSet;
  34. import java.util.List;
  35. import java.util.Map;
  36. import java.util.Random;
  37. import java.util.Set;
  38. import java.util.TreeMap;
  39. public class TrackballNotificationActivity extends PreferenceActivity implements
  40. Preference.OnPreferenceChangeListener {
  41. private static final int NOTIFICATION_ID = 400;
  42. public static String[] mPackage;
  43. public String mPackageSource;
  44. public Handler mHandler = new Handler();
  45. public ProgressDialog pbarDialog;
  46. public String mGlobalPackage;
  47. public int mGlobalPulse = 0;
  48. public int mGlobalSuccession = 0;
  49. public int mGlobalBlend = 0;
  50. public CheckBoxPreference globalSuccession;
  51. public CheckBoxPreference globalRandom;
  52. public CheckBoxPreference globalOrder;
  53. public CheckBoxPreference globalBlend;
  54. public Preference globalCustom;
  55. public Preference globalTest;
  56. public String mCatListString;
  57. public SharedPreferences mPrefs;
  58. private static final String CAT_PRIMARY = "Miscellaneous";
  59. private static final String CAT_KEY = "category_list";
  60. private static final String ADVANCED_SCREEN = "advanced_screen";
  61. private static final String CATEGORY_SCREEN = "category_screen";
  62. private static final String ADD_CATEGORY = "add_category";
  63. private static final String REMOVE_CATEGORY = "remove_category";
  64. private static final String ALWAYS_PULSE = "always_pulse";
  65. private static final String BLEND_COLORS = "blend_colors";
  66. private static final String PULSE_SUCCESSION = "pulse_succession";
  67. private static final String PULSE_RANDOM = "pulse_random_colors";
  68. private static final String PULSE_IN_ORDER = "pulse_colors_in_order";
  69. private static final String RESET_NOTIFS = "reset_notifications";
  70. private static final boolean SHOLES_DEVICE = Build.DEVICE.contains("sholes");
  71. public List<String> uniqueArray(String[] array) {
  72. Set<String> set = new HashSet<String>(Arrays.asList(array));
  73. List<String> array2 = new ArrayList<String>(set);
  74. return array2;
  75. }
  76. public boolean isNull(String mString) {
  77. if (mString == null || mString.matches("null") || mString.length() == 0
  78. || mString.matches("|") || mString.matches("")) {
  79. return true;
  80. } else {
  81. return false;
  82. }
  83. }
  84. public String[] getArray(String mGetFrom) {
  85. if (isNull(mGetFrom)) {
  86. String[] tempfalse = new String[20];
  87. return tempfalse;
  88. }
  89. String[] temp;
  90. temp = mGetFrom.split("\\|");
  91. return temp;
  92. }
  93. public String createString(String[] mArray) {
  94. int i;
  95. String temp = "";
  96. for (i = 0; i < mArray.length; i++) {
  97. if (isNull(mArray[i]))
  98. continue;
  99. temp = temp + "|" + mArray[i];
  100. }
  101. return temp;
  102. }
  103. public String[] getPackageAndColorAndBlink(String mString) {
  104. if (isNull(mString)) {
  105. return null;
  106. }
  107. String[] temp;
  108. temp = mString.split("=");
  109. return temp;
  110. }
  111. public String[] findPackage(String pkg) {
  112. String mBaseString = Settings.System.getString(getContentResolver(),
  113. Settings.System.NOTIFICATION_PACKAGE_COLORS);
  114. String[] mBaseArray = getArray(mBaseString);
  115. if (mBaseArray == null)
  116. return null;
  117. for (int i = 0; i < mBaseArray.length; i++) {
  118. if (isNull(mBaseArray[i])) {
  119. continue;
  120. }
  121. if (mBaseArray[i].contains(pkg)) {
  122. return getPackageAndColorAndBlink(mBaseArray[i]);
  123. }
  124. }
  125. return null;
  126. }
  127. public void updatePackage(String pkg, String color, String blink, String cat) {
  128. String stringtemp = Settings.System.getString(getContentResolver(),
  129. Settings.System.NOTIFICATION_PACKAGE_COLORS);
  130. String[] temp = getArray(stringtemp);
  131. int i;
  132. String[] temp2;
  133. temp2 = new String[5];
  134. boolean found = false;
  135. for (i = 0; i < temp.length; i++) {
  136. temp2 = getPackageAndColorAndBlink(temp[i]);
  137. if (temp2 == null) {
  138. continue;
  139. }
  140. if (temp2[0].matches(pkg)) {
  141. if (!cat.matches("0")) {
  142. temp2[3] = cat;
  143. } else if (!blink.matches("0")) {
  144. temp2[2] = blink;
  145. } else {
  146. temp2[1] = color;
  147. }
  148. found = true;
  149. break;
  150. }
  151. }
  152. if (found) {
  153. try {
  154. String tempcolor = temp2[0] + "=" + temp2[1] + "=" + temp2[2] + "=" + temp2[3];
  155. temp[i] = tempcolor;
  156. } catch (ArrayIndexOutOfBoundsException e) {
  157. // Making array changes, if they aren't new, they will error.
  158. // So we force the category to go to Miscelaneous and inform them.
  159. String tempcolor = temp2[0] + "=" + temp2[1] + "=" + temp2[2] + "=" + CAT_PRIMARY;
  160. temp[i] = tempcolor;
  161. Toast.makeText(
  162. this,
  163. R.string.trackball_array_error,
  164. Toast.LENGTH_LONG).show();
  165. }
  166. } else {
  167. int x = 0;
  168. // Get the last one
  169. for (x = 0; x < temp.length; x++) {
  170. if (isNull(temp[x]))
  171. break;
  172. }
  173. String tempcolor;
  174. if (!cat.matches("0")) {
  175. tempcolor = pkg + "=none=2=" + cat;
  176. } else if (!blink.matches("0")) {
  177. tempcolor = pkg + "=none=" + blink + "="+CAT_PRIMARY;
  178. } else {
  179. tempcolor = pkg + "=" + color + "=2="+CAT_PRIMARY;
  180. }
  181. temp[x] = tempcolor;
  182. }
  183. Settings.System.putString(getContentResolver(),
  184. Settings.System.NOTIFICATION_PACKAGE_COLORS, createString(temp));
  185. }
  186. private String[] colorList = {
  187. "green", "white", "red", "blue", "yellow", "cyan", "#800080", "#ffc0cb", "#ffa500",
  188. "#add8e6"
  189. };
  190. public void testPackage(String pkg) {
  191. final int mAlwaysPulse = Settings.System.getInt(getContentResolver(),
  192. Settings.System.TRACKBALL_SCREEN_ON, 0);
  193. String[] mTestPackage = findPackage(pkg);
  194. if (mTestPackage == null || mTestPackage[1].equals("none")) {
  195. return;
  196. }
  197. final Notification notification = new Notification();
  198. notification.flags |= Notification.FLAG_SHOW_LIGHTS;
  199. int mBlinkRate = Integer.parseInt(mTestPackage[2]);
  200. if (mTestPackage[1].equals("random")) {
  201. Random generator = new Random();
  202. int x = generator.nextInt(colorList.length - 1);
  203. notification.ledARGB = Color.parseColor(colorList[x]);
  204. } else {
  205. notification.ledARGB = Color.parseColor(mTestPackage[1]);
  206. }
  207. notification.ledOnMS = 500;
  208. notification.ledOffMS = mBlinkRate * 1000;
  209. NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
  210. if (mAlwaysPulse != 1) {
  211. Settings.System.putInt(getContentResolver(), Settings.System.TRACKBALL_SCREEN_ON, 1);
  212. }
  213. nm.notify(NOTIFICATION_ID, notification);
  214. AlertDialog.Builder endFlash = new AlertDialog.Builder(this);
  215. endFlash.setMessage(R.string.dialog_clear_flash).setCancelable(false)
  216. .setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() {
  217. public void onClick(DialogInterface dialog, int which) {
  218. NotificationManager dialogNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  219. dialogNM.cancel(NOTIFICATION_ID);
  220. if (mAlwaysPulse != 1) {
  221. Settings.System.putInt(getContentResolver(),
  222. Settings.System.TRACKBALL_SCREEN_ON, 0);
  223. }
  224. }
  225. });
  226. endFlash.show();
  227. }
  228. public String knownPackage(String pkg) {
  229. if (pkg.equals("com.android.email"))
  230. return "Email";
  231. else if (pkg.equals("com.android.mms"))
  232. return "Messaging";
  233. else if (pkg.equals("com.google.android.apps.googlevoice"))
  234. return "Google Voice";
  235. else if (pkg.equals("com.google.android.gm"))
  236. return "Gmail";
  237. else if (pkg.equals("com.google.android.gsf"))
  238. return "GTalk";
  239. else if (pkg.equals("com.twitter.android"))
  240. return "Twitter";
  241. else if (pkg.equals("jp.r246.twicca"))
  242. return "Twicca";
  243. else if (pkg.equals("com.android.phone"))
  244. return "Missed Call"; // Say Missed Call instead of "Dialer" as
  245. // people think its missing.
  246. return null;
  247. }
  248. public String getPackageName(PackageInfo p) {
  249. String knownPackage = knownPackage(p.packageName);
  250. return knownPackage == null ?
  251. p.applicationInfo.loadLabel(getPackageManager()).toString() : knownPackage;
  252. }
  253. public List<PackageInfo> getPackageList() {
  254. PackageManager packageManager = getPackageManager();
  255. List<PackageInfo> packs = packageManager.getInstalledPackages(0);
  256. List<PackageInfo> list = new ArrayList<PackageInfo>();
  257. for (PackageInfo p : packs) {
  258. try {
  259. Context appContext = createPackageContext(p.packageName, 0);
  260. boolean exists = (new File(appContext.getFilesDir(), "trackball_lights")).exists();
  261. if (exists || (knownPackage(p.packageName) != null)) {
  262. list.add(p);
  263. }
  264. } catch (Exception e) {
  265. Log.d("GetPackageList", e.toString());
  266. }
  267. }
  268. return list;
  269. }
  270. private List<String> getCategoryList() {
  271. String mBaseString = Settings.System.getString(getContentResolver(),
  272. Settings.System.NOTIFICATION_PACKAGE_COLORS);
  273. String[] mBaseArray = getArray(mBaseString);
  274. String[] catList = new String[30];
  275. int x = 1;
  276. catList[0] = CAT_PRIMARY;
  277. for (int i = 0; i < mBaseArray.length; i++, x++) {
  278. String[] temp = getPackageAndColorAndBlink(mBaseArray[i]);
  279. if (temp == null) {
  280. continue;
  281. }
  282. if (isNull(temp[3])) {
  283. continue;
  284. }
  285. catList[x] = temp[3];
  286. }
  287. return (uniqueArray(catList));
  288. }
  289. private void manageCatList(String value, boolean add) {
  290. List<String> newList = new ArrayList<String>();
  291. String[] tempList = mCatListString.split("\\|");
  292. for(int i = 0; i < tempList.length; i++) {
  293. newList.add(tempList[i]);
  294. }
  295. if (!add) {
  296. int indexRemove = newList.indexOf(value);
  297. newList.remove(indexRemove);
  298. } else {
  299. newList.add(value);
  300. }
  301. String newCatList = new String();
  302. for (String name : newList) {
  303. if (isNull(name))
  304. continue;
  305. int index = newList.indexOf(name);
  306. if(index == (newList.size() - 1)) {
  307. newCatList = newCatList + name;
  308. } else {
  309. newCatList = newCatList + name + "|";
  310. }
  311. }
  312. Editor mEdit = mPrefs.edit();
  313. mEdit.putString(CAT_KEY, newCatList);
  314. mEdit.commit();
  315. }
  316. private PreferenceScreen createPreferenceScreen() {
  317. // The root of our system
  318. PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
  319. /* Advanced */
  320. PreferenceScreen advancedScreen = getPreferenceManager().createPreferenceScreen(this);
  321. advancedScreen.setKey(ADVANCED_SCREEN);
  322. advancedScreen.setTitle(R.string.trackball_advanced_title);
  323. root.addPreference(advancedScreen);
  324. /* Manage Categories */
  325. PreferenceScreen catScreen = getPreferenceManager().createPreferenceScreen(this);
  326. catScreen.setKey(CATEGORY_SCREEN);
  327. catScreen.setTitle(R.string.trackball_category_screen);
  328. advancedScreen.addPreference(catScreen);
  329. Preference addCat = new Preference(this);
  330. addCat.setKey(ADD_CATEGORY);
  331. addCat.setSummary(R.string.trackball_category_add_summary);
  332. addCat.setTitle(R.string.trackball_category_add_title);
  333. catScreen.addPreference(addCat);
  334. String[] mRemoveList = getArray(mCatListString);
  335. ListPreference removeCatList = new ListPreference(this);
  336. removeCatList.setKey(REMOVE_CATEGORY);
  337. removeCatList.setTitle(R.string.trackball_category_remove_title);
  338. removeCatList.setSummary(R.string.trackball_category_remove_summary);
  339. removeCatList.setDialogTitle(R.string.trackball_category_list_summary);
  340. removeCatList.setEntries(mRemoveList);
  341. removeCatList.setEntryValues(mRemoveList);
  342. removeCatList.setOnPreferenceChangeListener(this);
  343. catScreen.addPreference(removeCatList);
  344. CheckBoxPreference alwaysPulse = new CheckBoxPreference(this);
  345. alwaysPulse.setKey(ALWAYS_PULSE);
  346. alwaysPulse.setSummary(R.string.pref_trackball_screen_summary);
  347. alwaysPulse.setTitle(R.string.pref_trackball_screen_title);
  348. advancedScreen.addPreference(alwaysPulse);
  349. // Advanced options only relevant to RGB lights
  350. if (!getResources().getBoolean(R.bool.has_dual_notification_led)) {
  351. CheckBoxPreference blendPulse = new CheckBoxPreference(this);
  352. blendPulse.setKey(BLEND_COLORS);
  353. blendPulse.setSummary(R.string.pref_trackball_blend_summary);
  354. blendPulse.setTitle(R.string.pref_trackball_blend_title);
  355. blendPulse.setEnabled(Settings.System.getInt(getContentResolver(), Settings.System.TRACKBALL_NOTIFICATION_SUCCESSION, 0) == 1 ? false : true);
  356. advancedScreen.addPreference(blendPulse);
  357. if (SHOLES_DEVICE) {
  358. blendPulse.setEnabled(false);
  359. blendPulse.setChecked(false);
  360. Settings.System.putInt(getContentResolver(), Settings.System.TRACKBALL_NOTIFICATION_BLEND_COLOR, 0);
  361. }
  362. CheckBoxPreference successionPulse = new CheckBoxPreference(this);
  363. successionPulse.setKey(PULSE_SUCCESSION);
  364. successionPulse.setSummary(R.string.pref_trackball_sucess_summary);
  365. successionPulse.setTitle(R.string.pref_trackball_sucess_title);
  366. successionPulse.setEnabled(Settings.System.getInt(getContentResolver(), Settings.System.TRACKBALL_NOTIFICATION_BLEND_COLOR, 0) == 1 ? false : true);
  367. advancedScreen.addPreference(successionPulse);
  368. CheckBoxPreference randomPulse = new CheckBoxPreference(this);
  369. randomPulse.setKey(PULSE_RANDOM);
  370. randomPulse.setSummary(R.string.pref_trackball_random_summary);
  371. randomPulse.setTitle(R.string.pref_trackball_random_title);
  372. randomPulse.setEnabled(Settings.System.getInt(getContentResolver(), Settings.System.TRACKBALL_NOTIFICATION_BLEND_COLOR, 0) == 1? false : true);
  373. advancedScreen.addPreference(randomPulse);
  374. CheckBoxPreference orderPulse = new CheckBoxPreference(this);
  375. orderPulse.setKey(PULSE_IN_ORDER);
  376. orderPulse.setSummary(R.string.pref_trackball_order_summary);
  377. orderPulse.setTitle(R.string.pref_trackball_order_title);
  378. orderPulse.setEnabled(Settings.System.getInt(getContentResolver(), Settings.System.TRACKBALL_NOTIFICATION_BLEND_COLOR, 0) == 1 ? false : true);
  379. advancedScreen.addPreference(orderPulse);
  380. }
  381. Preference resetColors = new Preference(this);
  382. resetColors.setKey(RESET_NOTIFS);
  383. resetColors.setSummary(R.string.pref_trackball_reset_summary);
  384. resetColors.setTitle(R.string.pref_trackball_reset_title);
  385. advancedScreen.addPreference(resetColors);
  386. // Add each application
  387. PreferenceCategory cat = new PreferenceCategory(this);
  388. cat.setTitle(R.string.group_applications);
  389. root.addPreference(cat);
  390. Map<String, PackageInfo> sortedPackages = new TreeMap<String, PackageInfo>();
  391. for (PackageInfo pkgInfo : getPackageList()) {
  392. sortedPackages.put(getPackageName(pkgInfo), pkgInfo);
  393. }
  394. for (String catList : getCategoryList()) {
  395. if (isNull(catList)) {
  396. continue;
  397. }
  398. PreferenceScreen catName = getPreferenceManager().createPreferenceScreen(this);
  399. catName.setKey(catList + "_screen");
  400. catName.setTitle(catList);
  401. cat.addPreference(catName);
  402. for (Map.Entry<String, PackageInfo> pkgEntry : sortedPackages.entrySet()) {
  403. String pkg = pkgEntry.getValue().packageName;
  404. if (isNull(pkg))
  405. continue;
  406. String[] packageValues = findPackage(pkg);
  407. if (packageValues == null || packageValues[3] == null) {
  408. if (!catList.matches(CAT_PRIMARY))
  409. continue;
  410. } else {
  411. if (!catList.matches(packageValues[3]))
  412. continue;
  413. }
  414. String shortPackageName = pkgEntry.getKey();
  415. PreferenceScreen appName = getPreferenceManager().createPreferenceScreen(this);
  416. appName.setKey(pkg + "_screen");
  417. appName.setTitle(shortPackageName);
  418. catName.addPreference(appName);
  419. String[] mList = getArray(mCatListString);
  420. ListPreference categoryList = new ListPreference(this);
  421. categoryList.setKey(pkg + "_category");
  422. categoryList.setTitle(R.string.trackball_category_list_title);
  423. categoryList.setSummary(R.string.trackball_category_list_summary);
  424. categoryList.setDialogTitle(R.string.trackball_category_list_summary);
  425. categoryList.setEntries(mList);
  426. categoryList.setEntryValues(mList);
  427. categoryList.setOnPreferenceChangeListener(this);
  428. appName.addPreference(categoryList);
  429. ListPreference colorList = new ListPreference(this);
  430. colorList.setKey(pkg + "_color");
  431. colorList.setTitle(R.string.color_trackball_flash_title);
  432. colorList.setSummary(R.string.color_trackball_flash_summary);
  433. colorList.setDialogTitle(R.string.dialog_color_trackball);
  434. if (getResources().getBoolean(R.bool.has_dual_notification_led)) {
  435. colorList.setEntries(R.array.entries_dual_led_colors);
  436. colorList.setEntryValues(R.array.values_dual_led_colors);
  437. } else {
  438. colorList.setEntries(R.array.entries_trackball_colors);
  439. colorList.setEntryValues(R.array.pref_trackball_colors_values);
  440. }
  441. colorList.setOnPreferenceChangeListener(this);
  442. appName.addPreference(colorList);
  443. if (!getResources().getBoolean(R.bool.has_dual_notification_led)) {
  444. ListPreference blinkList = new ListPreference(this);
  445. blinkList.setKey(pkg + "_blink");
  446. blinkList.setTitle(R.string.color_trackball_blink_title);
  447. blinkList.setSummary(R.string.color_trackball_blink_summary);
  448. blinkList.setDialogTitle(R.string.dialog_blink_trackball);
  449. blinkList.setEntries(R.array.pref_trackball_blink_rate_entries);
  450. blinkList.setEntryValues(R.array.pref_trackball_blink_rate_values);
  451. blinkList.setOnPreferenceChangeListener(this);
  452. appName.addPreference(blinkList);
  453. Preference customColor = new Preference(this);
  454. customColor.setKey(pkg + "_custom");
  455. customColor.setSummary(R.string.color_trackball_custom_summary);
  456. customColor.setTitle(R.string.color_trackball_custom_title);
  457. if (packageValues != null) {
  458. // Check if the color is none, if it is disable custom.
  459. customColor.setEnabled(!packageValues[1].equals("none"));
  460. }
  461. appName.addPreference(customColor);
  462. }
  463. Preference testColor = new Preference(this);
  464. testColor.setKey(pkg + "_test");
  465. testColor.setSummary(R.string.color_trackball_test_summary);
  466. testColor.setTitle(R.string.color_trackball_test_title);
  467. if (packageValues != null) {
  468. // Check if the color is none, if it isdisable Test.
  469. testColor.setEnabled(!packageValues[1].equals("none"));
  470. }
  471. appName.addPreference(testColor);
  472. Preference notice = new Preference(this);
  473. notice.setKey("NULL");
  474. notice.setTitle(R.string.trackball_color_notice_title);
  475. notice.setSummary(R.string.trackball_color_notice_summary);
  476. appName.addPreference(notice);
  477. }
  478. }
  479. return root;
  480. }
  481. final Runnable mFinishLoading = new Runnable() {
  482. public void run() {
  483. pbarDialog.dismiss();
  484. }
  485. };
  486. public void loadPrefs() {
  487. pbarDialog = ProgressDialog.show(this, getString(R.string.dialog_trackball_loading), getString(R.string.dialog_trackball_packagelist), true, false);
  488. mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
  489. mCatListString = mPrefs.getString(CAT_KEY, CAT_PRIMARY + "|");
  490. Thread t = new Thread() {
  491. public void run() {
  492. setPreferenceScreen(createPreferenceScreen());
  493. mHandler.post(mFinishLoading);
  494. }
  495. };
  496. t.start();
  497. }
  498. @Override
  499. public void onCreate(Bundle savedInstanceState) {
  500. super.onCreate(savedInstanceState);
  501. setTitle(R.string.trackball_notifications_title);
  502. loadPrefs();
  503. }
  504. public boolean onPreferenceChange(Preference preference, Object objValue) {
  505. String value = objValue.toString();
  506. String key = preference.getKey().toString();
  507. String pkg = key.substring(0, key.lastIndexOf("_"));
  508. if (key.endsWith("_blink")) {
  509. updatePackage(pkg, "", value, "0");
  510. } else if (key.endsWith("_color")) {
  511. updatePackage(pkg, value, "0", "0");
  512. PreferenceScreen prefSet = getPreferenceScreen();
  513. globalCustom = prefSet.findPreference(pkg + "_custom");
  514. if (globalCustom != null) {
  515. globalCustom.setEnabled(!value.matches("none"));
  516. }
  517. globalTest = prefSet.findPreference(pkg + "_test");
  518. globalTest.setEnabled(!value.matches("none"));
  519. } else if (key.equals(REMOVE_CATEGORY)) {
  520. if(value.equals(CAT_PRIMARY)) {
  521. Toast.makeText(this, R.string.trackball_remove_default_toast, Toast.LENGTH_LONG).show();
  522. return false;
  523. }
  524. manageCatList(value, false);
  525. loadPrefs();
  526. PreferenceScreen prefSet = getPreferenceScreen();
  527. ListPreference removeList = (ListPreference)prefSet.findPreference(REMOVE_CATEGORY);
  528. removeList.setEntries(getArray(mCatListString));
  529. removeList.setEntryValues(getArray(mCatListString));
  530. } else if (key.endsWith("_category")) {
  531. updatePackage(pkg, "", "0", value);
  532. loadPrefs();
  533. }
  534. return true;
  535. }
  536. public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
  537. final boolean value;
  538. AlertDialog alertDialog;
  539. if (preference.getKey().toString().equals(RESET_NOTIFS)) {
  540. Settings.System.putString(getContentResolver(), Settings.System.NOTIFICATION_PACKAGE_COLORS, "");
  541. Editor mEdit = mPrefs.edit();
  542. mEdit.putString(CAT_KEY, CAT_PRIMARY + "|");
  543. mEdit.commit();
  544. Toast.makeText(this, R.string.trackball_reset_all, Toast.LENGTH_LONG).show();
  545. } else if (preference.getKey().toString().equals(ADD_CATEGORY)) {
  546. alertDialog = new AlertDialog.Builder(this).create();
  547. LayoutInflater factory = LayoutInflater.from(this);
  548. final View textEntryView = factory.inflate(R.layout.add_cat, null);
  549. alertDialog.setTitle(R.string.trackball_category_add_title);
  550. alertDialog.setView(textEntryView);
  551. alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(android.R.string.ok), new DialogInterface.OnClickListener() {
  552. public void onClick(DialogInterface dialog, int which) {
  553. //updateCatList(value.toString(), false);
  554. EditText textBox = (EditText) textEntryView.findViewById(R.id.cat_text);
  555. manageCatList(textBox.getText().toString(), true);
  556. loadPrefs();
  557. PreferenceScreen prefSet = getPreferenceScreen();
  558. ListPreference removeList = (ListPreference)prefSet.findPreference(REMOVE_CATEGORY);
  559. removeList.setEntries(getArray(mCatListString));
  560. removeList.setEntryValues(getArray(mCatListString));
  561. return;
  562. }
  563. });
  564. alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(android.R.string.cancel), new DialogInterface.OnClickListener() {
  565. public void onClick(DialogInterface dialog, int which) {
  566. return;
  567. }
  568. });
  569. alertDialog.show();
  570. } else if (preference.getKey().toString().equals(ALWAYS_PULSE)) {
  571. CheckBoxPreference keyPref = (CheckBoxPreference) preference;
  572. value = keyPref.isChecked();
  573. Settings.System.putInt(getContentResolver(), Settings.System.TRACKBALL_SCREEN_ON,
  574. value ? 1 : 0);
  575. } else if (preference.getKey().toString().equals(PULSE_SUCCESSION)) {
  576. final CheckBoxPreference keyPref = (CheckBoxPreference) preference;
  577. value = keyPref.isChecked();
  578. if (!value) {
  579. blendToggle(true);
  580. } else {
  581. blendToggle(false);
  582. }
  583. if (value == false) {
  584. Settings.System.putInt(getContentResolver(),
  585. Settings.System.TRACKBALL_NOTIFICATION_SUCCESSION, 0);
  586. return true;
  587. }
  588. alertDialog = new AlertDialog.Builder(this).create();
  589. alertDialog.setTitle(R.string.notification_battery_warning_title);
  590. alertDialog.setMessage(getResources().getString(R.string.notification_battery_warning));
  591. alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(android.R.string.ok), new DialogInterface.OnClickListener() {
  592. public void onClick(DialogInterface dialog, int which) {
  593. Settings.System.putInt(getContentResolver(),
  594. Settings.System.TRACKBALL_NOTIFICATION_SUCCESSION, value ? 1 : 0);
  595. return;
  596. }
  597. });
  598. alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(android.R.string.cancel), new DialogInterface.OnClickListener() {
  599. public void onClick(DialogInterface dialog, int which) {
  600. Settings.System.putInt(getContentResolver(),
  601. Settings.System.TRACKBALL_NOTIFICATION_SUCCESSION, value ? 1 : 0);
  602. keyPref.setChecked(false);
  603. return;
  604. }
  605. });
  606. alertDialog.show();
  607. } else if (preference.getKey().toString().equals(PULSE_RANDOM)) {
  608. final CheckBoxPreference keyPref = (CheckBoxPreference) preference;
  609. value = keyPref.isChecked();
  610. if (!value) {
  611. blendToggle(true);
  612. } else {
  613. blendToggle(false);
  614. }
  615. if (value == false) {
  616. Settings.System.putInt(getContentResolver(),
  617. Settings.System.TRACKBALL_NOTIFICATION_RANDOM, 0);
  618. return true;
  619. }
  620. alertDialog = new AlertDialog.Builder(this).create();
  621. alertDialog.setTitle(R.string.notification_battery_warning_title);
  622. alertDialog.setMessage(getResources().getString(R.string.notification_battery_warning));
  623. alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(android.R.string.ok), new DialogInterface.OnClickListener() {
  624. public void onClick(DialogInterface dialog, int which) {
  625. Settings.System.putInt(getContentResolver(),
  626. Settings.System.TRACKBALL_NOTIFICATION_RANDOM, value ? 1 : 0);
  627. return;
  628. }
  629. });
  630. alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(android.R.string.cancel), new DialogInterface.OnClickListener() {
  631. public void onClick(DialogInterface dialog, int which) {
  632. Settings.System.putInt(getContentResolver(),
  633. Settings.System.TRACKBALL_NOTIFICATION_RANDOM, 0);
  634. keyPref.setChecked(false);
  635. return;
  636. }
  637. });
  638. alertDialog.show();
  639. } else if (preference.getKey().toString().equals(PULSE_IN_ORDER)) {
  640. final CheckBoxPreference keyPref = (CheckBoxPreference) preference;
  641. value = keyPref.isChecked();
  642. if (!value) {
  643. blendToggle(true);
  644. } else {
  645. blendToggle(false);
  646. }
  647. if (value == false) {
  648. Settings.System.putInt(getContentResolver(),
  649. Settings.System.TRACKBALL_NOTIFICATION_PULSE_ORDER, 0);
  650. return true;
  651. }
  652. alertDialog = new AlertDialog.Builder(this).create();
  653. alertDialog.setTitle(R.string.notification_battery_warning_title);
  654. alertDialog.setMessage(getResources().getString(R.string.notification_battery_warning));
  655. alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, getString(android.R.string.ok), new DialogInterface.OnClickListener() {
  656. public void onClick(DialogInterface dialog, int which) {
  657. Settings.System.putInt(getContentResolver(),
  658. Settings.System.TRACKBALL_NOTIFICATION_PULSE_ORDER, value ? 1 : 0);
  659. return;
  660. }
  661. });
  662. alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getString(android.R.string.cancel), new DialogInterface.OnClickListener() {
  663. public void onClick(DialogInterface dialog, int which) {
  664. Settings.System.putInt(getContentResolver(),
  665. Settings.System.TRACKBALL_NOTIFICATION_PULSE_ORDER, 0);
  666. keyPref.setChecked(false);
  667. return;
  668. }
  669. });
  670. alertDialog.show();
  671. } else if (preference.getKey().toString().equals(BLEND_COLORS)) {
  672. final CheckBoxPreference keyPref = (CheckBoxPreference) preference;
  673. value = keyPref.isChecked();
  674. Settings.System.putInt(getContentResolver(), Settings.System.TRACKBALL_NOTIFICATION_BLEND_COLOR, value ? 1 : 0);
  675. if (!value) {
  676. PreferenceScreen prefSet = getPreferenceScreen();
  677. CheckBoxPreference disablePref = (CheckBoxPreference)prefSet.findPreference(PULSE_SUCCESSION);
  678. disablePref.setEnabled(true);
  679. disablePref = (CheckBoxPreference)prefSet.findPreference(PULSE_RANDOM);
  680. disablePref.setEnabled(true);
  681. disablePref = (CheckBoxPreference)prefSet.findPreference(PULSE_IN_ORDER);
  682. disablePref.setEnabled(true);
  683. } else {
  684. PreferenceScreen prefSet = getPreferenceScreen();
  685. CheckBoxPreference disablePref = (CheckBoxPreference)prefSet.findPreference(PULSE_SUCCESSION);
  686. disablePref.setEnabled(false);
  687. disablePref = (CheckBoxPreference)prefSet.findPreference(PULSE_RANDOM);
  688. disablePref.setEnabled(false);
  689. disablePref = (CheckBoxPreference)prefSet.findPreference(PULSE_IN_ORDER);
  690. disablePref.setEnabled(false);
  691. }
  692. } else if (preference.getKey().toString().endsWith("_custom")) {
  693. String pkg = preference.getKey().toString().substring(0, preference.getKey().toString().lastIndexOf("_"));
  694. mGlobalPackage = pkg;
  695. ColorPickerDialog cp = new ColorPickerDialog(this,
  696. mPackageColorListener,
  697. readPackageColor());
  698. cp.show();
  699. } else if (preference.getKey().toString().endsWith("_test")) {
  700. String pkg = preference.getKey().toString()
  701. .substring(0, preference.getKey().toString().lastIndexOf("_"));
  702. testPackage(pkg);
  703. }
  704. return false;
  705. }
  706. private int readPackageColor() {
  707. String[] mPackage = findPackage(mGlobalPackage);
  708. if (mPackage == null) {
  709. return -16777216;
  710. }
  711. if (mPackage[1].equals("random")) {
  712. return -16777216;
  713. } else {
  714. try {
  715. return Color.parseColor(mPackage[1]);
  716. } catch (IllegalArgumentException e) {
  717. return -16777216;
  718. }
  719. }
  720. }
  721. public void pulseLight(int color) {
  722. mGlobalPulse = Settings.System.getInt(getContentResolver(),
  723. Settings.System.TRACKBALL_SCREEN_ON, 0);
  724. mGlobalSuccession = Settings.System.getInt(getContentResolver(),
  725. Settings.System.TRACKBALL_NOTIFICATION_SUCCESSION, 0);
  726. mGlobalBlend = Settings.System.getInt(getContentResolver(),
  727. Settings.System.TRACKBALL_NOTIFICATION_BLEND_COLOR, 0);
  728. Notification notification = new Notification();
  729. notification.flags |= Notification.FLAG_SHOW_LIGHTS;
  730. notification.ledARGB = color;
  731. notification.ledOnMS = 500;
  732. notification.ledOffMS = 0;
  733. final NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
  734. if (mGlobalPulse != 1) {
  735. Settings.System.putInt(getContentResolver(), Settings.System.TRACKBALL_SCREEN_ON, 1);
  736. }
  737. if (mGlobalSuccession != 1) {
  738. Settings.System.putInt(getContentResolver(),
  739. Settings.System.TRACKBALL_NOTIFICATION_SUCCESSION, 1);
  740. }
  741. if (mGlobalBlend == 1) {
  742. Settings.System.putInt(getContentResolver(),
  743. Settings.System.TRACKBALL_NOTIFICATION_BLEND_COLOR, 0);
  744. }
  745. nm.notify(NOTIFICATION_ID, notification);
  746. Thread t = new Thread() {
  747. public void run() {
  748. try {
  749. Thread.sleep(1000);
  750. } catch (InterruptedException e) {
  751. // shouldn't happen
  752. }
  753. nm.cancel(NOTIFICATION_ID);
  754. if (mGlobalPulse != 1) {
  755. Settings.System.putInt(getContentResolver(),
  756. Settings.System.TRACKBALL_SCREEN_ON, 0);
  757. }
  758. if (mGlobalSuccession != 1) {
  759. Settings.System.putInt(getContentResolver(),
  760. Settings.System.TRACKBALL_NOTIFICATION_SUCCESSION, 0);
  761. }
  762. if (mGlobalBlend == 1) {
  763. Settings.System.putInt(getContentResolver(),
  764. Settings.System.TRACKBALL_NOTIFICATION_BLEND_COLOR, 1);
  765. }
  766. }
  767. };
  768. t.start();
  769. }
  770. ColorPickerDialog.OnColorChangedListener mPackageColorListener = new ColorPickerDialog.OnColorChangedListener() {
  771. public void colorUpdate(int color) {
  772. pulseLight(color);
  773. }
  774. public void colorChanged(int color) {
  775. updatePackage(mGlobalPackage, convertToARGB(color), "0", "0");
  776. }
  777. };
  778. private String convertToARGB(int color) {
  779. String alpha = Integer.toHexString(Color.alpha(color));
  780. String red = Integer.toHexString(Color.red(color));
  781. String green = Integer.toHexString(Color.green(color));
  782. String blue = Integer.toHexString(Color.blue(color));
  783. if (alpha.length() == 1) {
  784. alpha = "0" + alpha;
  785. }
  786. if (red.length() == 1) {
  787. red = "0" + red;
  788. }
  789. if (green.length() == 1) {
  790. green = "0" + green;
  791. }
  792. if (blue.length() == 1) {
  793. blue = "0" + blue;
  794. }
  795. return "#" + alpha + red + green + blue;
  796. }
  797. private void blendToggle(boolean toggle) {
  798. if (!SHOLES_DEVICE) {
  799. CheckBoxPreference disablePref = (CheckBoxPreference) getPreferenceScreen().findPreference(BLEND_COLORS);
  800. disablePref.setEnabled(toggle);
  801. }
  802. }
  803. }