Merge changes I8ad04753,I59aa77f3 into rvc-dev

* changes:
  Use a BgExecutor in SecurityControllerImpl
  Inject DeviceConfig into SystemUI classes
This commit is contained in:
Beverly Tai
2020-02-27 01:54:47 +00:00
committed by Android (Google) Code Review
12 changed files with 164 additions and 184 deletions

View File

@@ -96,6 +96,7 @@ import com.android.systemui.statusbar.phone.NotificationPanelViewController;
import com.android.systemui.statusbar.phone.NotificationShadeWindowController; import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.InjectionInflationController; import com.android.systemui.util.InjectionInflationController;
import java.io.FileDescriptor; import java.io.FileDescriptor;
@@ -378,6 +379,17 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
private IKeyguardDrawnCallback mDrawnCallback; private IKeyguardDrawnCallback mDrawnCallback;
private CharSequence mCustomMessage; private CharSequence mCustomMessage;
private final DeviceConfig.OnPropertiesChangedListener mOnPropertiesChangedListener =
new DeviceConfig.OnPropertiesChangedListener() {
@Override
public void onPropertiesChanged(DeviceConfig.Properties properties) {
if (properties.getKeyset().contains(NAV_BAR_HANDLE_SHOW_OVER_LOCKSCREEN)) {
mShowHomeOverLockscreen = properties.getBoolean(
NAV_BAR_HANDLE_SHOW_OVER_LOCKSCREEN, true /* defaultValue */);
}
}
};
KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() { KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
@Override @Override
@@ -692,6 +704,8 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
} }
}; };
private DeviceConfigProxy mDeviceConfig;
/** /**
* Injected constructor. See {@link KeyguardModule}. * Injected constructor. See {@link KeyguardModule}.
*/ */
@@ -705,7 +719,8 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
DismissCallbackRegistry dismissCallbackRegistry, DismissCallbackRegistry dismissCallbackRegistry,
KeyguardUpdateMonitor keyguardUpdateMonitor, DumpManager dumpManager, KeyguardUpdateMonitor keyguardUpdateMonitor, DumpManager dumpManager,
@UiBackground Executor uiBgExecutor, PowerManager powerManager, @UiBackground Executor uiBgExecutor, PowerManager powerManager,
TrustManager trustManager) { TrustManager trustManager,
DeviceConfigProxy deviceConfig) {
super(context); super(context);
mFalsingManager = falsingManager; mFalsingManager = falsingManager;
mLockPatternUtils = lockPatternUtils; mLockPatternUtils = lockPatternUtils;
@@ -718,20 +733,15 @@ public class KeyguardViewMediator extends SystemUI implements Dumpable {
mPM = powerManager; mPM = powerManager;
mTrustManager = trustManager; mTrustManager = trustManager;
dumpManager.registerDumpable(getClass().getName(), this); dumpManager.registerDumpable(getClass().getName(), this);
mShowHomeOverLockscreen = DeviceConfig.getBoolean( mDeviceConfig = deviceConfig;
mShowHomeOverLockscreen = mDeviceConfig.getBoolean(
DeviceConfig.NAMESPACE_SYSTEMUI, DeviceConfig.NAMESPACE_SYSTEMUI,
NAV_BAR_HANDLE_SHOW_OVER_LOCKSCREEN, NAV_BAR_HANDLE_SHOW_OVER_LOCKSCREEN,
/* defaultValue = */ true); /* defaultValue = */ true);
DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI, mHandler::post, mDeviceConfig.addOnPropertiesChangedListener(
new DeviceConfig.OnPropertiesChangedListener() { DeviceConfig.NAMESPACE_SYSTEMUI,
@Override mHandler::post,
public void onPropertiesChanged(DeviceConfig.Properties properties) { mOnPropertiesChangedListener);
if (properties.getKeyset().contains(NAV_BAR_HANDLE_SHOW_OVER_LOCKSCREEN)) {
mShowHomeOverLockscreen = properties.getBoolean(
NAV_BAR_HANDLE_SHOW_OVER_LOCKSCREEN, true /* defaultValue */);
}
}
});
} }
public void userActivity() { public void userActivity() {

View File

@@ -31,6 +31,7 @@ import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.statusbar.phone.NotificationShadeWindowController; import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.util.DeviceConfigProxy;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -62,7 +63,8 @@ public class KeyguardModule {
DumpManager dumpManager, DumpManager dumpManager,
PowerManager powerManager, PowerManager powerManager,
TrustManager trustManager, TrustManager trustManager,
@UiBackground Executor uiBgExecutor) { @UiBackground Executor uiBgExecutor,
DeviceConfigProxy deviceConfig) {
return new KeyguardViewMediator( return new KeyguardViewMediator(
context, context,
falsingManager, falsingManager,
@@ -75,6 +77,7 @@ public class KeyguardModule {
dumpManager, dumpManager,
uiBgExecutor, uiBgExecutor,
powerManager, powerManager,
trustManager); trustManager,
deviceConfig);
} }
} }

View File

@@ -48,6 +48,7 @@ import com.android.systemui.shared.system.InputConsumerController;
import com.android.systemui.shared.system.PinnedStackListenerForwarder.PinnedStackListener; import com.android.systemui.shared.system.PinnedStackListenerForwarder.PinnedStackListener;
import com.android.systemui.shared.system.TaskStackChangeListener; import com.android.systemui.shared.system.TaskStackChangeListener;
import com.android.systemui.shared.system.WindowManagerWrapper; import com.android.systemui.shared.system.WindowManagerWrapper;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.FloatingContentCoordinator; import com.android.systemui.util.FloatingContentCoordinator;
import com.android.systemui.wm.DisplayChangeController; import com.android.systemui.wm.DisplayChangeController;
import com.android.systemui.wm.DisplayController; import com.android.systemui.wm.DisplayController;
@@ -204,7 +205,8 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
@Inject @Inject
public PipManager(Context context, BroadcastDispatcher broadcastDispatcher, public PipManager(Context context, BroadcastDispatcher broadcastDispatcher,
DisplayController displayController, DisplayController displayController,
FloatingContentCoordinator floatingContentCoordinator) { FloatingContentCoordinator floatingContentCoordinator,
DeviceConfigProxy deviceConfig) {
mContext = context; mContext = context;
mActivityManager = ActivityManager.getService(); mActivityManager = ActivityManager.getService();
@@ -225,7 +227,7 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
mInputConsumerController); mInputConsumerController);
mTouchHandler = new PipTouchHandler(context, mActivityManager, activityTaskManager, mTouchHandler = new PipTouchHandler(context, mActivityManager, activityTaskManager,
mMenuController, mInputConsumerController, mPipBoundsHandler, mPipTaskOrganizer, mMenuController, mInputConsumerController, mPipBoundsHandler, mPipTaskOrganizer,
floatingContentCoordinator); floatingContentCoordinator, deviceConfig);
mAppOpsListener = new PipAppOpsListener(context, mActivityManager, mAppOpsListener = new PipAppOpsListener(context, mActivityManager,
mTouchHandler.getMotionHelper()); mTouchHandler.getMotionHelper());
displayController.addDisplayChangingController(mRotationController); displayController.addDisplayChangingController(mRotationController);

View File

@@ -41,6 +41,7 @@ import android.view.MotionEvent;
import com.android.internal.policy.TaskResizingAlgorithm; import com.android.internal.policy.TaskResizingAlgorithm;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.pip.PipBoundsHandler; import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.util.DeviceConfigProxy;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -77,7 +78,8 @@ public class PipResizeGestureHandler {
private int mCtrlType; private int mCtrlType;
public PipResizeGestureHandler(Context context, PipBoundsHandler pipBoundsHandler, public PipResizeGestureHandler(Context context, PipBoundsHandler pipBoundsHandler,
PipTouchHandler pipTouchHandler, PipMotionHelper motionHelper) { PipTouchHandler pipTouchHandler, PipMotionHelper motionHelper,
DeviceConfigProxy deviceConfig) {
final Resources res = context.getResources(); final Resources res = context.getResources();
context.getDisplay().getMetrics(mDisplayMetrics); context.getDisplay().getMetrics(mDisplayMetrics);
mDisplayId = context.getDisplayId(); mDisplayId = context.getDisplayId();
@@ -93,7 +95,7 @@ public class PipResizeGestureHandler {
DeviceConfig.NAMESPACE_SYSTEMUI, DeviceConfig.NAMESPACE_SYSTEMUI,
PIP_USER_RESIZE, PIP_USER_RESIZE,
/* defaultValue = */ false); /* defaultValue = */ false);
DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI, mMainExecutor, deviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI, mMainExecutor,
new DeviceConfig.OnPropertiesChangedListener() { new DeviceConfig.OnPropertiesChangedListener() {
@Override @Override
public void onPropertiesChanged(DeviceConfig.Properties properties) { public void onPropertiesChanged(DeviceConfig.Properties properties) {

View File

@@ -48,6 +48,7 @@ import com.android.systemui.pip.PipSnapAlgorithm;
import com.android.systemui.pip.PipTaskOrganizer; import com.android.systemui.pip.PipTaskOrganizer;
import com.android.systemui.shared.system.InputConsumerController; import com.android.systemui.shared.system.InputConsumerController;
import com.android.systemui.statusbar.FlingAnimationUtils; import com.android.systemui.statusbar.FlingAnimationUtils;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.FloatingContentCoordinator; import com.android.systemui.util.FloatingContentCoordinator;
import java.io.PrintWriter; import java.io.PrintWriter;
@@ -164,7 +165,8 @@ public class PipTouchHandler {
InputConsumerController inputConsumerController, InputConsumerController inputConsumerController,
PipBoundsHandler pipBoundsHandler, PipBoundsHandler pipBoundsHandler,
PipTaskOrganizer pipTaskOrganizer, PipTaskOrganizer pipTaskOrganizer,
FloatingContentCoordinator floatingContentCoordinator) { FloatingContentCoordinator floatingContentCoordinator,
DeviceConfigProxy deviceConfig) {
// Initialize the Pip input consumer // Initialize the Pip input consumer
mContext = context; mContext = context;
mActivityManager = activityManager; mActivityManager = activityManager;
@@ -179,7 +181,8 @@ public class PipTouchHandler {
mMotionHelper = new PipMotionHelper(mContext, activityTaskManager, pipTaskOrganizer, mMotionHelper = new PipMotionHelper(mContext, activityTaskManager, pipTaskOrganizer,
mMenuController, mSnapAlgorithm, mFlingAnimationUtils, floatingContentCoordinator); mMenuController, mSnapAlgorithm, mFlingAnimationUtils, floatingContentCoordinator);
mPipResizeGestureHandler = mPipResizeGestureHandler =
new PipResizeGestureHandler(context, pipBoundsHandler, this, mMotionHelper); new PipResizeGestureHandler(context, pipBoundsHandler, this, mMotionHelper,
deviceConfig);
mTouchState = new PipTouchState(ViewConfiguration.get(context), mHandler, mTouchState = new PipTouchState(ViewConfiguration.get(context), mHandler,
() -> mMenuController.showMenu(MENU_STATE_FULL, mMotionHelper.getBounds(), () -> mMenuController.showMenu(MENU_STATE_FULL, mMotionHelper.getBounds(),
mMovementBounds, true /* allowMenuTimeout */, willResizeMenu())); mMovementBounds, true /* allowMenuTimeout */, willResizeMenu()));

View File

@@ -65,6 +65,7 @@ import com.android.systemui.statusbar.phone.ScrimController;
import com.android.systemui.statusbar.phone.ScrimState; import com.android.systemui.statusbar.phone.ScrimState;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.DeviceConfigProxy;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.PrintWriter; import java.io.PrintWriter;
@@ -183,7 +184,8 @@ public class NotificationMediaManager implements Dumpable {
NotificationEntryManager notificationEntryManager, NotificationEntryManager notificationEntryManager,
MediaArtworkProcessor mediaArtworkProcessor, MediaArtworkProcessor mediaArtworkProcessor,
KeyguardBypassController keyguardBypassController, KeyguardBypassController keyguardBypassController,
@Main Executor mainExecutor) { @Main Executor mainExecutor,
DeviceConfigProxy deviceConfig) {
mContext = context; mContext = context;
mMediaArtworkProcessor = mediaArtworkProcessor; mMediaArtworkProcessor = mediaArtworkProcessor;
mKeyguardBypassController = keyguardBypassController; mKeyguardBypassController = keyguardBypassController;
@@ -221,7 +223,7 @@ public class NotificationMediaManager implements Dumpable {
DeviceConfig.getProperty(DeviceConfig.NAMESPACE_SYSTEMUI, DeviceConfig.getProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.COMPACT_MEDIA_SEEKBAR_ENABLED)); SystemUiDeviceConfigFlags.COMPACT_MEDIA_SEEKBAR_ENABLED));
DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI, deviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_SYSTEMUI,
mContext.getMainExecutor(), mContext.getMainExecutor(),
mPropertiesChangedListener); mPropertiesChangedListener);
} }

View File

@@ -42,6 +42,7 @@ import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.policy.RemoteInputUriController; import com.android.systemui.statusbar.policy.RemoteInputUriController;
import com.android.systemui.tracing.ProtoTracer; import com.android.systemui.tracing.ProtoTracer;
import com.android.systemui.util.DeviceConfigProxy;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -91,7 +92,8 @@ public interface StatusBarDependenciesModule {
NotificationEntryManager notificationEntryManager, NotificationEntryManager notificationEntryManager,
MediaArtworkProcessor mediaArtworkProcessor, MediaArtworkProcessor mediaArtworkProcessor,
KeyguardBypassController keyguardBypassController, KeyguardBypassController keyguardBypassController,
@Main Executor mainExecutor) { @Main Executor mainExecutor,
DeviceConfigProxy deviceConfigProxy) {
return new NotificationMediaManager( return new NotificationMediaManager(
context, context,
statusBarLazy, statusBarLazy,
@@ -99,7 +101,8 @@ public interface StatusBarDependenciesModule {
notificationEntryManager, notificationEntryManager,
mediaArtworkProcessor, mediaArtworkProcessor,
keyguardBypassController, keyguardBypassController,
mainExecutor); mainExecutor,
deviceConfigProxy);
} }
/** */ /** */

View File

@@ -31,14 +31,12 @@ import android.net.IConnectivityManager;
import android.net.Network; import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.net.NetworkRequest; import android.net.NetworkRequest;
import android.os.AsyncTask;
import android.os.Handler; import android.os.Handler;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.ServiceManager; import android.os.ServiceManager;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.security.KeyChain; import android.security.KeyChain;
import android.security.KeyChain.KeyChainConnection;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.Log; import android.util.Log;
import android.util.Pair; import android.util.Pair;
@@ -55,6 +53,7 @@ import com.android.systemui.settings.CurrentUserTracker;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.Executor;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
@@ -85,7 +84,7 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
private final DevicePolicyManager mDevicePolicyManager; private final DevicePolicyManager mDevicePolicyManager;
private final PackageManager mPackageManager; private final PackageManager mPackageManager;
private final UserManager mUserManager; private final UserManager mUserManager;
private final Handler mBgHandler; private final Executor mBgExecutor;
@GuardedBy("mCallbacks") @GuardedBy("mCallbacks")
private final ArrayList<SecurityControllerCallback> mCallbacks = new ArrayList<>(); private final ArrayList<SecurityControllerCallback> mCallbacks = new ArrayList<>();
@@ -101,16 +100,14 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
/** /**
*/ */
@Inject @Inject
public SecurityControllerImpl(Context context, @Background Handler bgHandler, public SecurityControllerImpl(
BroadcastDispatcher broadcastDispatcher) { Context context,
this(context, bgHandler, broadcastDispatcher, null); @Background Handler bgHandler,
} BroadcastDispatcher broadcastDispatcher,
@Background Executor bgExecutor
public SecurityControllerImpl(Context context, Handler bgHandler, ) {
BroadcastDispatcher broadcastDispatcher, SecurityControllerCallback callback) {
super(broadcastDispatcher); super(broadcastDispatcher);
mContext = context; mContext = context;
mBgHandler = bgHandler;
mDevicePolicyManager = (DevicePolicyManager) mDevicePolicyManager = (DevicePolicyManager)
context.getSystemService(Context.DEVICE_POLICY_SERVICE); context.getSystemService(Context.DEVICE_POLICY_SERVICE);
mConnectivityManager = (ConnectivityManager) mConnectivityManager = (ConnectivityManager)
@@ -118,10 +115,8 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
mConnectivityManagerService = IConnectivityManager.Stub.asInterface( mConnectivityManagerService = IConnectivityManager.Stub.asInterface(
ServiceManager.getService(Context.CONNECTIVITY_SERVICE)); ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
mPackageManager = context.getPackageManager(); mPackageManager = context.getPackageManager();
mUserManager = (UserManager) mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
context.getSystemService(Context.USER_SERVICE); mBgExecutor = bgExecutor;
addCallback(callback);
IntentFilter filter = new IntentFilter(); IntentFilter filter = new IntentFilter();
filter.addAction(KeyChain.ACTION_TRUST_STORE_CHANGED); filter.addAction(KeyChain.ACTION_TRUST_STORE_CHANGED);
@@ -305,7 +300,23 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
} }
private void refreshCACerts(int userId) { private void refreshCACerts(int userId) {
new CACertLoader().execute(userId); mBgExecutor.execute(() -> {
Pair<Integer, Boolean> idWithCert = null;
try (KeyChain.KeyChainConnection conn = KeyChain.bindAsUser(mContext,
UserHandle.of(userId))) {
boolean hasCACerts = !(conn.getService().getUserCaAliases().getList().isEmpty());
idWithCert = new Pair<Integer, Boolean>(userId, hasCACerts);
} catch (RemoteException | InterruptedException | AssertionError e) {
Log.i(TAG, "failed to get CA certs", e);
idWithCert = new Pair<Integer, Boolean>(userId, null);
} finally {
if (DEBUG) Log.d(TAG, "Refreshing CA Certs " + idWithCert);
if (idWithCert != null && idWithCert.second != null) {
mHasCACerts.put(idWithCert.first, idWithCert.second);
fireCallbacks();
}
}
});
} }
private String getNameForVpnConfig(VpnConfig cfg, UserHandle user) { private String getNameForVpnConfig(VpnConfig cfg, UserHandle user) {
@@ -408,28 +419,4 @@ public class SecurityControllerImpl extends CurrentUserTracker implements Securi
} }
} }
}; };
protected class CACertLoader extends AsyncTask<Integer, Void, Pair<Integer, Boolean> > {
@Override
protected Pair<Integer, Boolean> doInBackground(Integer... userId) {
try (KeyChainConnection conn = KeyChain.bindAsUser(mContext,
UserHandle.of(userId[0]))) {
boolean hasCACerts = !(conn.getService().getUserCaAliases().getList().isEmpty());
return new Pair<Integer, Boolean>(userId[0], hasCACerts);
} catch (RemoteException | InterruptedException | AssertionError e) {
Log.i(TAG, "failed to get CA certs", e);
return new Pair<Integer, Boolean>(userId[0], null);
}
}
@Override
protected void onPostExecute(Pair<Integer, Boolean> result) {
if (DEBUG) Log.d(TAG, "onPostExecute " + result);
if (result.second != null) {
mHasCACerts.put(result.first, result.second);
fireCallbacks();
}
}
}
} }

View File

@@ -25,10 +25,10 @@ import android.text.TextUtils;
import android.util.KeyValueListParser; import android.util.KeyValueListParser;
import android.util.Log; import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.util.DeviceConfigProxy;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
@@ -62,10 +62,15 @@ public final class SmartReplyConstants {
private final Handler mHandler; private final Handler mHandler;
private final Context mContext; private final Context mContext;
private final DeviceConfigProxy mDeviceConfig;
private final KeyValueListParser mParser = new KeyValueListParser(','); private final KeyValueListParser mParser = new KeyValueListParser(',');
@Inject @Inject
public SmartReplyConstants(@Main Handler handler, Context context) { public SmartReplyConstants(
@Main Handler handler,
Context context,
DeviceConfigProxy deviceConfig
) {
mHandler = handler; mHandler = handler;
mContext = context; mContext = context;
final Resources resources = mContext.getResources(); final Resources resources = mContext.getResources();
@@ -86,31 +91,35 @@ public final class SmartReplyConstants {
mDefaultOnClickInitDelay = resources.getInteger( mDefaultOnClickInitDelay = resources.getInteger(
R.integer.config_smart_replies_in_notifications_onclick_init_delay); R.integer.config_smart_replies_in_notifications_onclick_init_delay);
mDeviceConfig = deviceConfig;
registerDeviceConfigListener(); registerDeviceConfigListener();
updateConstants(); updateConstants();
} }
private void registerDeviceConfigListener() { private void registerDeviceConfigListener() {
DeviceConfig.addOnPropertiesChangedListener( mDeviceConfig.addOnPropertiesChangedListener(
DeviceConfig.NAMESPACE_SYSTEMUI, DeviceConfig.NAMESPACE_SYSTEMUI,
this::postToHandler, this::postToHandler,
(properties) -> onDeviceConfigPropertiesChanged(properties.getNamespace())); mOnPropertiesChangedListener);
} }
private void postToHandler(Runnable r) { private void postToHandler(Runnable r) {
this.mHandler.post(r); this.mHandler.post(r);
} }
@VisibleForTesting private final DeviceConfig.OnPropertiesChangedListener mOnPropertiesChangedListener =
void onDeviceConfigPropertiesChanged(String namespace) { new DeviceConfig.OnPropertiesChangedListener() {
if (!DeviceConfig.NAMESPACE_SYSTEMUI.equals(namespace)) { @Override
Log.e(TAG, "Received update from DeviceConfig for unrelated namespace: " public void onPropertiesChanged(DeviceConfig.Properties properties) {
+ namespace); if (!DeviceConfig.NAMESPACE_SYSTEMUI.equals(properties.getNamespace())) {
return; Log.e(TAG,
} "Received update from DeviceConfig for unrelated namespace: "
+ properties.getNamespace());
updateConstants(); return;
} }
updateConstants();
}
};
private void updateConstants() { private void updateConstants() {
synchronized (SmartReplyConstants.this) { synchronized (SmartReplyConstants.this) {
@@ -120,7 +129,7 @@ public final class SmartReplyConstants {
mRequiresTargetingP = readDeviceConfigBooleanOrDefaultIfEmpty( mRequiresTargetingP = readDeviceConfigBooleanOrDefaultIfEmpty(
SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P, SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P,
mDefaultRequiresP); mDefaultRequiresP);
mMaxSqueezeRemeasureAttempts = DeviceConfig.getInt( mMaxSqueezeRemeasureAttempts = mDeviceConfig.getInt(
DeviceConfig.NAMESPACE_SYSTEMUI, DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS, SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS,
mDefaultMaxSqueezeRemeasureAttempts); mDefaultMaxSqueezeRemeasureAttempts);
@@ -130,24 +139,24 @@ public final class SmartReplyConstants {
mShowInHeadsUp = readDeviceConfigBooleanOrDefaultIfEmpty( mShowInHeadsUp = readDeviceConfigBooleanOrDefaultIfEmpty(
SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP, SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP,
mDefaultShowInHeadsUp); mDefaultShowInHeadsUp);
mMinNumSystemGeneratedReplies = DeviceConfig.getInt( mMinNumSystemGeneratedReplies = mDeviceConfig.getInt(
DeviceConfig.NAMESPACE_SYSTEMUI, DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_MIN_NUM_SYSTEM_GENERATED_REPLIES, SystemUiDeviceConfigFlags.SSIN_MIN_NUM_SYSTEM_GENERATED_REPLIES,
mDefaultMinNumSystemGeneratedReplies); mDefaultMinNumSystemGeneratedReplies);
mMaxNumActions = DeviceConfig.getInt( mMaxNumActions = mDeviceConfig.getInt(
DeviceConfig.NAMESPACE_SYSTEMUI, DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_MAX_NUM_ACTIONS, SystemUiDeviceConfigFlags.SSIN_MAX_NUM_ACTIONS,
mDefaultMaxNumActions); mDefaultMaxNumActions);
mOnClickInitDelay = DeviceConfig.getInt( mOnClickInitDelay = mDeviceConfig.getInt(
DeviceConfig.NAMESPACE_SYSTEMUI, DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_ONCLICK_INIT_DELAY, SystemUiDeviceConfigFlags.SSIN_ONCLICK_INIT_DELAY,
mDefaultOnClickInitDelay); mDefaultOnClickInitDelay);
} }
} }
private static boolean readDeviceConfigBooleanOrDefaultIfEmpty(String propertyName, private boolean readDeviceConfigBooleanOrDefaultIfEmpty(String propertyName,
boolean defaultValue) { boolean defaultValue) {
String value = DeviceConfig.getProperty(DeviceConfig.NAMESPACE_SYSTEMUI, propertyName); String value = mDeviceConfig.getProperty(DeviceConfig.NAMESPACE_SYSTEMUI, propertyName);
if (TextUtils.isEmpty(value)) { if (TextUtils.isEmpty(value)) {
return defaultValue; return defaultValue;
} }

View File

@@ -44,6 +44,8 @@ import com.android.systemui.classifier.FalsingManagerFake;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
import com.android.systemui.statusbar.phone.NotificationShadeWindowController; import com.android.systemui.statusbar.phone.NotificationShadeWindowController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.DeviceConfigProxyFake;
import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.time.FakeSystemClock;
@@ -69,6 +71,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
private @Mock DumpManager mDumpManager; private @Mock DumpManager mDumpManager;
private @Mock PowerManager mPowerManager; private @Mock PowerManager mPowerManager;
private @Mock TrustManager mTrustManager; private @Mock TrustManager mTrustManager;
private DeviceConfigProxy mDeviceConfig = new DeviceConfigProxyFake();
private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
private FalsingManagerFake mFalsingManager; private FalsingManagerFake mFalsingManager;
@@ -85,7 +88,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
mContext, mFalsingManager, mLockPatternUtils, mBroadcastDispatcher, mContext, mFalsingManager, mLockPatternUtils, mBroadcastDispatcher,
mNotificationShadeWindowController, () -> mStatusBarKeyguardViewManager, mNotificationShadeWindowController, () -> mStatusBarKeyguardViewManager,
mDismissCallbackRegistry, mUpdateMonitor, mDumpManager, mUiBgExecutor, mDismissCallbackRegistry, mUpdateMonitor, mDumpManager, mUiBgExecutor,
mPowerManager, mTrustManager); mPowerManager, mTrustManager, mDeviceConfig);
mViewMediator.start(); mViewMediator.start();
} }

View File

@@ -21,6 +21,7 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.argThat; import static org.mockito.Matchers.argThat;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
@@ -28,6 +29,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName; import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -37,7 +39,6 @@ import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback; import android.net.ConnectivityManager.NetworkCallback;
import android.net.NetworkRequest; import android.net.NetworkRequest;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.os.UserManager; import android.os.UserManager;
import android.security.IKeyChainService; import android.security.IKeyChainService;
import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.SmallTest;
@@ -46,34 +47,30 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.statusbar.policy.SecurityController.SecurityControllerCallback; import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@SmallTest @SmallTest
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class SecurityControllerTest extends SysuiTestCase implements SecurityControllerCallback { public class SecurityControllerTest extends SysuiTestCase {
private final DevicePolicyManager mDevicePolicyManager = mock(DevicePolicyManager.class); private final DevicePolicyManager mDevicePolicyManager = mock(DevicePolicyManager.class);
private final IKeyChainService.Stub mKeyChainService = mock(IKeyChainService.Stub.class); private final IKeyChainService.Stub mKeyChainService = mock(IKeyChainService.Stub.class);
private final UserManager mUserManager = mock(UserManager.class); private final UserManager mUserManager = mock(UserManager.class);
private final BroadcastDispatcher mBroadcastDispatcher = mock(BroadcastDispatcher.class);
private final Handler mHandler = mock(Handler.class);
private SecurityControllerImpl mSecurityController; private SecurityControllerImpl mSecurityController;
private CountDownLatch mStateChangedLatch;
private ConnectivityManager mConnectivityManager = mock(ConnectivityManager.class); private ConnectivityManager mConnectivityManager = mock(ConnectivityManager.class);
private FakeExecutor mBgExecutor;
// implementing SecurityControllerCallback private BroadcastReceiver mBroadcastReceiver;
@Override
public void onStateChanged() {
mStateChangedLatch.countDown();
}
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
@@ -95,18 +92,23 @@ public class SecurityControllerTest extends SysuiTestCase implements SecurityCon
when(mKeyChainService.queryLocalInterface("android.security.IKeyChainService")) when(mKeyChainService.queryLocalInterface("android.security.IKeyChainService"))
.thenReturn(mKeyChainService); .thenReturn(mKeyChainService);
// Wait for callbacks from the onUserSwitched() function in the ArgumentCaptor<BroadcastReceiver> brCaptor =
// constructor of mSecurityController ArgumentCaptor.forClass(BroadcastReceiver.class);
mStateChangedLatch = new CountDownLatch(1);
// TODO: Migrate this test to TestableLooper and use a handler attached
// to that.
mSecurityController = new SecurityControllerImpl(mContext,
new Handler(Looper.getMainLooper()), mock(BroadcastDispatcher.class), this);
}
@After mBgExecutor = new FakeExecutor(new FakeSystemClock());
public void tearDown() { mSecurityController = new SecurityControllerImpl(
mSecurityController.removeCallback(this); mContext,
mHandler,
mBroadcastDispatcher,
mBgExecutor);
verify(mBroadcastDispatcher).registerReceiverWithHandler(
brCaptor.capture(),
anyObject(),
anyObject(),
anyObject());
mBroadcastReceiver = brCaptor.getValue();
} }
@Test @Test
@@ -126,8 +128,6 @@ public class SecurityControllerTest extends SysuiTestCase implements SecurityCon
@Test @Test
public void testWorkAccount() throws Exception { public void testWorkAccount() throws Exception {
// Wait for the callbacks from setUp()
assertTrue(mStateChangedLatch.await(1, TimeUnit.SECONDS));
assertFalse(mSecurityController.hasCACertInCurrentUser()); assertFalse(mSecurityController.hasCACertInCurrentUser());
final int PRIMARY_USER_ID = 0; final int PRIMARY_USER_ID = 0;
@@ -140,53 +140,41 @@ public class SecurityControllerTest extends SysuiTestCase implements SecurityCon
assertTrue(mSecurityController.hasWorkProfile()); assertTrue(mSecurityController.hasWorkProfile());
assertFalse(mSecurityController.hasCACertInWorkProfile()); assertFalse(mSecurityController.hasCACertInWorkProfile());
mStateChangedLatch = new CountDownLatch(1);
when(mKeyChainService.getUserCaAliases()) when(mKeyChainService.getUserCaAliases())
.thenReturn(new StringParceledListSlice(Arrays.asList("One CA Alias"))); .thenReturn(new StringParceledListSlice(Arrays.asList("One CA Alias")));
mSecurityController.new CACertLoader() refreshCACerts(MANAGED_USER_ID);
.execute(MANAGED_USER_ID); mBgExecutor.runAllReady();
assertTrue(mStateChangedLatch.await(3, TimeUnit.SECONDS));
assertTrue(mSecurityController.hasCACertInWorkProfile()); assertTrue(mSecurityController.hasCACertInWorkProfile());
} }
@Test @Test
public void testCaCertLoader() throws Exception { public void testCaCertLoader() throws Exception {
// Wait for the callbacks from setUp()
assertTrue(mStateChangedLatch.await(1, TimeUnit.SECONDS));
assertFalse(mSecurityController.hasCACertInCurrentUser()); assertFalse(mSecurityController.hasCACertInCurrentUser());
// With a CA cert // With a CA cert
mStateChangedLatch = new CountDownLatch(1);
when(mKeyChainService.getUserCaAliases()) when(mKeyChainService.getUserCaAliases())
.thenReturn(new StringParceledListSlice(Arrays.asList("One CA Alias"))); .thenReturn(new StringParceledListSlice(Arrays.asList("One CA Alias")));
mSecurityController.new CACertLoader() refreshCACerts(0);
.execute(0); mBgExecutor.runAllReady();
assertTrue(mStateChangedLatch.await(3, TimeUnit.SECONDS));
assertTrue(mSecurityController.hasCACertInCurrentUser()); assertTrue(mSecurityController.hasCACertInCurrentUser());
// Exception // Exception
mStateChangedLatch = new CountDownLatch(1);
when(mKeyChainService.getUserCaAliases()) when(mKeyChainService.getUserCaAliases())
.thenThrow(new AssertionError("Test AssertionError")) .thenThrow(new AssertionError("Test AssertionError"))
.thenReturn(new StringParceledListSlice(new ArrayList<String>())); .thenReturn(new StringParceledListSlice(new ArrayList<String>()));
mSecurityController.new CACertLoader() refreshCACerts(0);
.execute(0); mBgExecutor.runAllReady();
assertFalse(mStateChangedLatch.await(1, TimeUnit.SECONDS));
assertTrue(mSecurityController.hasCACertInCurrentUser()); assertTrue(mSecurityController.hasCACertInCurrentUser());
mSecurityController.new CACertLoader() refreshCACerts(0);
.execute(0); mBgExecutor.runAllReady();
assertTrue(mStateChangedLatch.await(1, TimeUnit.SECONDS));
assertFalse(mSecurityController.hasCACertInCurrentUser()); assertFalse(mSecurityController.hasCACertInCurrentUser());
} }
@@ -197,4 +185,13 @@ public class SecurityControllerTest extends SysuiTestCase implements SecurityCon
&& request.networkCapabilities.getCapabilities().length == 0 && request.networkCapabilities.getCapabilities().length == 0
), any(NetworkCallback.class)); ), any(NetworkCallback.class));
} }
/**
* refresh CA certs by sending a user unlocked broadcast for the desired user
*/
private void refreshCACerts(int userId) {
Intent intent = new Intent(Intent.ACTION_USER_UNLOCKED);
intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
mBroadcastReceiver.onReceive(mContext, intent);
}
} }

View File

@@ -22,7 +22,6 @@ import static junit.framework.Assert.assertTrue;
import android.app.RemoteInput; import android.app.RemoteInput;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.provider.DeviceConfig; import android.provider.DeviceConfig;
import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
@@ -32,8 +31,8 @@ import android.testing.TestableResources;
import com.android.internal.config.sysui.SystemUiDeviceConfigFlags; import com.android.internal.config.sysui.SystemUiDeviceConfigFlags;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.util.DeviceConfigProxyFake;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@@ -42,14 +41,13 @@ import org.junit.runner.RunWith;
@TestableLooper.RunWithLooper @TestableLooper.RunWithLooper
@SmallTest @SmallTest
public class SmartReplyConstantsTest extends SysuiTestCase { public class SmartReplyConstantsTest extends SysuiTestCase {
private static final int CONTENT_OBSERVER_TIMEOUT_SECONDS = 10;
private SmartReplyConstants mConstants; private SmartReplyConstants mConstants;
private DeviceConfigProxyFake mDeviceConfig;
private TestableLooper mTestableLooper;
@Before @Before
public void setUp() { public void setUp() {
resetAllDeviceConfigFlags(); mDeviceConfig = new DeviceConfigProxyFake();
TestableResources resources = mContext.getOrCreateTestableResources(); TestableResources resources = mContext.getOrCreateTestableResources();
resources.addOverride(R.bool.config_smart_replies_in_notifications_enabled, true); resources.addOverride(R.bool.config_smart_replies_in_notifications_enabled, true);
resources.addOverride( resources.addOverride(
@@ -62,12 +60,12 @@ public class SmartReplyConstantsTest extends SysuiTestCase {
2); 2);
resources.addOverride( resources.addOverride(
R.integer.config_smart_replies_in_notifications_max_num_actions, -1); R.integer.config_smart_replies_in_notifications_max_num_actions, -1);
mConstants = new SmartReplyConstants(Handler.createAsync(Looper.myLooper()), mContext); mTestableLooper = TestableLooper.get(this);
} mConstants = new SmartReplyConstants(
new Handler(mTestableLooper.getLooper()),
@After mContext,
public void tearDown() { mDeviceConfig
resetAllDeviceConfigFlags(); );
} }
@Test @Test
@@ -78,25 +76,21 @@ public class SmartReplyConstantsTest extends SysuiTestCase {
@Test @Test
public void testIsEnabledWithInvalidConfig() { public void testIsEnabledWithInvalidConfig() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_ENABLED, "invalid config"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_ENABLED, "invalid config");
triggerConstantsOnChange();
assertTrue(mConstants.isEnabled()); assertTrue(mConstants.isEnabled());
} }
@Test @Test
public void testIsEnabledWithValidConfig() { public void testIsEnabledWithValidConfig() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_ENABLED, "false"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_ENABLED, "false");
triggerConstantsOnChange();
assertFalse(mConstants.isEnabled()); assertFalse(mConstants.isEnabled());
} }
@Test @Test
public void testRequiresTargetingPConfig() { public void testRequiresTargetingPConfig() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P, "false"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P, "false");
triggerConstantsOnChange();
assertEquals(false, mConstants.requiresTargetingP()); assertEquals(false, mConstants.requiresTargetingP());
overrideSetting(SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P, null); overrideSetting(SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P, null);
triggerConstantsOnChange();
assertEquals(true, mConstants.requiresTargetingP()); assertEquals(true, mConstants.requiresTargetingP());
} }
@@ -110,20 +104,17 @@ public class SmartReplyConstantsTest extends SysuiTestCase {
public void testGetMaxSqueezeRemeasureAttemptsWithInvalidConfig() { public void testGetMaxSqueezeRemeasureAttemptsWithInvalidConfig() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS, overrideSetting(SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS,
"invalid config"); "invalid config");
triggerConstantsOnChange();
assertEquals(7, mConstants.getMaxSqueezeRemeasureAttempts()); assertEquals(7, mConstants.getMaxSqueezeRemeasureAttempts());
} }
@Test @Test
public void testGetMaxSqueezeRemeasureAttemptsWithValidConfig() { public void testGetMaxSqueezeRemeasureAttemptsWithValidConfig() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS, "5"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS, "5");
triggerConstantsOnChange();
assertEquals(5, mConstants.getMaxSqueezeRemeasureAttempts()); assertEquals(5, mConstants.getMaxSqueezeRemeasureAttempts());
} }
@Test @Test
public void testGetEffectiveEditChoicesBeforeSendingWithNoConfig() { public void testGetEffectiveEditChoicesBeforeSendingWithNoConfig() {
triggerConstantsOnChange();
assertFalse( assertFalse(
mConstants.getEffectiveEditChoicesBeforeSending( mConstants.getEffectiveEditChoicesBeforeSending(
RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO)); RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO));
@@ -138,7 +129,6 @@ public class SmartReplyConstantsTest extends SysuiTestCase {
@Test @Test
public void testGetEffectiveEditChoicesBeforeSendingWithEnabledConfig() { public void testGetEffectiveEditChoicesBeforeSendingWithEnabledConfig() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_EDIT_CHOICES_BEFORE_SENDING, "true"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_EDIT_CHOICES_BEFORE_SENDING, "true");
triggerConstantsOnChange();
assertTrue( assertTrue(
mConstants.getEffectiveEditChoicesBeforeSending( mConstants.getEffectiveEditChoicesBeforeSending(
RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO)); RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO));
@@ -153,7 +143,6 @@ public class SmartReplyConstantsTest extends SysuiTestCase {
@Test @Test
public void testGetEffectiveEditChoicesBeforeSendingWithDisabledConfig() { public void testGetEffectiveEditChoicesBeforeSendingWithDisabledConfig() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_EDIT_CHOICES_BEFORE_SENDING, "false"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_EDIT_CHOICES_BEFORE_SENDING, "false");
triggerConstantsOnChange();
assertFalse( assertFalse(
mConstants.getEffectiveEditChoicesBeforeSending( mConstants.getEffectiveEditChoicesBeforeSending(
RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO)); RemoteInput.EDIT_CHOICES_BEFORE_SENDING_AUTO));
@@ -174,14 +163,12 @@ public class SmartReplyConstantsTest extends SysuiTestCase {
@Test @Test
public void testShowInHeadsUpEnabled() { public void testShowInHeadsUpEnabled() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP, "true"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP, "true");
triggerConstantsOnChange();
assertTrue(mConstants.getShowInHeadsUp()); assertTrue(mConstants.getShowInHeadsUp());
} }
@Test @Test
public void testShowInHeadsUpDisabled() { public void testShowInHeadsUpDisabled() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP, "false"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP, "false");
triggerConstantsOnChange();
assertFalse(mConstants.getShowInHeadsUp()); assertFalse(mConstants.getShowInHeadsUp());
} }
@@ -194,7 +181,6 @@ public class SmartReplyConstantsTest extends SysuiTestCase {
@Test @Test
public void testGetMinNumSystemGeneratedRepliesWithValidConfig() { public void testGetMinNumSystemGeneratedRepliesWithValidConfig() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_MIN_NUM_SYSTEM_GENERATED_REPLIES, "5"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_MIN_NUM_SYSTEM_GENERATED_REPLIES, "5");
triggerConstantsOnChange();
assertEquals(5, mConstants.getMinNumSystemGeneratedReplies()); assertEquals(5, mConstants.getMinNumSystemGeneratedReplies());
} }
@@ -207,7 +193,6 @@ public class SmartReplyConstantsTest extends SysuiTestCase {
@Test @Test
public void testMaxNumActionsSet() { public void testMaxNumActionsSet() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_MAX_NUM_ACTIONS, "10"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_MAX_NUM_ACTIONS, "10");
triggerConstantsOnChange();
assertEquals(10, mConstants.getMaxNumActions()); assertEquals(10, mConstants.getMaxNumActions());
} }
@@ -219,38 +204,12 @@ public class SmartReplyConstantsTest extends SysuiTestCase {
@Test @Test
public void testOnClickInitDelaySet() { public void testOnClickInitDelaySet() {
overrideSetting(SystemUiDeviceConfigFlags.SSIN_ONCLICK_INIT_DELAY, "50"); overrideSetting(SystemUiDeviceConfigFlags.SSIN_ONCLICK_INIT_DELAY, "50");
triggerConstantsOnChange();
assertEquals(50, mConstants.getOnClickInitDelay()); assertEquals(50, mConstants.getOnClickInitDelay());
} }
private void overrideSetting(String propertyName, String value) { private void overrideSetting(String propertyName, String value) {
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI, mDeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
propertyName, value, false /* makeDefault */); propertyName, value, false /* makeDefault */);
} mTestableLooper.processAllMessages();
private void triggerConstantsOnChange() {
mConstants.onDeviceConfigPropertiesChanged(DeviceConfig.NAMESPACE_SYSTEMUI);
}
private void resetAllDeviceConfigFlags() {
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_ENABLED, null, false /* makeDefault */);
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_REQUIRES_TARGETING_P, null, false /* makeDefault */);
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_MAX_SQUEEZE_REMEASURE_ATTEMPTS, null,
false /* makeDefault */);
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_EDIT_CHOICES_BEFORE_SENDING, null,
false /* makeDefault */);
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_SHOW_IN_HEADS_UP, null, false /* makeDefault */);
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_MIN_NUM_SYSTEM_GENERATED_REPLIES, null,
false /* makeDefault */);
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_MAX_NUM_ACTIONS, null, false /* makeDefault */);
DeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
SystemUiDeviceConfigFlags.SSIN_ONCLICK_INIT_DELAY, null, false /* makeDefault */);
} }
} }