1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.dashboard.suggestions; 18 19 import android.app.KeyguardManager; 20 import android.app.WallpaperManager; 21 import android.app.admin.DevicePolicyManager; 22 import android.content.ComponentName; 23 import android.content.Context; 24 import android.hardware.fingerprint.FingerprintManager; 25 import android.support.annotation.VisibleForTesting; 26 27 import com.android.ims.ImsManager; 28 import com.android.settings.Settings.FingerprintEnrollSuggestionActivity; 29 import com.android.settings.Settings.ScreenLockSuggestionActivity; 30 import com.android.settings.Settings.WifiCallingSuggestionActivity; 31 import com.android.settings.Utils; 32 import com.android.settings.fingerprint.FingerprintSuggestionActivity; 33 import com.android.settings.overlay.FeatureFactory; 34 import com.android.settings.wallpaper.WallpaperSuggestionActivity; 35 import com.android.settingslib.drawer.Tile; 36 37 /** 38 * The Home of all stupidly dynamic Settings Suggestions checks. 39 */ 40 public class SuggestionsChecks { 41 42 private static final String TAG = "SuggestionsChecks"; 43 private final Context mContext; 44 45 private final WallpaperManagerWrapper mWallpaperManager; 46 SuggestionsChecks(Context context)47 public SuggestionsChecks(Context context) { 48 mContext = context.getApplicationContext(); 49 mWallpaperManager = new WallpaperManagerWrapper(mContext); 50 } 51 isSuggestionComplete(Tile suggestion)52 public boolean isSuggestionComplete(Tile suggestion) { 53 ComponentName component = suggestion.intent.getComponent(); 54 String className = component.getClassName(); 55 if (className.equals(WallpaperSuggestionActivity.class.getName())) { 56 return hasWallpaperSet(); 57 } else if (className.equals(WifiCallingSuggestionActivity.class.getName())) { 58 return isWifiCallingUnavailableOrEnabled(); 59 } else if (className.equals(FingerprintSuggestionActivity.class.getName())) { 60 return !Utils.hasFingerprintHardware(mContext) || !isFingerprintEnabled() 61 || isNotSingleFingerprintEnrolled(); 62 } else if (className.equals(ScreenLockSuggestionActivity.class.getName())) { 63 return isDeviceSecured(); 64 } else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) { 65 final FingerprintManager manager = Utils.getFingerprintManagerOrNull(mContext); 66 if (manager == null || !isFingerprintEnabled() 67 || !Utils.hasFingerprintHardware(mContext)) { 68 return true; 69 } 70 return manager.hasEnrolledFingerprints(); 71 } 72 73 final SuggestionFeatureProvider provider = 74 FeatureFactory.getFactory(mContext).getSuggestionFeatureProvider(mContext); 75 76 return provider.isSuggestionCompleted(mContext, component); 77 } 78 isDeviceSecured()79 private boolean isDeviceSecured() { 80 KeyguardManager km = mContext.getSystemService(KeyguardManager.class); 81 return km.isKeyguardSecure(); 82 } 83 isNotSingleFingerprintEnrolled()84 private boolean isNotSingleFingerprintEnrolled() { 85 FingerprintManager manager = Utils.getFingerprintManagerOrNull(mContext); 86 return manager == null || manager.getEnrolledFingerprints().size() != 1; 87 } 88 isWifiCallingUnavailableOrEnabled()89 public boolean isWifiCallingUnavailableOrEnabled() { 90 if (!ImsManager.isWfcEnabledByPlatform(mContext) || 91 !ImsManager.isWfcProvisionedOnDevice(mContext)) { 92 return true; 93 } 94 return ImsManager.isWfcEnabledByUser(mContext) 95 && ImsManager.isNonTtyOrTtyOnVolteEnabled(mContext); 96 } 97 98 @VisibleForTesting hasWallpaperSet()99 boolean hasWallpaperSet() { 100 return mWallpaperManager.getWallpaperId(WallpaperManager.FLAG_SYSTEM) > 0; 101 } 102 isFingerprintEnabled()103 private boolean isFingerprintEnabled() { 104 DevicePolicyManager dpManager = 105 (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); 106 final int dpmFlags = dpManager.getKeyguardDisabledFeatures(null, /* admin */ 107 mContext.getUserId()); 108 return (dpmFlags & DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT) == 0; 109 } 110 } 111