Merge changes I8ad04753,I59aa77f3 into rvc-dev
* changes: Use a BgExecutor in SecurityControllerImpl Inject DeviceConfig into SystemUI classes
This commit is contained in:
@@ -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() {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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()));
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** */
|
/** */
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 */);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user