1b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos/* 2b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * Copyright (C) 2016 The Android Open Source Project 3b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * 4b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * Licensed under the Apache License, Version 2.0 (the "License"); 5b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * you may not use this file except in compliance with the License. 6b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * You may obtain a copy of the License at 7b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * 8b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * http://www.apache.org/licenses/LICENSE-2.0 9b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * 10b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * Unless required by applicable law or agreed to in writing, software 11b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * distributed under the License is distributed on an "AS IS" BASIS, 12b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * See the License for the specific language governing permissions and 14b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos * limitations under the License 15b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos */ 16b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 17b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roospackage com.android.internal.hardware; 18b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 19b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roosimport com.android.internal.R; 20b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 21b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roosimport android.content.Context; 22b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roosimport android.provider.Settings; 23b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roosimport android.text.TextUtils; 24b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 25b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roospublic class AmbientDisplayConfiguration { 26b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 27b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos private final Context mContext; 28b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 29b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public AmbientDisplayConfiguration(Context context) { 30b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos mContext = context; 31b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 32b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 33b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public boolean enabled(int user) { 34b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return pulseOnNotificationEnabled(user) 35b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos || pulseOnPickupEnabled(user) 36b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos || pulseOnDoubleTapEnabled(user); 37b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 38b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 39b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public boolean available() { 40b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return pulseOnNotificationAvailable() || pulseOnPickupAvailable() 41b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos || pulseOnDoubleTapAvailable(); 42b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 43b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 44b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public boolean pulseOnNotificationEnabled(int user) { 45b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return boolSetting(Settings.Secure.DOZE_ENABLED, user) && pulseOnNotificationAvailable(); 46b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 47b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 48b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public boolean pulseOnNotificationAvailable() { 49b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return ambientDisplayAvailable(); 50b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 51b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 52b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public boolean pulseOnPickupEnabled(int user) { 53b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return boolSetting(Settings.Secure.DOZE_PULSE_ON_PICK_UP, user) 54b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos && pulseOnPickupAvailable(); 55b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 56b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 57b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public boolean pulseOnPickupAvailable() { 58b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return mContext.getResources().getBoolean(R.bool.config_dozePulsePickup) 59b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos && ambientDisplayAvailable(); 60b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 61b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 62b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public boolean pulseOnDoubleTapEnabled(int user) { 63b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return boolSetting(Settings.Secure.DOZE_PULSE_ON_DOUBLE_TAP, user) 64b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos && pulseOnDoubleTapAvailable(); 65b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 66b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 67b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public boolean pulseOnDoubleTapAvailable() { 68b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return !TextUtils.isEmpty(doubleTapSensorType()) && ambientDisplayAvailable(); 69b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 70b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 71b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public String doubleTapSensorType() { 72b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return mContext.getResources().getString(R.string.config_dozeDoubleTapSensorType); 73b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 74b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 75b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos public String ambientDisplayComponent() { 76b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return mContext.getResources().getString(R.string.config_dozeComponent); 77b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 78b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 79b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos private boolean ambientDisplayAvailable() { 80b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return !TextUtils.isEmpty(ambientDisplayComponent()); 81b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 82b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 83b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos private boolean boolSetting(String name, int user) { 84b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos return Settings.Secure.getIntForUser(mContext.getContentResolver(), name, 1, user) != 0; 85b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos } 86b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos 87b7e4e10618614aa8af5dec078a9784e50f9c9917Adrian Roos} 88