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