Merge "Rename OnProjectionStateChangeListener -> OnProjectionStateChangedListener" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8c62b2ba7c
@@ -56,7 +56,7 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
|
||||
private boolean mDockIdle;
|
||||
private boolean mProjectionActive;
|
||||
private IdlenessListener mIdleListener;
|
||||
private final UiModeManager.OnProjectionStateChangeListener mOnProjectionStateChangeListener =
|
||||
private final UiModeManager.OnProjectionStateChangedListener mOnProjectionStateChangedListener =
|
||||
this::onProjectionStateChanged;
|
||||
|
||||
private AlarmManager.OnAlarmListener mIdleAlarmListener = () -> {
|
||||
@@ -105,9 +105,9 @@ public final class DeviceIdlenessTracker extends BroadcastReceiver implements Id
|
||||
|
||||
// TODO(b/172579710): Move the callbacks off the main executor and on to
|
||||
// JobSchedulerBackgroundThread.getExecutor() once synchronization is fixed in this class.
|
||||
context.getSystemService(UiModeManager.class).addOnProjectionStateChangeListener(
|
||||
context.getSystemService(UiModeManager.class).addOnProjectionStateChangedListener(
|
||||
UiModeManager.PROJECTION_TYPE_ALL, context.getMainExecutor(),
|
||||
mOnProjectionStateChangeListener);
|
||||
mOnProjectionStateChangedListener);
|
||||
}
|
||||
|
||||
private void onProjectionStateChanged(@UiModeManager.ProjectionType int activeProjectionTypes,
|
||||
|
||||
@@ -838,12 +838,12 @@ package android.app {
|
||||
}
|
||||
|
||||
public class UiModeManager {
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public void addOnProjectionStateChangeListener(int, @NonNull java.util.concurrent.Executor, @NonNull android.app.UiModeManager.OnProjectionStateChangeListener);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public void addOnProjectionStateChangedListener(int, @NonNull java.util.concurrent.Executor, @NonNull android.app.UiModeManager.OnProjectionStateChangedListener);
|
||||
method @RequiresPermission(android.Manifest.permission.ENTER_CAR_MODE_PRIORITIZED) public void enableCarMode(@IntRange(from=0) int, int);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public int getActiveProjectionTypes();
|
||||
method @NonNull @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public java.util.Set<java.lang.String> getProjectingPackages(int);
|
||||
method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean releaseProjection(int);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public void removeOnProjectionStateChangeListener(@NonNull android.app.UiModeManager.OnProjectionStateChangeListener);
|
||||
method @RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE) public void removeOnProjectionStateChangedListener(@NonNull android.app.UiModeManager.OnProjectionStateChangedListener);
|
||||
method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean requestProjection(int);
|
||||
field public static final String ACTION_ENTER_CAR_MODE_PRIORITIZED = "android.app.action.ENTER_CAR_MODE_PRIORITIZED";
|
||||
field public static final String ACTION_EXIT_CAR_MODE_PRIORITIZED = "android.app.action.EXIT_CAR_MODE_PRIORITIZED";
|
||||
@@ -855,7 +855,7 @@ package android.app {
|
||||
field public static final int PROJECTION_TYPE_NONE = 0; // 0x0
|
||||
}
|
||||
|
||||
public static interface UiModeManager.OnProjectionStateChangeListener {
|
||||
public static interface UiModeManager.OnProjectionStateChangedListener {
|
||||
method public void onProjectionStateChanged(int, @NonNull java.util.Set<java.lang.String>);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,6 @@
|
||||
package android.app;
|
||||
|
||||
/** {@hide} */
|
||||
oneway interface IOnProjectionStateChangeListener {
|
||||
oneway interface IOnProjectionStateChangedListener {
|
||||
void onProjectionStateChanged(int activeProjectionTypes, in List<String> projectingPackages);
|
||||
}
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package android.app;
|
||||
|
||||
import android.app.IOnProjectionStateChangeListener;
|
||||
import android.app.IOnProjectionStateChangedListener;
|
||||
|
||||
/**
|
||||
* Interface used to control special UI modes.
|
||||
@@ -119,12 +119,12 @@ interface IUiModeManager {
|
||||
/**
|
||||
* Registers a listener for changes to projection state.
|
||||
*/
|
||||
void addOnProjectionStateChangeListener(in IOnProjectionStateChangeListener listener, int projectionType);
|
||||
void addOnProjectionStateChangedListener(in IOnProjectionStateChangedListener listener, int projectionType);
|
||||
|
||||
/**
|
||||
* Unregisters a listener for changes to projection state.
|
||||
*/
|
||||
void removeOnProjectionStateChangeListener(in IOnProjectionStateChangeListener listener);
|
||||
void removeOnProjectionStateChangedListener(in IOnProjectionStateChangedListener listener);
|
||||
|
||||
/**
|
||||
* Returns packages that have currently set the given projection type.
|
||||
|
||||
@@ -79,7 +79,7 @@ public class UiModeManager {
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public interface OnProjectionStateChangeListener {
|
||||
public interface OnProjectionStateChangedListener {
|
||||
/**
|
||||
* Callback invoked when projection state changes for a {@link ProjectionType} for which
|
||||
* this listener was added.
|
||||
@@ -254,10 +254,10 @@ public class UiModeManager {
|
||||
private final Object mLock = new Object();
|
||||
/**
|
||||
* Map that stores internally created {@link InnerListener} objects keyed by their corresponding
|
||||
* externally provided {@link OnProjectionStateChangeListener} objects.
|
||||
* externally provided callback objects.
|
||||
*/
|
||||
@GuardedBy("mLock")
|
||||
private final Map<OnProjectionStateChangeListener, InnerListener>
|
||||
private final Map<OnProjectionStateChangedListener, InnerListener>
|
||||
mProjectionStateListenerMap = new ArrayMap<>();
|
||||
|
||||
/**
|
||||
@@ -265,9 +265,9 @@ public class UiModeManager {
|
||||
* fail to remove listeners.
|
||||
*/
|
||||
@GuardedBy("mLock")
|
||||
private final OnProjectionStateChangeListenerResourceManager
|
||||
mOnProjectionStateChangeListenerResourceManager =
|
||||
new OnProjectionStateChangeListenerResourceManager();
|
||||
private final OnProjectionStateChangedListenerResourceManager
|
||||
mOnProjectionStateChangedListenerResourceManager =
|
||||
new OnProjectionStateChangedListenerResourceManager();
|
||||
|
||||
@UnsupportedAppUsage
|
||||
/*package*/ UiModeManager() throws ServiceNotFoundException {
|
||||
@@ -687,7 +687,7 @@ public class UiModeManager {
|
||||
|
||||
/**
|
||||
* Indicates no projection type. Can be used to compare with the {@link ProjectionType} in
|
||||
* {@link OnProjectionStateChangeListener#onProjectionStateChanged(int, Set)}.
|
||||
* {@link OnProjectionStateChangedListener#onProjectionStateChanged(int, Set)}.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@@ -706,7 +706,7 @@ public class UiModeManager {
|
||||
public static final int PROJECTION_TYPE_AUTOMOTIVE = 0x0001;
|
||||
/**
|
||||
* Indicates all projection types. For use with
|
||||
* {@link #addOnProjectionStateChangeListener(int, Executor, OnProjectionStateChangeListener)}
|
||||
* {@link #addOnProjectionStateChangedListener(int, Executor, OnProjectionStateChangedListener)}
|
||||
* and {@link #getProjectingPackages(int)}.
|
||||
*
|
||||
* @hide
|
||||
@@ -829,15 +829,15 @@ public class UiModeManager {
|
||||
*
|
||||
* @param projectionType one or more {@link ProjectionType}s to listen for changes regarding
|
||||
* @param executor an {@link Executor} on which to invoke the callbacks
|
||||
* @param listener the {@link OnProjectionStateChangeListener} to add
|
||||
* @param listener the {@link OnProjectionStateChangedListener} to add
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE)
|
||||
public void addOnProjectionStateChangeListener(@ProjectionType int projectionType,
|
||||
public void addOnProjectionStateChangedListener(@ProjectionType int projectionType,
|
||||
@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull OnProjectionStateChangeListener listener) {
|
||||
@NonNull OnProjectionStateChangedListener listener) {
|
||||
synchronized (mLock) {
|
||||
if (mProjectionStateListenerMap.containsKey(listener)) {
|
||||
Slog.i(TAG, "Attempted to add listener that was already added.");
|
||||
@@ -845,12 +845,12 @@ public class UiModeManager {
|
||||
}
|
||||
if (mService != null) {
|
||||
InnerListener innerListener = new InnerListener(executor, listener,
|
||||
mOnProjectionStateChangeListenerResourceManager);
|
||||
mOnProjectionStateChangedListenerResourceManager);
|
||||
try {
|
||||
mService.addOnProjectionStateChangeListener(innerListener, projectionType);
|
||||
mService.addOnProjectionStateChangedListener(innerListener, projectionType);
|
||||
mProjectionStateListenerMap.put(listener, innerListener);
|
||||
} catch (RemoteException e) {
|
||||
mOnProjectionStateChangeListenerResourceManager.remove(innerListener);
|
||||
mOnProjectionStateChangedListenerResourceManager.remove(innerListener);
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
@@ -860,14 +860,14 @@ public class UiModeManager {
|
||||
/**
|
||||
* Removes the listener so it stops receiving updates for all {@link ProjectionType}s.
|
||||
*
|
||||
* @param listener the {@link OnProjectionStateChangeListener} to remove
|
||||
* @param listener the {@link OnProjectionStateChangedListener} to remove
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(android.Manifest.permission.READ_PROJECTION_STATE)
|
||||
public void removeOnProjectionStateChangeListener(
|
||||
@NonNull OnProjectionStateChangeListener listener) {
|
||||
public void removeOnProjectionStateChangedListener(
|
||||
@NonNull OnProjectionStateChangedListener listener) {
|
||||
synchronized (mLock) {
|
||||
InnerListener innerListener = mProjectionStateListenerMap.get(listener);
|
||||
if (innerListener == null) {
|
||||
@@ -876,23 +876,23 @@ public class UiModeManager {
|
||||
}
|
||||
if (mService != null) {
|
||||
try {
|
||||
mService.removeOnProjectionStateChangeListener(innerListener);
|
||||
mService.removeOnProjectionStateChangedListener(innerListener);
|
||||
} catch (RemoteException e) {
|
||||
throw e.rethrowFromSystemServer();
|
||||
}
|
||||
}
|
||||
mProjectionStateListenerMap.remove(listener);
|
||||
mOnProjectionStateChangeListenerResourceManager.remove(innerListener);
|
||||
mOnProjectionStateChangedListenerResourceManager.remove(innerListener);
|
||||
}
|
||||
}
|
||||
|
||||
private static class InnerListener extends IOnProjectionStateChangeListener.Stub {
|
||||
private final WeakReference<OnProjectionStateChangeListenerResourceManager>
|
||||
private static class InnerListener extends IOnProjectionStateChangedListener.Stub {
|
||||
private final WeakReference<OnProjectionStateChangedListenerResourceManager>
|
||||
mResourceManager;
|
||||
|
||||
private InnerListener(@NonNull Executor executor,
|
||||
@NonNull OnProjectionStateChangeListener outerListener,
|
||||
@NonNull OnProjectionStateChangeListenerResourceManager resourceManager) {
|
||||
@NonNull OnProjectionStateChangedListener outerListener,
|
||||
@NonNull OnProjectionStateChangedListenerResourceManager resourceManager) {
|
||||
resourceManager.put(this, executor, outerListener);
|
||||
mResourceManager = new WeakReference<>(resourceManager);
|
||||
}
|
||||
@@ -900,13 +900,14 @@ public class UiModeManager {
|
||||
@Override
|
||||
public void onProjectionStateChanged(int activeProjectionTypes,
|
||||
List<String> projectingPackages) {
|
||||
OnProjectionStateChangeListenerResourceManager resourceManager = mResourceManager.get();
|
||||
OnProjectionStateChangedListenerResourceManager resourceManager =
|
||||
mResourceManager.get();
|
||||
if (resourceManager == null) {
|
||||
Slog.w(TAG, "Can't execute onProjectionStateChanged, resource manager is gone.");
|
||||
return;
|
||||
}
|
||||
|
||||
OnProjectionStateChangeListener outerListener = resourceManager.getOuterListener(this);
|
||||
OnProjectionStateChangedListener outerListener = resourceManager.getOuterListener(this);
|
||||
Executor executor = resourceManager.getExecutor(this);
|
||||
if (outerListener == null || executor == null) {
|
||||
Slog.w(TAG, "Can't execute onProjectionStatechanged, references are null.");
|
||||
@@ -914,7 +915,7 @@ public class UiModeManager {
|
||||
}
|
||||
|
||||
executor.execute(PooledLambda.obtainRunnable(
|
||||
OnProjectionStateChangeListener::onProjectionStateChanged,
|
||||
OnProjectionStateChangedListener::onProjectionStateChanged,
|
||||
outerListener,
|
||||
activeProjectionTypes,
|
||||
new ArraySet<>(projectingPackages)).recycleOnUse());
|
||||
@@ -924,15 +925,15 @@ public class UiModeManager {
|
||||
/**
|
||||
* Wrapper class that ensures we don't leak {@link Activity} or other large {@link Context} in
|
||||
* which this {@link UiModeManager} resides if/when it ends without unregistering associated
|
||||
* {@link OnProjectionStateChangeListener}s.
|
||||
* callback objects.
|
||||
*/
|
||||
private static class OnProjectionStateChangeListenerResourceManager {
|
||||
private final Map<InnerListener, OnProjectionStateChangeListener> mOuterListenerMap =
|
||||
private static class OnProjectionStateChangedListenerResourceManager {
|
||||
private final Map<InnerListener, OnProjectionStateChangedListener> mOuterListenerMap =
|
||||
new ArrayMap<>(1);
|
||||
private final Map<InnerListener, Executor> mExecutorMap = new ArrayMap<>(1);
|
||||
|
||||
void put(@NonNull InnerListener innerListener, @NonNull Executor executor,
|
||||
OnProjectionStateChangeListener outerListener) {
|
||||
OnProjectionStateChangedListener outerListener) {
|
||||
mOuterListenerMap.put(innerListener, outerListener);
|
||||
mExecutorMap.put(innerListener, executor);
|
||||
}
|
||||
@@ -942,7 +943,7 @@ public class UiModeManager {
|
||||
mExecutorMap.remove(innerListener);
|
||||
}
|
||||
|
||||
OnProjectionStateChangeListener getOuterListener(@NonNull InnerListener innerListener) {
|
||||
OnProjectionStateChangedListener getOuterListener(@NonNull InnerListener innerListener) {
|
||||
return mOuterListenerMap.get(innerListener);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ import android.app.Activity;
|
||||
import android.app.ActivityManager;
|
||||
import android.app.ActivityTaskManager;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.IOnProjectionStateChangeListener;
|
||||
import android.app.IOnProjectionStateChangedListener;
|
||||
import android.app.IUiModeManager;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
@@ -181,7 +181,7 @@ final class UiModeManagerService extends SystemService {
|
||||
private SparseArray<List<ProjectionHolder>> mProjectionHolders;
|
||||
@GuardedBy("mLock")
|
||||
@Nullable
|
||||
private SparseArray<RemoteCallbackList<IOnProjectionStateChangeListener>> mProjectionListeners;
|
||||
private SparseArray<RemoteCallbackList<IOnProjectionStateChangedListener>> mProjectionListeners;
|
||||
|
||||
public UiModeManagerService(Context context) {
|
||||
this(context, /* setupWizardComplete= */ false, /* tm= */ null, new Injector());
|
||||
@@ -993,11 +993,11 @@ final class UiModeManagerService extends SystemService {
|
||||
}
|
||||
}
|
||||
|
||||
public void addOnProjectionStateChangeListener(IOnProjectionStateChangeListener listener,
|
||||
public void addOnProjectionStateChangedListener(IOnProjectionStateChangedListener listener,
|
||||
@UiModeManager.ProjectionType int projectionType) {
|
||||
getContext().enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.READ_PROJECTION_STATE,
|
||||
"registerProjectionStateListener");
|
||||
"addOnProjectionStateChangedListener");
|
||||
if (projectionType == PROJECTION_TYPE_NONE) {
|
||||
return;
|
||||
}
|
||||
@@ -1027,11 +1027,11 @@ final class UiModeManagerService extends SystemService {
|
||||
}
|
||||
|
||||
|
||||
public void removeOnProjectionStateChangeListener(
|
||||
IOnProjectionStateChangeListener listener) {
|
||||
public void removeOnProjectionStateChangedListener(
|
||||
IOnProjectionStateChangedListener listener) {
|
||||
getContext().enforceCallingOrSelfPermission(
|
||||
android.Manifest.permission.READ_PROJECTION_STATE,
|
||||
"unregisterProjectionStateListener");
|
||||
"removeOnProjectionStateChangedListener");
|
||||
synchronized (mLock) {
|
||||
if (mProjectionListeners != null) {
|
||||
for (int i = 0; i < mProjectionListeners.size(); ++i) {
|
||||
@@ -1191,7 +1191,7 @@ final class UiModeManagerService extends SystemService {
|
||||
// Every listener that is affected must be called back with all the state they are
|
||||
// listening for.
|
||||
if ((changedProjectionType & listenerProjectionType) != 0) {
|
||||
RemoteCallbackList<IOnProjectionStateChangeListener> listeners =
|
||||
RemoteCallbackList<IOnProjectionStateChangedListener> listeners =
|
||||
mProjectionListeners.valueAt(i);
|
||||
List<String> packageNames = new ArrayList<>();
|
||||
@UiModeManager.ProjectionType int activeProjectionTypes =
|
||||
|
||||
@@ -256,7 +256,7 @@ public class BatterySaverPolicy extends ContentObserver implements
|
||||
private final ContentResolver mContentResolver;
|
||||
private final BatterySavingStats mBatterySavingStats;
|
||||
|
||||
private final UiModeManager.OnProjectionStateChangeListener mOnProjectionStateChangeListener =
|
||||
private final UiModeManager.OnProjectionStateChangedListener mOnProjectionStateChangedListener =
|
||||
(t, pkgs) -> mAutomotiveProjectionActive.update(!pkgs.isEmpty());
|
||||
|
||||
@GuardedBy("mLock")
|
||||
@@ -292,8 +292,8 @@ public class BatterySaverPolicy extends ContentObserver implements
|
||||
mAccessibilityEnabled.initialize(acm.isEnabled());
|
||||
|
||||
UiModeManager uiModeManager = mContext.getSystemService(UiModeManager.class);
|
||||
uiModeManager.addOnProjectionStateChangeListener(UiModeManager.PROJECTION_TYPE_AUTOMOTIVE,
|
||||
mContext.getMainExecutor(), mOnProjectionStateChangeListener);
|
||||
uiModeManager.addOnProjectionStateChangedListener(UiModeManager.PROJECTION_TYPE_AUTOMOTIVE,
|
||||
mContext.getMainExecutor(), mOnProjectionStateChangedListener);
|
||||
mAutomotiveProjectionActive.initialize(
|
||||
uiModeManager.getActiveProjectionTypes() != UiModeManager.PROJECTION_TYPE_NONE);
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ import static org.testng.Assert.assertThrows;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.IOnProjectionStateChangeListener;
|
||||
import android.app.IOnProjectionStateChangedListener;
|
||||
import android.app.IUiModeManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.ContentResolver;
|
||||
@@ -669,46 +669,46 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addOnProjectionStateChangeListener_enforcesReadProjStatePermission() {
|
||||
public void addOnProjectionStateChangedListener_enforcesReadProjStatePermission() {
|
||||
doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
|
||||
eq(android.Manifest.permission.READ_PROJECTION_STATE), any());
|
||||
IOnProjectionStateChangeListener listener = mock(IOnProjectionStateChangeListener.class);
|
||||
IOnProjectionStateChangedListener listener = mock(IOnProjectionStateChangedListener.class);
|
||||
|
||||
assertThrows(SecurityException.class, () -> mService.addOnProjectionStateChangeListener(
|
||||
assertThrows(SecurityException.class, () -> mService.addOnProjectionStateChangedListener(
|
||||
listener, PROJECTION_TYPE_ALL));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addOnProjectionStateChangeListener_callsListenerIfProjectionActive()
|
||||
public void addOnProjectionStateChangedListener_callsListenerIfProjectionActive()
|
||||
throws Exception {
|
||||
when(mPackageManager.getPackageUid(PACKAGE_NAME, 0)).thenReturn(TestInjector.CALLING_UID);
|
||||
mService.requestProjection(mBinder, PROJECTION_TYPE_AUTOMOTIVE, PACKAGE_NAME);
|
||||
assertEquals(PROJECTION_TYPE_AUTOMOTIVE, mService.getActiveProjectionTypes());
|
||||
|
||||
IOnProjectionStateChangeListener listener = mock(IOnProjectionStateChangeListener.class);
|
||||
IOnProjectionStateChangedListener listener = mock(IOnProjectionStateChangedListener.class);
|
||||
when(listener.asBinder()).thenReturn(mBinder); // Any binder will do
|
||||
mService.addOnProjectionStateChangeListener(listener, PROJECTION_TYPE_ALL);
|
||||
mService.addOnProjectionStateChangedListener(listener, PROJECTION_TYPE_ALL);
|
||||
verify(listener).onProjectionStateChanged(eq(PROJECTION_TYPE_AUTOMOTIVE),
|
||||
eq(List.of(PACKAGE_NAME)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void removeOnProjectionStateChangeListener_enforcesReadProjStatePermission() {
|
||||
public void removeOnProjectionStateChangedListener_enforcesReadProjStatePermission() {
|
||||
doThrow(new SecurityException()).when(mContext).enforceCallingOrSelfPermission(
|
||||
eq(android.Manifest.permission.READ_PROJECTION_STATE), any());
|
||||
IOnProjectionStateChangeListener listener = mock(IOnProjectionStateChangeListener.class);
|
||||
IOnProjectionStateChangedListener listener = mock(IOnProjectionStateChangedListener.class);
|
||||
|
||||
assertThrows(SecurityException.class, () -> mService.removeOnProjectionStateChangeListener(
|
||||
assertThrows(SecurityException.class, () -> mService.removeOnProjectionStateChangedListener(
|
||||
listener));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void removeOnProjectionStateChangeListener() throws Exception {
|
||||
IOnProjectionStateChangeListener listener = mock(IOnProjectionStateChangeListener.class);
|
||||
public void removeOnProjectionStateChangedListener() throws Exception {
|
||||
IOnProjectionStateChangedListener listener = mock(IOnProjectionStateChangedListener.class);
|
||||
when(listener.asBinder()).thenReturn(mBinder); // Any binder will do.
|
||||
mService.addOnProjectionStateChangeListener(listener, PROJECTION_TYPE_ALL);
|
||||
mService.addOnProjectionStateChangedListener(listener, PROJECTION_TYPE_ALL);
|
||||
|
||||
mService.removeOnProjectionStateChangeListener(listener);
|
||||
mService.removeOnProjectionStateChangedListener(listener);
|
||||
// Now set automotive projection, should not call back.
|
||||
when(mPackageManager.getPackageUid(PACKAGE_NAME, 0)).thenReturn(TestInjector.CALLING_UID);
|
||||
mService.requestProjection(mBinder, PROJECTION_TYPE_AUTOMOTIVE, PACKAGE_NAME);
|
||||
@@ -716,10 +716,10 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void projectionStateChangeListener_calledWhenStateChanges() throws Exception {
|
||||
IOnProjectionStateChangeListener listener = mock(IOnProjectionStateChangeListener.class);
|
||||
public void projectionStateChangedListener_calledWhenStateChanges() throws Exception {
|
||||
IOnProjectionStateChangedListener listener = mock(IOnProjectionStateChangedListener.class);
|
||||
when(listener.asBinder()).thenReturn(mBinder); // Any binder will do.
|
||||
mService.addOnProjectionStateChangeListener(listener, PROJECTION_TYPE_ALL);
|
||||
mService.addOnProjectionStateChangedListener(listener, PROJECTION_TYPE_ALL);
|
||||
verify(listener, atLeastOnce()).asBinder(); // Called twice during register.
|
||||
|
||||
// No calls initially, no projection state set.
|
||||
@@ -748,19 +748,19 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void projectionStateChangeListener_calledForAnyRelevantStateChange() throws Exception {
|
||||
public void projectionStateChangedListener_calledForAnyRelevantStateChange() throws Exception {
|
||||
int fakeProjectionType = 0x0002;
|
||||
int otherFakeProjectionType = 0x0004;
|
||||
String otherPackageName = "Internet Arms";
|
||||
when(mPackageManager.getPackageUid(PACKAGE_NAME, 0)).thenReturn(TestInjector.CALLING_UID);
|
||||
when(mPackageManager.getPackageUid(otherPackageName, 0))
|
||||
.thenReturn(TestInjector.CALLING_UID);
|
||||
IOnProjectionStateChangeListener listener = mock(IOnProjectionStateChangeListener.class);
|
||||
IOnProjectionStateChangedListener listener = mock(IOnProjectionStateChangedListener.class);
|
||||
when(listener.asBinder()).thenReturn(mBinder); // Any binder will do.
|
||||
IOnProjectionStateChangeListener listener2 = mock(IOnProjectionStateChangeListener.class);
|
||||
IOnProjectionStateChangedListener listener2 = mock(IOnProjectionStateChangedListener.class);
|
||||
when(listener2.asBinder()).thenReturn(mBinder); // Any binder will do.
|
||||
mService.addOnProjectionStateChangeListener(listener, fakeProjectionType);
|
||||
mService.addOnProjectionStateChangeListener(listener2,
|
||||
mService.addOnProjectionStateChangedListener(listener, fakeProjectionType);
|
||||
mService.addOnProjectionStateChangedListener(listener2,
|
||||
fakeProjectionType | otherFakeProjectionType);
|
||||
verify(listener, atLeastOnce()).asBinder(); // Called twice during register.
|
||||
verify(listener2, atLeastOnce()).asBinder(); // Called twice during register.
|
||||
@@ -795,11 +795,11 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void projectionStateChangeListener_unregisteredOnDeath() throws Exception {
|
||||
IOnProjectionStateChangeListener listener = mock(IOnProjectionStateChangeListener.class);
|
||||
public void projectionStateChangedListener_unregisteredOnDeath() throws Exception {
|
||||
IOnProjectionStateChangedListener listener = mock(IOnProjectionStateChangedListener.class);
|
||||
IBinder listenerBinder = mock(IBinder.class);
|
||||
when(listener.asBinder()).thenReturn(listenerBinder);
|
||||
mService.addOnProjectionStateChangeListener(listener, PROJECTION_TYPE_ALL);
|
||||
mService.addOnProjectionStateChangedListener(listener, PROJECTION_TYPE_ALL);
|
||||
ArgumentCaptor<IBinder.DeathRecipient> listenerDeathRecipient = ArgumentCaptor.forClass(
|
||||
IBinder.DeathRecipient.class);
|
||||
verify(listenerBinder).linkToDeath(listenerDeathRecipient.capture(), anyInt());
|
||||
|
||||
Reference in New Issue
Block a user