1b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang/*
2b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang * Copyright (C) 2016 The Android Open Source Project
3b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang *
4b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang * you may not use this file except in compliance with the License.
6b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang * You may obtain a copy of the License at
7b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang *
8b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang *
10b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang * Unless required by applicable law or agreed to in writing, software
11b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang * See the License for the specific language governing permissions and
14b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang * limitations under the License.
15b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang */
16b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
17b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhangpackage com.android.settings.gestures;
18b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
19b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhangimport android.content.Context;
20469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritzeimport android.content.Intent;
21f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Shengimport android.content.SharedPreferences;
22b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhangimport android.provider.Settings;
23b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhangimport android.support.v7.preference.Preference;
24b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
25469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritzeimport com.android.settings.R;
26469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritzeimport com.android.settings.search.DatabaseIndexingUtils;
27469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritzeimport com.android.settings.search.InlineSwitchPayload;
28469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritzeimport com.android.settings.search.ResultPayload;
29777ed2535a7fd6f618a0d12f381af99252283574Juan Langimport com.android.settingslib.core.lifecycle.Lifecycle;
30b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
31458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritzeimport static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED;
32458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze
3333b0d91d74bb29cbfd49e3f4c3ebd9d99001bfa9Fan Zhangpublic class DoubleTapPowerPreferenceController extends GesturePreferenceController {
34b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
35469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze    private final int ON = 0;
36469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze    private final int OFF = 1;
37469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze
3833b0d91d74bb29cbfd49e3f4c3ebd9d99001bfa9Fan Zhang    private static final String PREF_KEY_VIDEO = "gesture_double_tap_power_video";
39742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze    private final String mDoubleTapPowerKey;
40b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
41458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze    private final String SECURE_KEY = CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED;
42458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze
43742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze    public DoubleTapPowerPreferenceController(Context context, Lifecycle lifecycle, String key) {
4433b0d91d74bb29cbfd49e3f4c3ebd9d99001bfa9Fan Zhang        super(context, lifecycle);
45742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze        mDoubleTapPowerKey = key;
46b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    }
47b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
48f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng    public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
49f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng        return !isGestureAvailable(context)
50f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng                || prefs.getBoolean(DoubleTapPowerSettings.PREF_KEY_SUGGESTION_COMPLETE, false);
51f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng    }
52f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng
53f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng    private static boolean isGestureAvailable(Context context) {
54f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng        return context.getResources()
55f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng                .getBoolean(com.android.internal.R.bool.config_cameraDoubleTapPowerGestureEnabled);
56f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng    }
57f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng
58b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    @Override
59b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    public boolean isAvailable() {
60f7c459c9e5e27e77fecee2d42856576c401e4243Daniel Sheng        return isGestureAvailable(mContext);
61b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    }
62b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
63b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    @Override
6433b0d91d74bb29cbfd49e3f4c3ebd9d99001bfa9Fan Zhang    protected String getVideoPrefKey() {
6533b0d91d74bb29cbfd49e3f4c3ebd9d99001bfa9Fan Zhang        return PREF_KEY_VIDEO;
66b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    }
67b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
68b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    @Override
69b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    public String getPreferenceKey() {
70742467ec9f384983f37d9a0e4e9775c27451816bMatthew Fritze        return mDoubleTapPowerKey;
71b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    }
72b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
73b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    @Override
74b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    public boolean onPreferenceChange(Preference preference, Object newValue) {
75b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang        boolean enabled = (boolean) newValue;
76458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze        Settings.Secure.putInt(mContext.getContentResolver(), SECURE_KEY, enabled ? ON : OFF);
77b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang        return true;
78b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    }
79b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang
8033b0d91d74bb29cbfd49e3f4c3ebd9d99001bfa9Fan Zhang    @Override
8133b0d91d74bb29cbfd49e3f4c3ebd9d99001bfa9Fan Zhang    protected boolean isSwitchPrefEnabled() {
82b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang        final int cameraDisabled = Settings.Secure.getInt(mContext.getContentResolver(),
83458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze                SECURE_KEY, ON);
84b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang        return cameraDisabled == 0;
85b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang    }
86469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze
87469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze    @Override
88469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze    public ResultPayload getResultPayload() {
89469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze        final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
90469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze                DoubleTapPowerSettings.class.getName(), mDoubleTapPowerKey,
91469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze                mContext.getString(R.string.display_settings));
92469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze
93458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze        return new InlineSwitchPayload(SECURE_KEY, ResultPayload.SettingsSource.SECURE,
94458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze                ON /* onValue */, intent, isAvailable(), ON /* defaultValue */);
95469e4ea228234aa169f9463ea41ae89f47089459Matthew Fritze    }
96b99ea900463af1b4ecc92dbd138670f0f182ff46Fan Zhang}
97