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