Merge "MidiService: Fix USB removeDeviceConnection" into tm-dev am: 5fa99c336c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18169657 Change-Id: I97a42d4aa6e63dcc099a0e73a7d959957e9f6059 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -29,6 +29,7 @@ import com.android.wm.shell.common.TaskStackListenerImpl;
|
||||
import com.android.wm.shell.common.annotations.ShellMainThread;
|
||||
import com.android.wm.shell.pip.Pip;
|
||||
import com.android.wm.shell.pip.PipAnimationController;
|
||||
import com.android.wm.shell.pip.PipAppOpsListener;
|
||||
import com.android.wm.shell.pip.PipMediaController;
|
||||
import com.android.wm.shell.pip.PipParamsChangedForwarder;
|
||||
import com.android.wm.shell.pip.PipSnapAlgorithm;
|
||||
@@ -63,6 +64,7 @@ public abstract class TvPipModule {
|
||||
Context context,
|
||||
TvPipBoundsState tvPipBoundsState,
|
||||
TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
|
||||
PipAppOpsListener pipAppOpsListener,
|
||||
PipTaskOrganizer pipTaskOrganizer,
|
||||
TvPipMenuController tvPipMenuController,
|
||||
PipMediaController pipMediaController,
|
||||
@@ -79,6 +81,7 @@ public abstract class TvPipModule {
|
||||
context,
|
||||
tvPipBoundsState,
|
||||
tvPipBoundsAlgorithm,
|
||||
pipAppOpsListener,
|
||||
pipTaskOrganizer,
|
||||
pipTransitionController,
|
||||
tvPipMenuController,
|
||||
@@ -185,4 +188,12 @@ public abstract class TvPipModule {
|
||||
static PipParamsChangedForwarder providePipParamsChangedForwarder() {
|
||||
return new PipParamsChangedForwarder();
|
||||
}
|
||||
|
||||
@WMSingleton
|
||||
@Provides
|
||||
static PipAppOpsListener providePipAppOpsListener(Context context,
|
||||
PipTaskOrganizer pipTaskOrganizer,
|
||||
@ShellMainThread ShellExecutor mainExecutor) {
|
||||
return new PipAppOpsListener(context, pipTaskOrganizer::removePip, mainExecutor);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +78,6 @@ import com.android.wm.shell.pip.Pip;
|
||||
import com.android.wm.shell.pip.PipMediaController;
|
||||
import com.android.wm.shell.pip.PipSurfaceTransactionHelper;
|
||||
import com.android.wm.shell.pip.PipUiEventLogger;
|
||||
import com.android.wm.shell.pip.phone.PipAppOpsListener;
|
||||
import com.android.wm.shell.pip.phone.PipTouchHandler;
|
||||
import com.android.wm.shell.recents.RecentTasks;
|
||||
import com.android.wm.shell.recents.RecentTasksController;
|
||||
@@ -435,14 +434,6 @@ public abstract class WMShellBaseModule {
|
||||
return new FloatingContentCoordinator();
|
||||
}
|
||||
|
||||
@WMSingleton
|
||||
@Provides
|
||||
static PipAppOpsListener providePipAppOpsListener(Context context,
|
||||
PipTouchHandler pipTouchHandler,
|
||||
@ShellMainThread ShellExecutor mainExecutor) {
|
||||
return new PipAppOpsListener(context, pipTouchHandler.getMotionHelper(), mainExecutor);
|
||||
}
|
||||
|
||||
// Needs handler for registering broadcast receivers
|
||||
@WMSingleton
|
||||
@Provides
|
||||
|
||||
@@ -51,6 +51,7 @@ import com.android.wm.shell.legacysplitscreen.LegacySplitScreenController;
|
||||
import com.android.wm.shell.onehanded.OneHandedController;
|
||||
import com.android.wm.shell.pip.Pip;
|
||||
import com.android.wm.shell.pip.PipAnimationController;
|
||||
import com.android.wm.shell.pip.PipAppOpsListener;
|
||||
import com.android.wm.shell.pip.PipBoundsAlgorithm;
|
||||
import com.android.wm.shell.pip.PipBoundsState;
|
||||
import com.android.wm.shell.pip.PipMediaController;
|
||||
@@ -63,7 +64,6 @@ import com.android.wm.shell.pip.PipTransitionController;
|
||||
import com.android.wm.shell.pip.PipTransitionState;
|
||||
import com.android.wm.shell.pip.PipUiEventLogger;
|
||||
import com.android.wm.shell.pip.phone.PhonePipMenuController;
|
||||
import com.android.wm.shell.pip.phone.PipAppOpsListener;
|
||||
import com.android.wm.shell.pip.phone.PipController;
|
||||
import com.android.wm.shell.pip.phone.PipMotionHelper;
|
||||
import com.android.wm.shell.pip.phone.PipTouchHandler;
|
||||
@@ -323,6 +323,14 @@ public class WMShellModule {
|
||||
pipSurfaceTransactionHelper, splitScreenOptional);
|
||||
}
|
||||
|
||||
@WMSingleton
|
||||
@Provides
|
||||
static PipAppOpsListener providePipAppOpsListener(Context context,
|
||||
PipTouchHandler pipTouchHandler,
|
||||
@ShellMainThread ShellExecutor mainExecutor) {
|
||||
return new PipAppOpsListener(context, pipTouchHandler.getMotionHelper(), mainExecutor);
|
||||
}
|
||||
|
||||
@WMSingleton
|
||||
@Provides
|
||||
static PipMotionHelper providePipMotionHelper(Context context,
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.wm.shell.pip.phone;
|
||||
package com.android.wm.shell.pip;
|
||||
|
||||
import static android.app.AppOpsManager.MODE_ALLOWED;
|
||||
import static android.app.AppOpsManager.OP_PICTURE_IN_PICTURE;
|
||||
@@ -28,7 +28,6 @@ import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.util.Pair;
|
||||
|
||||
import com.android.wm.shell.common.ShellExecutor;
|
||||
import com.android.wm.shell.pip.PipUtils;
|
||||
|
||||
public class PipAppOpsListener {
|
||||
private static final String TAG = PipAppOpsListener.class.getSimpleName();
|
||||
@@ -76,6 +76,7 @@ import com.android.wm.shell.pip.IPipAnimationListener;
|
||||
import com.android.wm.shell.pip.PinnedStackListenerForwarder;
|
||||
import com.android.wm.shell.pip.Pip;
|
||||
import com.android.wm.shell.pip.PipAnimationController;
|
||||
import com.android.wm.shell.pip.PipAppOpsListener;
|
||||
import com.android.wm.shell.pip.PipBoundsAlgorithm;
|
||||
import com.android.wm.shell.pip.PipBoundsState;
|
||||
import com.android.wm.shell.pip.PipMediaController;
|
||||
|
||||
@@ -44,6 +44,7 @@ import com.android.wm.shell.animation.FloatProperties;
|
||||
import com.android.wm.shell.animation.PhysicsAnimator;
|
||||
import com.android.wm.shell.common.FloatingContentCoordinator;
|
||||
import com.android.wm.shell.common.magnetictarget.MagnetizedObject;
|
||||
import com.android.wm.shell.pip.PipAppOpsListener;
|
||||
import com.android.wm.shell.pip.PipBoundsState;
|
||||
import com.android.wm.shell.pip.PipSnapAlgorithm;
|
||||
import com.android.wm.shell.pip.PipTaskOrganizer;
|
||||
|
||||
@@ -45,6 +45,7 @@ import com.android.wm.shell.common.TaskStackListenerImpl;
|
||||
import com.android.wm.shell.pip.PinnedStackListenerForwarder;
|
||||
import com.android.wm.shell.pip.Pip;
|
||||
import com.android.wm.shell.pip.PipAnimationController;
|
||||
import com.android.wm.shell.pip.PipAppOpsListener;
|
||||
import com.android.wm.shell.pip.PipBoundsState;
|
||||
import com.android.wm.shell.pip.PipMediaController;
|
||||
import com.android.wm.shell.pip.PipParamsChangedForwarder;
|
||||
@@ -97,6 +98,7 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
|
||||
|
||||
private final TvPipBoundsState mTvPipBoundsState;
|
||||
private final TvPipBoundsAlgorithm mTvPipBoundsAlgorithm;
|
||||
private final PipAppOpsListener mAppOpsListener;
|
||||
private final PipTaskOrganizer mPipTaskOrganizer;
|
||||
private final PipMediaController mPipMediaController;
|
||||
private final TvPipNotificationController mPipNotificationController;
|
||||
@@ -121,6 +123,7 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
|
||||
Context context,
|
||||
TvPipBoundsState tvPipBoundsState,
|
||||
TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
|
||||
PipAppOpsListener pipAppOpsListener,
|
||||
PipTaskOrganizer pipTaskOrganizer,
|
||||
PipTransitionController pipTransitionController,
|
||||
TvPipMenuController tvPipMenuController,
|
||||
@@ -136,6 +139,7 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
|
||||
context,
|
||||
tvPipBoundsState,
|
||||
tvPipBoundsAlgorithm,
|
||||
pipAppOpsListener,
|
||||
pipTaskOrganizer,
|
||||
pipTransitionController,
|
||||
tvPipMenuController,
|
||||
@@ -153,6 +157,7 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
|
||||
Context context,
|
||||
TvPipBoundsState tvPipBoundsState,
|
||||
TvPipBoundsAlgorithm tvPipBoundsAlgorithm,
|
||||
PipAppOpsListener pipAppOpsListener,
|
||||
PipTaskOrganizer pipTaskOrganizer,
|
||||
PipTransitionController pipTransitionController,
|
||||
TvPipMenuController tvPipMenuController,
|
||||
@@ -181,6 +186,7 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
|
||||
mTvPipMenuController = tvPipMenuController;
|
||||
mTvPipMenuController.setDelegate(this);
|
||||
|
||||
mAppOpsListener = pipAppOpsListener;
|
||||
mPipTaskOrganizer = pipTaskOrganizer;
|
||||
pipTransitionController.registerPipTransitionCallback(this);
|
||||
|
||||
@@ -521,6 +527,12 @@ public class TvPipController implements PipTransitionController.PipTransitionCal
|
||||
@Override
|
||||
public void onActivityPinned(String packageName, int userId, int taskId, int stackId) {
|
||||
checkIfPinnedTaskAppeared();
|
||||
mAppOpsListener.onActivityPinned(packageName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityUnpinned() {
|
||||
mAppOpsListener.onActivityUnpinned();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -45,6 +45,7 @@ import com.android.wm.shell.common.DisplayLayout;
|
||||
import com.android.wm.shell.common.ShellExecutor;
|
||||
import com.android.wm.shell.common.TaskStackListenerImpl;
|
||||
import com.android.wm.shell.onehanded.OneHandedController;
|
||||
import com.android.wm.shell.pip.PipAppOpsListener;
|
||||
import com.android.wm.shell.pip.PipBoundsAlgorithm;
|
||||
import com.android.wm.shell.pip.PipBoundsState;
|
||||
import com.android.wm.shell.pip.PipMediaController;
|
||||
|
||||
@@ -238,7 +238,7 @@ public class MidiService extends IMidiManager.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
// called from Device.close()
|
||||
// called from Device.closeLocked()
|
||||
public void removeDeviceConnection(DeviceConnection connection) {
|
||||
mDeviceConnections.remove(connection.getToken());
|
||||
if (mListeners.size() == 0 && mDeviceConnections.size() == 0) {
|
||||
@@ -294,12 +294,6 @@ public class MidiService extends IMidiManager.Stub {
|
||||
}
|
||||
|
||||
for (DeviceConnection connection : mDeviceConnections.values()) {
|
||||
if (connection.getDevice().getDeviceInfo().getType()
|
||||
== MidiDeviceInfo.TYPE_USB) {
|
||||
synchronized (mUsbMidiLock) {
|
||||
removeUsbMidiDeviceLocked(connection.getDevice().getDeviceInfo());
|
||||
}
|
||||
}
|
||||
connection.getDevice().removeDeviceConnection(connection);
|
||||
}
|
||||
}
|
||||
@@ -541,6 +535,13 @@ public class MidiService extends IMidiManager.Stub {
|
||||
synchronized (mDeviceConnections) {
|
||||
mDeviceConnections.remove(connection);
|
||||
|
||||
if (connection.getDevice().getDeviceInfo().getType()
|
||||
== MidiDeviceInfo.TYPE_USB) {
|
||||
synchronized (mUsbMidiLock) {
|
||||
removeUsbMidiDeviceLocked(connection.getDevice().getDeviceInfo());
|
||||
}
|
||||
}
|
||||
|
||||
if (mDeviceConnections.size() == 0 && mServiceConnection != null) {
|
||||
mContext.unbindService(mServiceConnection);
|
||||
mServiceConnection = null;
|
||||
@@ -559,6 +560,12 @@ public class MidiService extends IMidiManager.Stub {
|
||||
public void closeLocked() {
|
||||
synchronized (mDeviceConnections) {
|
||||
for (DeviceConnection connection : mDeviceConnections) {
|
||||
if (connection.getDevice().getDeviceInfo().getType()
|
||||
== MidiDeviceInfo.TYPE_USB) {
|
||||
synchronized (mUsbMidiLock) {
|
||||
removeUsbMidiDeviceLocked(connection.getDevice().getDeviceInfo());
|
||||
}
|
||||
}
|
||||
connection.getClient().removeDeviceConnection(connection);
|
||||
}
|
||||
mDeviceConnections.clear();
|
||||
@@ -1401,6 +1408,8 @@ public class MidiService extends IMidiManager.Stub {
|
||||
String deviceName = extractUsbDeviceName(name);
|
||||
String tagName = extractUsbDeviceTag(name);
|
||||
|
||||
Log.i(TAG, "Checking " + deviceName + " " + tagName);
|
||||
|
||||
// Only one MIDI 2.0 device can be used at once.
|
||||
// Multiple MIDI 1.0 devices can be used at once.
|
||||
if (mUsbMidiUniversalDeviceInUse.contains(deviceName)
|
||||
@@ -1420,6 +1429,8 @@ public class MidiService extends IMidiManager.Stub {
|
||||
String deviceName = extractUsbDeviceName(name);
|
||||
String tagName = extractUsbDeviceTag(name);
|
||||
|
||||
Log.i(TAG, "Adding " + deviceName + " " + tagName);
|
||||
|
||||
if ((tagName).equals(MIDI_UNIVERSAL_STRING)) {
|
||||
mUsbMidiUniversalDeviceInUse.add(deviceName);
|
||||
} else if ((tagName).equals(MIDI_LEGACY_STRING)) {
|
||||
@@ -1437,6 +1448,8 @@ public class MidiService extends IMidiManager.Stub {
|
||||
String deviceName = extractUsbDeviceName(name);
|
||||
String tagName = extractUsbDeviceTag(name);
|
||||
|
||||
Log.i(TAG, "Removing " + deviceName + " " + tagName);
|
||||
|
||||
if ((tagName).equals(MIDI_UNIVERSAL_STRING)) {
|
||||
mUsbMidiUniversalDeviceInUse.remove(deviceName);
|
||||
} else if ((tagName).equals(MIDI_LEGACY_STRING)) {
|
||||
|
||||
Reference in New Issue
Block a user