package net.everythingandroid.smspopup.util; import net.everythingandroid.smspopup.BuildConfig; import net.everythingandroid.smspopup.R; import net.everythingandroid.smspopup.receiver.ClearAllReceiver; import android.content.Context; import android.content.SharedPreferences; import android.os.PowerManager; import android.preference.PreferenceManager; public class ManageWakeLock { private static volatile PowerManager.WakeLock mWakeLock = null; private static volatile PowerManager.WakeLock mPartialWakeLock = null; private static final boolean PREFS_SCREENON_DEFAULT = true; private static final boolean PREFS_DIMSCREEN_DEFAULT = false; private static final String PREFS_TIMEOUT_DEFAULT = "30"; public static synchronized void acquireFull(Context mContext) { if (mWakeLock != null) { if (BuildConfig.DEBUG) Log.v("**Wakelock already held"); return; } PowerManager mPm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); SharedPreferences mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext); int flags; // Check dim screen preference if (mPrefs.getBoolean( mContext.getString(R.string.pref_dimscreen_key), PREFS_DIMSCREEN_DEFAULT)) { flags = PowerManager.SCREEN_DIM_WAKE_LOCK; } else { flags = PowerManager.SCREEN_BRIGHT_WAKE_LOCK; } // Check if screen should turn on, if so, set flags and unlock keyguard if (mPrefs.getBoolean(mContext.getString(R.string.pref_screen_on_key), PREFS_SCREENON_DEFAULT)) { flags |= PowerManager.ACQUIRE_CAUSES_WAKEUP; ManageKeyguard.disableKeyguard(mContext); } mWakeLock = mPm.newWakeLock(flags, Log.LOGTAG + ".full"); mWakeLock.setReferenceCounted(false); mWakeLock.acquire(); if (BuildConfig.DEBUG) Log.v("**Wakelock acquired"); // Fetch wakelock/screen timeout from preferences int timeout = Integer.valueOf(mPrefs.getString( mContext.getString(R.string.pref_timeout_key), PREFS_TIMEOUT_DEFAULT)); // Set a receiver to remove all locks in "timeout" seconds ClearAllReceiver.setCancel(mContext, timeout); } public static synchronized void acquirePartial(Context mContext) { // Check if partial lock already exists if (mPartialWakeLock != null) return; PowerManager mPm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mPartialWakeLock = mPm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Log.LOGTAG + ".partial"); if (BuildConfig.DEBUG) Log.v("**Wakelock (partial) acquired"); mPartialWakeLock.setReferenceCounted(false); mPartialWakeLock.acquire(); } public static synchronized void releaseFull() { if (mWakeLock != null) { if (BuildConfig.DEBUG) Log.v("**Wakelock released"); mWakeLock.release(); mWakeLock = null; } } public static synchronized void releasePartial() { if (mPartialWakeLock != null) { if (BuildConfig.DEBUG) Log.v("**Wakelock (partial) released"); mPartialWakeLock.release(); mPartialWakeLock = null; } } public static synchronized void releaseAll() { releaseFull(); releasePartial(); } }