Advertisement
Guest User

Untitled

a guest
May 24th, 2015
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.16 KB | None | 0 0
  1. package com.android.settings.twisted;
  2.  
  3. import android.content.ContentResolver;
  4. import android.content.pm.PackageManager;
  5. import android.content.res.Resources;
  6. import android.database.ContentObserver;
  7. import android.os.Handler;
  8. import android.preference.Preference.OnPreferenceChangeListener;
  9. import android.preference.PreferenceCategory;
  10. import android.provider.Settings;
  11. import android.provider.Settings.SettingNotFoundException;
  12. import com.android.settings.R;
  13. import com.android.settings.SettingsPreferenceFragment;
  14. import com.android.internal.util.slim.DeviceUtils;
  15.  
  16. import android.os.Bundle;
  17. import android.app.IActivityManager;
  18. import android.app.ProgressDialog;
  19. import android.os.AsyncTask;
  20. import android.os.ServiceManager;
  21. import android.util.DisplayMetrics;
  22. import android.preference.ListPreference;
  23. import android.content.Context;
  24. import android.preference.Preference;
  25. import android.preference.Preference.OnPreferenceClickListener;
  26. import android.preference.PreferenceScreen;
  27. import android.preference.SwitchPreference;
  28. import android.os.SystemProperties;
  29. import android.util.Log;
  30. import android.os.RemoteException;
  31. import android.app.Activity;
  32. import android.app.ActivityManagerNative;
  33. import android.app.Dialog;
  34.  
  35. public class TwistedSettings extends SettingsPreferenceFragment implements
  36. Preference.OnPreferenceChangeListener {
  37.  
  38. private static final String KEY_LCD_DENSITY = "lcd_density";
  39. private ListPreference mLcdDensityPreference;
  40. private static final String TAG = "DisplaySettings";
  41. private static final String KILL_APP_LONGPRESS_BACK = "kill_app_longpress_back";
  42. private static final String KEY_STATUS_BAR_TICKER = "status_bar_ticker_enabled";
  43. private SwitchPreference mKillAppLongPressBack;
  44. private SwitchPreference mTicker;
  45.  
  46. @Override
  47. public void onCreate(Bundle savedInstanceState) {
  48. super.onCreate(savedInstanceState);
  49.  
  50. PreferenceScreen prefSet = getPreferenceScreen();
  51.  
  52. addPreferencesFromResource(R.xml.twisted_settings);
  53.  
  54. PackageManager pm = getPackageManager();
  55. Resources systemUiResources;
  56. try {
  57. systemUiResources = pm.getResourcesForApplication("com.android.systemui");
  58. } catch (Exception e) {
  59. Log.e(TAG, "can't access systemui resources",e);
  60. return;
  61. }
  62.  
  63. mTicker = (SwitchPreference) prefSet.findPreference(KEY_STATUS_BAR_TICKER);
  64. final boolean tickerEnabled = systemUiResources.getBoolean(systemUiResources.getIdentifier(
  65. "com.android.systemui:bool/enable_ticker", null, null));
  66. mTicker.setChecked(Settings.System.getInt(getContentResolver(),
  67. Settings.System.STATUS_BAR_TICKER_ENABLED, tickerEnabled ? 1 : 0) == 1);
  68. mTicker.setOnPreferenceChangeListener(this);
  69.  
  70. // kill-app long press back
  71. mKillAppLongPressBack = (SwitchPreference) findPreference(KILL_APP_LONGPRESS_BACK);
  72. mKillAppLongPressBack.setOnPreferenceChangeListener(this);
  73. int killAppLongPressBack = Settings.Secure.getInt(getContentResolver(),
  74. KILL_APP_LONGPRESS_BACK, 0);
  75. mKillAppLongPressBack.setChecked(killAppLongPressBack != 0);
  76.  
  77. // lcd densitty
  78. mLcdDensityPreference = (ListPreference) findPreference(KEY_LCD_DENSITY);
  79. int defaultDensity = DisplayMetrics.DENSITY_DEVICE;
  80. int currentDensity = DisplayMetrics.DENSITY_CURRENT;
  81. int currentIndex = -1;
  82. String[] densityEntries = new String[8];
  83. for (int idx = 0; idx < 8; ++idx) {
  84. int pct = (75 + idx*5);
  85. int val = defaultDensity * pct / 100;
  86. densityEntries[idx] = Integer.toString(val);
  87. if (pct == 100) {
  88. densityEntries[idx] += " (" + getResources().getString(R.string.lcd_density_default) + ")";
  89. }
  90. if (currentDensity == val) {
  91. currentIndex = idx;
  92. }
  93. }
  94. mLcdDensityPreference.setEntries(densityEntries);
  95. mLcdDensityPreference.setEntryValues(densityEntries);
  96. if (currentIndex != -1) {
  97. mLcdDensityPreference.setValueIndex(currentIndex);
  98. }
  99. mLcdDensityPreference.setOnPreferenceChangeListener(this);
  100. updateLcdDensityPreferenceDescription(currentDensity);
  101.  
  102. }
  103.  
  104. private void updateLcdDensityPreferenceDescription(int currentDensity) {
  105. int defaultDensity = DisplayMetrics.DENSITY_DEVICE;
  106. ListPreference preference = mLcdDensityPreference;
  107. String summary;
  108. if (currentDensity < 10 || currentDensity >= 1000) {
  109. // Unsupported value
  110. summary = getResources().getString(R.string.lcd_density_unsupported);
  111. }
  112. else {
  113. summary = String.format(getResources().getString(R.string.lcd_density_summary),
  114. currentDensity);
  115. if (currentDensity == defaultDensity) {
  116. summary += " (" + getResources().getString(R.string.lcd_density_default) + ")";
  117. }
  118. }
  119. preference.setSummary(summary);
  120. }
  121.  
  122. public void writeLcdDensityPreference(final Context context, int value) {
  123. try {
  124. SystemProperties.set("persist.sys.lcd_density", Integer.toString(value));
  125. }
  126. catch (Exception e) {
  127. Log.e(TAG, "Unable to save LCD density");
  128. return;
  129. }
  130. final IActivityManager am = ActivityManagerNative.asInterface(ServiceManager.checkService("activity"));
  131. if (am != null) {
  132. AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
  133. @Override
  134. protected void onPreExecute() {
  135. ProgressDialog dialog = new ProgressDialog(context);
  136. dialog.setMessage(getResources().getString(R.string.restarting_ui));
  137. dialog.setCancelable(false);
  138. dialog.setIndeterminate(true);
  139. dialog.show();
  140. }
  141. @Override
  142. protected Void doInBackground(Void... arg0) {
  143. // Give the user a second to see the dialog
  144. try {
  145. Thread.sleep(1000);
  146. }
  147. catch (InterruptedException e) {
  148. // Ignore
  149. }
  150. // Restart the UI
  151. try {
  152. am.restart();
  153. }
  154. catch (RemoteException e) {
  155. Log.e(TAG, "Failed to restart");
  156. }
  157. return null;
  158. }
  159. };
  160. task.execute((Void[])null);
  161. }
  162. }
  163.  
  164. @Override
  165. public boolean onPreferenceChange(Preference preference, Object objValue) {
  166. final String key = preference.getKey();
  167.  
  168. if (KEY_LCD_DENSITY.equals(key)) {
  169. try {
  170. // The value must begin with a decimal number. It may
  171. // optionally be follewed by a space and arbitrary text.
  172. String strValue = (String) objValue;
  173. int idx = strValue.indexOf(' ');
  174. if (idx > 0) {
  175. strValue = strValue.substring(0, idx);
  176. }
  177. int value = Integer.parseInt(strValue);
  178. writeLcdDensityPreference(preference.getContext(), value);
  179. updateLcdDensityPreferenceDescription(value);
  180. }
  181. catch (NumberFormatException e) {
  182. Log.e(TAG, "could not persist display density setting", e);
  183. }
  184. }
  185.  
  186. if (preference == mKillAppLongPressBack) {
  187. boolean value = (Boolean) objValue;
  188. Settings.Secure.putInt(getContentResolver(), KILL_APP_LONGPRESS_BACK,
  189. value ? 1 : 0);
  190. return true;
  191. }else if (preference == mTicker) {
  192. Settings.System.putInt(getContentResolver(),
  193. Settings.System.STATUS_BAR_TICKER_ENABLED,
  194. (Boolean) objValue ? 1 : 0);
  195. return true;
  196. }
  197. return false;
  198. }
  199. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement