| /* |
| * Copyright (C) 2017 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.settings.dashboard.suggestions; |
| |
| import android.app.KeyguardManager; |
| import android.app.WallpaperManager; |
| import android.app.admin.DevicePolicyManager; |
| import android.content.ComponentName; |
| import android.content.Context; |
| import android.hardware.fingerprint.FingerprintManager; |
| import android.support.annotation.VisibleForTesting; |
| |
| import com.android.ims.ImsManager; |
| import com.android.settings.Settings.FingerprintEnrollSuggestionActivity; |
| import com.android.settings.Settings.ScreenLockSuggestionActivity; |
| import com.android.settings.Settings.WifiCallingSuggestionActivity; |
| import com.android.settings.Utils; |
| import com.android.settings.fingerprint.FingerprintSuggestionActivity; |
| import com.android.settings.overlay.FeatureFactory; |
| import com.android.settings.wallpaper.WallpaperSuggestionActivity; |
| import com.android.settingslib.drawer.Tile; |
| |
| /** |
| * The Home of all stupidly dynamic Settings Suggestions checks. |
| */ |
| public class SuggestionsChecks { |
| |
| private static final String TAG = "SuggestionsChecks"; |
| private final Context mContext; |
| |
| private final WallpaperManagerWrapper mWallpaperManager; |
| |
| public SuggestionsChecks(Context context) { |
| mContext = context.getApplicationContext(); |
| mWallpaperManager = new WallpaperManagerWrapper(mContext); |
| } |
| |
| public boolean isSuggestionComplete(Tile suggestion) { |
| ComponentName component = suggestion.intent.getComponent(); |
| String className = component.getClassName(); |
| if (className.equals(WallpaperSuggestionActivity.class.getName())) { |
| return hasWallpaperSet(); |
| } else if (className.equals(WifiCallingSuggestionActivity.class.getName())) { |
| return isWifiCallingUnavailableOrEnabled(); |
| } else if (className.equals(FingerprintSuggestionActivity.class.getName())) { |
| return !Utils.hasFingerprintHardware(mContext) || !isFingerprintEnabled() |
| || isNotSingleFingerprintEnrolled(); |
| } else if (className.equals(ScreenLockSuggestionActivity.class.getName())) { |
| return isDeviceSecured(); |
| } else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) { |
| final FingerprintManager manager = Utils.getFingerprintManagerOrNull(mContext); |
| if (manager == null || !isFingerprintEnabled() |
| || !Utils.hasFingerprintHardware(mContext)) { |
| return true; |
| } |
| return manager.hasEnrolledFingerprints(); |
| } |
| |
| final SuggestionFeatureProvider provider = |
| FeatureFactory.getFactory(mContext).getSuggestionFeatureProvider(mContext); |
| |
| return provider.isSuggestionCompleted(mContext, component); |
| } |
| |
| private boolean isDeviceSecured() { |
| KeyguardManager km = mContext.getSystemService(KeyguardManager.class); |
| return km.isKeyguardSecure(); |
| } |
| |
| private boolean isNotSingleFingerprintEnrolled() { |
| FingerprintManager manager = Utils.getFingerprintManagerOrNull(mContext); |
| return manager == null || manager.getEnrolledFingerprints().size() != 1; |
| } |
| |
| public boolean isWifiCallingUnavailableOrEnabled() { |
| if (!ImsManager.isWfcEnabledByPlatform(mContext) || |
| !ImsManager.isWfcProvisionedOnDevice(mContext)) { |
| return true; |
| } |
| return ImsManager.isWfcEnabledByUser(mContext) |
| && ImsManager.isNonTtyOrTtyOnVolteEnabled(mContext); |
| } |
| |
| @VisibleForTesting |
| boolean hasWallpaperSet() { |
| return mWallpaperManager.getWallpaperId(WallpaperManager.FLAG_SYSTEM) > 0; |
| } |
| |
| private boolean isFingerprintEnabled() { |
| DevicePolicyManager dpManager = |
| (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); |
| final int dpmFlags = dpManager.getKeyguardDisabledFeatures(null, /* admin */ |
| mContext.getUserId()); |
| return (dpmFlags & DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT) == 0; |
| } |
| } |