1c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos/* 2c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * Copyright (C) 2017 The Android Open Source Project 3c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * 4c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * Licensed under the Apache License, Version 2.0 (the "License"); 5c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * you may not use this file except in compliance with the License. 6c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * You may obtain a copy of the License at 7c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * 8c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * http://www.apache.org/licenses/LICENSE-2.0 9c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * 10c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * Unless required by applicable law or agreed to in writing, software 11c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * distributed under the License is distributed on an "AS IS" BASIS, 12c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * See the License for the specific language governing permissions and 14c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos * limitations under the License 15c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos */ 16c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos 17c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roospackage com.android.systemui.util.wakelock; 18c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos 19c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roosimport android.content.Context; 20c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roosimport android.os.PowerManager; 21c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roosimport android.support.annotation.VisibleForTesting; 22c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos 23c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos/** WakeLock wrapper for testability */ 24664c9d7d161cd49ec9b71fee6aa29ca5175c2890Adrian Roospublic interface WakeLock { 25664c9d7d161cd49ec9b71fee6aa29ca5175c2890Adrian Roos 26664c9d7d161cd49ec9b71fee6aa29ca5175c2890Adrian Roos /** @see android.os.PowerManager.WakeLock#acquire() */ 27664c9d7d161cd49ec9b71fee6aa29ca5175c2890Adrian Roos void acquire(); 28664c9d7d161cd49ec9b71fee6aa29ca5175c2890Adrian Roos 29664c9d7d161cd49ec9b71fee6aa29ca5175c2890Adrian Roos /** @see android.os.PowerManager.WakeLock#release() */ 30664c9d7d161cd49ec9b71fee6aa29ca5175c2890Adrian Roos void release(); 31664c9d7d161cd49ec9b71fee6aa29ca5175c2890Adrian Roos 32664c9d7d161cd49ec9b71fee6aa29ca5175c2890Adrian Roos /** @see android.os.PowerManager.WakeLock#wrap(Runnable) */ 33664c9d7d161cd49ec9b71fee6aa29ca5175c2890Adrian Roos Runnable wrap(Runnable r); 34c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos 35c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos static WakeLock createPartial(Context context, String tag) { 36c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos return wrap(createPartialInner(context, tag)); 37c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos } 38c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos 39c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos @VisibleForTesting 40c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos static PowerManager.WakeLock createPartialInner(Context context, String tag) { 41c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos return context.getSystemService(PowerManager.class) 42c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos .newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, tag); 43c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos } 44c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos 45c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos static WakeLock wrap(final PowerManager.WakeLock inner) { 46c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos return new WakeLock() { 47c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos /** @see PowerManager.WakeLock#acquire() */ 48c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos public void acquire() { 49c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos inner.acquire(); 50c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos } 51c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos 52c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos /** @see PowerManager.WakeLock#release() */ 53c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos public void release() { 54c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos inner.release(); 55c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos } 56c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos 57c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos /** @see PowerManager.WakeLock#wrap(Runnable) */ 58c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos public Runnable wrap(Runnable runnable) { 59c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos return inner.wrap(runnable); 60c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos } 61c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos }; 62c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos } 63c1b50324a2286b24b691b8a7190743cbc341727eAdrian Roos}