Move code from SuggestionChecks to FeatureProvider
This is step one to deprecate SuggestionChecks. Moving logic into SuggestionFeatureProvider allows potential logic override and improves testability. Also moved isSuggestionComplete tests to corresponding activity/pref controller test. Bug: 65065268 Test: robotests Change-Id: I2071d30fc58bb84acad2083ca03cfcf7d41f10cb
This commit is contained in:
@@ -21,8 +21,6 @@ import android.util.FeatureFlagUtils;
|
||||
|
||||
import com.android.settings.applications.AppOpsSummary;
|
||||
import com.android.settings.enterprise.EnterprisePrivacySettings;
|
||||
import com.android.settings.fingerprint.FingerprintEnrollIntroduction;
|
||||
import com.android.settings.password.ChooseLockGeneric;
|
||||
|
||||
/**
|
||||
* Top-level Settings activity
|
||||
@@ -157,12 +155,6 @@ public class Settings extends SettingsActivity {
|
||||
public static class ManageExternalSourcesActivity extends SettingsActivity {
|
||||
/* empty */ }
|
||||
public static class ManageAppExternalSourcesActivity extends SettingsActivity { /* empty */ }
|
||||
|
||||
public static class WifiCallingSuggestionActivity extends SettingsActivity { /* empty */ }
|
||||
public static class FingerprintEnrollSuggestionActivity extends FingerprintEnrollIntroduction {
|
||||
/* empty */
|
||||
}
|
||||
public static class ScreenLockSuggestionActivity extends ChooseLockGeneric { /* empty */ }
|
||||
public static class DoubleTapPowerSuggestionActivity extends SettingsActivity { /* empty */ }
|
||||
public static class DoubleTwistSuggestionActivity extends SettingsActivity { /* empty */ }
|
||||
public static class AmbientDisplaySuggestionActivity extends SettingsActivity { /* empty */ }
|
||||
|
||||
@@ -54,7 +54,7 @@ public interface SuggestionFeatureProvider {
|
||||
boolean isSmartSuggestionEnabled(Context context);
|
||||
|
||||
/** Return true if the suggestion has already been completed and does not need to be shown */
|
||||
boolean isSuggestionCompleted(Context context, @NonNull ComponentName suggestion);
|
||||
boolean isSuggestionComplete(Context context, @NonNull ComponentName suggestion);
|
||||
|
||||
/**
|
||||
* Returns the {@link SharedPreferences} that holds metadata for suggestions.
|
||||
|
||||
@@ -39,13 +39,18 @@ import com.android.settings.Settings.DoubleTwistSuggestionActivity;
|
||||
import com.android.settings.Settings.NightDisplaySuggestionActivity;
|
||||
import com.android.settings.Settings.SwipeToNotificationSuggestionActivity;
|
||||
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settings.fingerprint.FingerprintEnrollSuggestionActivity;
|
||||
import com.android.settings.fingerprint.FingerprintSuggestionActivity;
|
||||
import com.android.settings.gestures.DoubleTapPowerPreferenceController;
|
||||
import com.android.settings.gestures.DoubleTapScreenPreferenceController;
|
||||
import com.android.settings.gestures.DoubleTwistPreferenceController;
|
||||
import com.android.settings.gestures.PickupGesturePreferenceController;
|
||||
import com.android.settings.gestures.SwipeToNotificationPreferenceController;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.password.ScreenLockSuggestionActivity;
|
||||
import com.android.settings.support.NewDeviceIntroSuggestionActivity;
|
||||
import com.android.settings.wallpaper.WallpaperSuggestionActivity;
|
||||
import com.android.settings.wifi.WifiCallingSuggestionActivity;
|
||||
import com.android.settingslib.drawer.Tile;
|
||||
import com.android.settingslib.suggestions.SuggestionParser;
|
||||
|
||||
@@ -96,12 +101,21 @@ public class SuggestionFeatureProviderImpl implements SuggestionFeatureProvider
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSuggestionCompleted(Context context, @NonNull ComponentName component) {
|
||||
public boolean isSuggestionComplete(Context context, @NonNull ComponentName component) {
|
||||
final String className = component.getClassName();
|
||||
if (className.equals(NightDisplaySuggestionActivity.class.getName())) {
|
||||
if (className.equals(WallpaperSuggestionActivity.class.getName())) {
|
||||
return WallpaperSuggestionActivity.isSuggestionComplete(context);
|
||||
} else if (className.equals(FingerprintSuggestionActivity.class.getName())) {
|
||||
return FingerprintSuggestionActivity.isSuggestionComplete(context);
|
||||
} else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) {
|
||||
return FingerprintEnrollSuggestionActivity.isSuggestionComplete(context);
|
||||
} else if (className.equals(ScreenLockSuggestionActivity.class.getName())) {
|
||||
return ScreenLockSuggestionActivity.isSuggestionComplete(context);
|
||||
} else if (className.equals(WifiCallingSuggestionActivity.class.getName())) {
|
||||
return WifiCallingSuggestionActivity.isSuggestionComplete(context);
|
||||
} else if (className.equals(NightDisplaySuggestionActivity.class.getName())) {
|
||||
return hasUsedNightDisplay(context);
|
||||
}
|
||||
if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) {
|
||||
} else if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) {
|
||||
return NewDeviceIntroSuggestionActivity.isSuggestionComplete(context);
|
||||
} else if (className.equals(DoubleTapPowerSuggestionActivity.class.getName())) {
|
||||
return DoubleTapPowerPreferenceController
|
||||
|
||||
@@ -16,23 +16,10 @@
|
||||
|
||||
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.settings.wrapper.WallpaperManagerWrapper;
|
||||
import com.android.settingslib.drawer.Tile;
|
||||
|
||||
/**
|
||||
@@ -43,69 +30,17 @@ 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);
|
||||
return provider.isSuggestionComplete(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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* 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.fingerprint;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.settings.Utils;
|
||||
|
||||
public class FingerprintEnrollSuggestionActivity extends FingerprintEnrollIntroduction {
|
||||
|
||||
public static boolean isSuggestionComplete(Context context) {
|
||||
if (!Utils.hasFingerprintHardware(context)
|
||||
|| !FingerprintSuggestionActivity.isFingerprintEnabled(context)
|
||||
|| !Utils.hasFingerprintHardware(context)) {
|
||||
return true;
|
||||
}
|
||||
return Utils.getFingerprintManagerOrNull(context).hasEnrolledFingerprints();
|
||||
}
|
||||
}
|
||||
@@ -16,9 +16,13 @@
|
||||
|
||||
package com.android.settings.fingerprint;
|
||||
|
||||
import android.app.admin.DevicePolicyManager;
|
||||
import android.content.Context;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.widget.Button;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
|
||||
public class FingerprintSuggestionActivity extends SetupFingerprintEnrollIntroduction {
|
||||
|
||||
@@ -36,4 +40,23 @@ public class FingerprintSuggestionActivity extends SetupFingerprintEnrollIntrodu
|
||||
setResult(RESULT_CANCELED);
|
||||
super.finish();
|
||||
}
|
||||
|
||||
public static boolean isSuggestionComplete(Context context) {
|
||||
return !Utils.hasFingerprintHardware(context)
|
||||
|| !isFingerprintEnabled(context)
|
||||
|| isNotSingleFingerprintEnrolled(context);
|
||||
}
|
||||
|
||||
private static boolean isNotSingleFingerprintEnrolled(Context context) {
|
||||
final FingerprintManager manager = Utils.getFingerprintManagerOrNull(context);
|
||||
return manager == null || manager.getEnrolledFingerprints().size() != 1;
|
||||
}
|
||||
|
||||
static boolean isFingerprintEnabled(Context context) {
|
||||
final DevicePolicyManager dpManager =
|
||||
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||
final int dpmFlags = dpManager.getKeyguardDisabledFeatures(null, /* admin */
|
||||
context.getUserId());
|
||||
return (dpmFlags & DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT) == 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,10 +16,13 @@
|
||||
|
||||
package com.android.settings.gestures;
|
||||
|
||||
import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.provider.Settings;
|
||||
import android.support.annotation.VisibleForTesting;
|
||||
import android.support.v7.preference.Preference;
|
||||
|
||||
import com.android.settings.R;
|
||||
@@ -28,12 +31,12 @@ import com.android.settings.search.InlineSwitchPayload;
|
||||
import com.android.settings.search.ResultPayload;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
|
||||
import static android.provider.Settings.Secure.CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED;
|
||||
|
||||
public class DoubleTapPowerPreferenceController extends GesturePreferenceController {
|
||||
|
||||
private final int ON = 0;
|
||||
private final int OFF = 1;
|
||||
@VisibleForTesting
|
||||
static final int ON = 0;
|
||||
@VisibleForTesting
|
||||
static final int OFF = 1;
|
||||
|
||||
private static final String PREF_KEY_VIDEO = "gesture_double_tap_power_video";
|
||||
private final String mDoubleTapPowerKey;
|
||||
@@ -81,7 +84,7 @@ public class DoubleTapPowerPreferenceController extends GesturePreferenceControl
|
||||
protected boolean isSwitchPrefEnabled() {
|
||||
final int cameraDisabled = Settings.Secure.getInt(mContext.getContentResolver(),
|
||||
SECURE_KEY, ON);
|
||||
return cameraDisabled == 0;
|
||||
return cameraDisabled == ON;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.settings.gestures;
|
||||
|
||||
import static android.provider.Settings.Secure.DOZE_PULSE_ON_PICK_UP;
|
||||
|
||||
import android.annotation.UserIdInt;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -30,8 +32,6 @@ import com.android.settings.search.InlineSwitchPayload;
|
||||
import com.android.settings.search.ResultPayload;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
|
||||
import static android.provider.Settings.Secure.DOZE_PULSE_ON_PICK_UP;
|
||||
|
||||
public class PickupGesturePreferenceController extends GesturePreferenceController {
|
||||
|
||||
private final int ON = 1;
|
||||
@@ -56,8 +56,8 @@ public class PickupGesturePreferenceController extends GesturePreferenceControll
|
||||
|
||||
public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
|
||||
AmbientDisplayConfiguration ambientConfig = new AmbientDisplayConfiguration(context);
|
||||
return !ambientConfig.pulseOnPickupAvailable()
|
||||
|| prefs.getBoolean(PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, false);
|
||||
return prefs.getBoolean(PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, false)
|
||||
|| !ambientConfig.pulseOnPickupAvailable();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.settings.gestures;
|
||||
|
||||
import static android.provider.Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.provider.Settings;
|
||||
@@ -24,8 +26,6 @@ import android.support.v7.preference.Preference;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
|
||||
import static android.provider.Settings.Secure.SYSTEM_NAVIGATION_KEYS_ENABLED;
|
||||
|
||||
public class SwipeToNotificationPreferenceController extends GesturePreferenceController {
|
||||
|
||||
private static final int ON = 1;
|
||||
@@ -45,11 +45,12 @@ public class SwipeToNotificationPreferenceController extends GesturePreferenceCo
|
||||
public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
|
||||
return !isGestureAvailable(context)
|
||||
|| prefs.getBoolean(SwipeToNotificationSettings.PREF_KEY_SUGGESTION_COMPLETE,
|
||||
false);
|
||||
false);
|
||||
}
|
||||
|
||||
private static boolean isGestureAvailable(Context context) {
|
||||
return Utils.hasFingerprintHardware(context) && context.getResources()
|
||||
return Utils.hasFingerprintHardware(context)
|
||||
&& context.getResources()
|
||||
.getBoolean(com.android.internal.R.bool.config_supportSystemNavigationKeys);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 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.password;
|
||||
|
||||
import android.app.KeyguardManager;
|
||||
import android.content.Context;
|
||||
|
||||
public class ScreenLockSuggestionActivity extends ChooseLockGeneric {
|
||||
|
||||
public static boolean isSuggestionComplete(Context context) {
|
||||
KeyguardManager km = context.getSystemService(KeyguardManager.class);
|
||||
return km.isKeyguardSecure();
|
||||
}
|
||||
}
|
||||
@@ -17,6 +17,8 @@
|
||||
package com.android.settings.wallpaper;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.WallpaperManager;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
@@ -25,6 +27,7 @@ import android.support.annotation.VisibleForTesting;
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.wrapper.WallpaperManagerWrapper;
|
||||
|
||||
public class WallpaperSuggestionActivity extends Activity {
|
||||
|
||||
@@ -53,4 +56,10 @@ public class WallpaperSuggestionActivity extends Activity {
|
||||
MetricsProto.MetricsEvent.DASHBOARD_SUMMARY);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public static boolean isSuggestionComplete(Context context) {
|
||||
final WallpaperManagerWrapper manager = new WallpaperManagerWrapper(context);
|
||||
return manager.getWallpaperId(WallpaperManager.FLAG_SYSTEM) > 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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.wifi;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.android.ims.ImsManager;
|
||||
import com.android.settings.SettingsActivity;
|
||||
|
||||
public class WifiCallingSuggestionActivity extends SettingsActivity {
|
||||
|
||||
public static boolean isSuggestionComplete(Context context) {
|
||||
if (!ImsManager.isWfcEnabledByPlatform(context) ||
|
||||
!ImsManager.isWfcProvisionedOnDevice(context)) {
|
||||
return true;
|
||||
}
|
||||
return ImsManager.isWfcEnabledByUser(context)
|
||||
&& ImsManager.isNonTtyOrTtyOnVolteEnabled(context);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user