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:
Robert Wu
2022-05-05 16:53:08 +00:00
committed by Automerger Merge Worker
9 changed files with 56 additions and 19 deletions

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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,

View File

@@ -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();

View File

@@ -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;

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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)) {