pastebin - collaborative debugging tool
phoenix.kpaste.net RSS


StayAwakeToggle.java
Posted by Phoenix on Sat 19th Oct 2013 18:58
raw | new post

  1. package com.android.systemui.quicksettings;
  2.  
  3. import android.content.ContentResolver;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.content.res.Resources;
  7. import android.net.Uri;
  8. import android.os.UserHandle;
  9. import android.provider.Settings;
  10. import android.view.LayoutInflater;
  11. import android.view.View;
  12. import android.view.View.OnClickListener;
  13. import android.view.View.OnLongClickListener;
  14.  
  15. import com.android.systemui.R;
  16. import com.android.systemui.statusbar.phone.QuickSettingsController;
  17. import com.android.systemui.statusbar.phone.QuickSettingsContainerView;
  18.  
  19. import android.content.SharedPreferences;
  20. import android.content.SharedPreferences.Editor;
  21. import android.database.ContentObserver;
  22.  
  23. public class StayAwakeTile extends QuickSettingsTile {
  24.  
  25.         private static final String KEY_USER_TIMEOUT = "user_timeout";
  26.         private static final int neverSleep = Integer.MAX_VALUE; // MAX_VALUE equates to approx 24 days
  27.     private static final int FALLBACK_SCREEN_TIMEOUT_VALUE = 30000;
  28.         private boolean enabled;
  29.     private int storedUserTimeout;
  30.         SettingsObserver mObserver = null;
  31.     //private static final int SCREEN_TIMEOUT_MAX    = Integer.Max_;
  32.  
  33.             @Override
  34.     public void init(Context c, int style) {
  35.         super.init(c, style);
  36.  
  37.         SharedPreferences shared = mContext.getSharedPreferences(KEY_USER_TIMEOUT,
  38.                 Context.MODE_PRIVATE);
  39.         storedUserTimeout = shared.getInt("timeout", FALLBACK_SCREEN_TIMEOUT_VALUE);
  40.         mObserver = new SettingsObserver(mHandler);
  41.         mObserver.observe();
  42.     }
  43.  
  44.     @Override
  45.     protected void cleanup() {
  46.         if (mObserver != null) {
  47.             mContext.getContentResolver().unregisterContentObserver(mObserver);
  48.             mObserver = null;
  49.         }
  50.         super.cleanup();
  51.     }
  52.        
  53.     public StayAwakeTile(Context context, QuickSettingsController qsc) {
  54.         super(context, qsc);
  55.  
  56.         mOnClick = new OnClickListener() {
  57.             @Override
  58.             public void onClick(View v) {
  59.                 toggleState();
  60.                 updateResources();
  61.             }
  62.         };
  63.  
  64.         mOnLongClick = new OnLongClickListener() {
  65.             @Override
  66.             public boolean onLongClick(View v) {
  67.                 Intent intent = new Intent("android.settings.DISPLAY_SETTINGS");
  68.                 startSettingsActivity(intent);
  69.                 return true;
  70.             }
  71.         };
  72.  
  73.         qsc.registerObservedContent(Settings.System.getUriFor(Settings.System.SCREEN_OFF_TIMEOUT)
  74.                 , this);
  75.     }
  76.  
  77.     @Override
  78.     public void onChangeUri(ContentResolver resolver, Uri uri) {
  79.         updateResources();
  80.     }
  81.  
  82.     @Override
  83.     void onPostCreate() {
  84.         updateTile();
  85.         super.onPostCreate();
  86.     }
  87.  
  88.     @Override
  89.     public void updateResources() {
  90.         updateTile();
  91.         super.updateResources();
  92.     }
  93.  
  94.     private synchronized void updateTile() {
  95.         int currentTimeout = Settings.System.getInt(mContext.getContentResolver(),
  96.                 Settings.System.SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE);
  97.  
  98.         if (currentTimeout == neverSleep) {
  99.             enabled = true;
  100.         } else {
  101.             enabled = false;
  102.         }
  103.         mLabel = (enabled ? R.string.quick_settings_stayawake_on
  104.                 : R.string.quick_settings_stayawake_off);
  105.         mDrawable = (enabled ? R.drawable.ic_qs_stayawake_on : R.drawable.ic_qs_stayawake_off);
  106.     }
  107.  
  108.     protected void toggleState() {
  109.         int currentTimeout =
  110.  
  111.         if (state) {
  112.             saveUserTimeout();
  113.             Settings.System.putInt(mContext.getContentResolver(),
  114.                     Settings.System.SCREEN_OFF_TIMEOUT, neverSleep);
  115.         } else {
  116.             Settings.System.putInt(mContext.getContentResolver(),
  117.                     Settings.System.SCREEN_OFF_TIMEOUT, storedUserTimeout);
  118.             saveUserTimeout(); // save here incase of manual change
  119.         }
  120.     }
  121.        
  122.     private void saveUserTimeout() {
  123.         storedUserTimeout = Settings.System.getInt(mContext.getContentResolver(),
  124.                 Settings.System.SCREEN_OFF_TIMEOUT, FALLBACK_SCREEN_TIMEOUT_VALUE);
  125.         SharedPreferences shared = mContext.getSharedPreferences(KEY_USER_TIMEOUT,
  126.                 Context.MODE_PRIVATE);
  127.         shared.edit().putInt("timeout", storedUserTimeout).commit();
  128.     }
  129.  
  130.     class SettingsObserver extends ContentObserver {
  131.         SettingsObserver(Handler handler) {
  132.             super(handler);
  133.         }
  134.  
  135.         void observe() {
  136.             ContentResolver resolver = mContext.getContentResolver();
  137.             resolver.registerContentObserver(Settings.Global
  138.                     .getUriFor(Settings.System.SCREEN_OFF_TIMEOUT), false,
  139.                     this);
  140.         }

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}




All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at