diff options
author | Mike Lockwood <lockwood@google.com> | 2015-03-27 13:23:41 -0700 |
---|---|---|
committer | Mike Lockwood <lockwood@google.com> | 2015-03-27 13:23:41 -0700 |
commit | 5781cd5b218dc3e5a19d8f69e6fb9f310bed4df6 (patch) | |
tree | 7c74f6c49adbe1da5d4b580bbdd69561116f76b9 | |
parent | 1e650e26a7bb2f02635530a46ecd715f9911d40e (diff) |
Make the MIDI Manager optional, enabled by "android.software.midi" feature
Change-Id: I76d442ea28beea4b9e2876bfef501d8f61403702
-rw-r--r-- | api/current.txt | 1 | ||||
-rw-r--r-- | api/system-current.txt | 1 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageManager.java | 6 | ||||
-rw-r--r-- | services/Android.mk | 1 | ||||
-rw-r--r-- | services/java/com/android/server/SystemServer.java | 17 | ||||
-rw-r--r-- | services/midi/Android.mk | 12 | ||||
-rw-r--r-- | services/midi/java/com/android/server/midi/MidiService.java (renamed from services/core/java/com/android/server/MidiService.java) | 18 | ||||
-rw-r--r-- | services/usb/java/com/android/server/usb/UsbAlsaManager.java | 9 |
8 files changed, 53 insertions, 12 deletions
diff --git a/api/current.txt b/api/current.txt index e649b4d77bb0..d3209bda953c 100644 --- a/api/current.txt +++ b/api/current.txt @@ -9146,6 +9146,7 @@ package android.content.pm { field public static final java.lang.String FEATURE_LOCATION_NETWORK = "android.hardware.location.network"; field public static final java.lang.String FEATURE_MANAGED_USERS = "android.software.managed_users"; field public static final java.lang.String FEATURE_MICROPHONE = "android.hardware.microphone"; + field public static final java.lang.String FEATURE_MIDI = "android.software.midi"; field public static final java.lang.String FEATURE_NFC = "android.hardware.nfc"; field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce"; field public static final java.lang.String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep"; diff --git a/api/system-current.txt b/api/system-current.txt index 402cf0566c79..23617b20b770 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -9394,6 +9394,7 @@ package android.content.pm { field public static final java.lang.String FEATURE_LOCATION_NETWORK = "android.hardware.location.network"; field public static final java.lang.String FEATURE_MANAGED_USERS = "android.software.managed_users"; field public static final java.lang.String FEATURE_MICROPHONE = "android.hardware.microphone"; + field public static final java.lang.String FEATURE_MIDI = "android.software.midi"; field public static final java.lang.String FEATURE_NFC = "android.hardware.nfc"; field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce"; field public static final java.lang.String FEATURE_OPENGLES_EXTENSION_PACK = "android.hardware.opengles.aep"; diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 59a16dab5d72..f0d1da9997ff 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -1600,6 +1600,12 @@ public abstract class PackageManager { @SdkConstant(SdkConstantType.FEATURE) public static final String FEATURE_GAMEPAD = "android.hardware.gamepad"; + /** + * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: + * The device has a full implementation of the android.media.midi.* APIs. + */ + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_MIDI = "android.software.midi"; /** * Action to external storage service to clean out removed apps. diff --git a/services/Android.mk b/services/Android.mk index 87770853deb2..1918db54a049 100644 --- a/services/Android.mk +++ b/services/Android.mk @@ -24,6 +24,7 @@ services := \ appwidget \ backup \ devicepolicy \ + midi \ net \ print \ restrictions \ diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 65e3534732da..8c653e2872e6 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -124,6 +124,8 @@ public final class SystemServer { "com.android.server.print.PrintManagerService"; private static final String USB_SERVICE_CLASS = "com.android.server.usb.UsbService$Lifecycle"; + private static final String MIDI_SERVICE_CLASS = + "com.android.server.midi.MidiService$Lifecycle"; private static final String WIFI_SERVICE_CLASS = "com.android.server.wifi.WifiService"; private static final String WIFI_P2P_SERVICE_CLASS = @@ -810,6 +812,11 @@ public final class SystemServer { } if (!disableNonCoreServices) { + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_MIDI)) { + // Start MIDI Manager service + mSystemServiceManager.startService(MIDI_SERVICE_CLASS); + } + if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST) || mPackageManager.hasSystemFeature( PackageManager.FEATURE_USB_ACCESSORY)) { @@ -827,16 +834,6 @@ public final class SystemServer { } } - if (!disableNonCoreServices) { - try { - Slog.i(TAG, "MIDI Service"); - ServiceManager.addService(Context.MIDI_SERVICE, - new MidiService(context)); - } catch (Throwable e) { - reportWtf("starting MIDI Service", e); - } - } - mSystemServiceManager.startService(TwilightService.class); mSystemServiceManager.startService(JobSchedulerService.class); diff --git a/services/midi/Android.mk b/services/midi/Android.mk new file mode 100644 index 000000000000..faac01cd86f4 --- /dev/null +++ b/services/midi/Android.mk @@ -0,0 +1,12 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_MODULE := services.midi + +LOCAL_SRC_FILES += \ + $(call all-java-files-under,java) + +LOCAL_JAVA_LIBRARIES := services.core + +include $(BUILD_STATIC_JAVA_LIBRARY) diff --git a/services/core/java/com/android/server/MidiService.java b/services/midi/java/com/android/server/midi/MidiService.java index e75366402797..1d2180e33aa8 100644 --- a/services/core/java/com/android/server/MidiService.java +++ b/services/midi/java/com/android/server/midi/MidiService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server; +package com.android.server.midi; import android.content.Context; import android.content.Intent; @@ -40,6 +40,7 @@ import android.util.Log; import com.android.internal.content.PackageMonitor; import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.XmlUtils; +import com.android.server.SystemService; import org.xmlpull.v1.XmlPullParser; @@ -51,6 +52,21 @@ import java.util.Iterator; import java.util.List; public class MidiService extends IMidiManager.Stub { + + public static class Lifecycle extends SystemService { + private MidiService mMidiService; + + public Lifecycle(Context context) { + super(context); + } + + @Override + public void onStart() { + mMidiService = new MidiService(getContext()); + publishBinderService(Context.MIDI_SERVICE, mMidiService); + } + } + private static final String TAG = "MidiService"; private final Context mContext; diff --git a/services/usb/java/com/android/server/usb/UsbAlsaManager.java b/services/usb/java/com/android/server/usb/UsbAlsaManager.java index c0410291678b..2728af118767 100644 --- a/services/usb/java/com/android/server/usb/UsbAlsaManager.java +++ b/services/usb/java/com/android/server/usb/UsbAlsaManager.java @@ -17,6 +17,7 @@ package com.android.server.usb; import android.content.Context; +import android.content.pm.PackageManager; import android.content.res.Resources; import android.hardware.usb.UsbConstants; import android.hardware.usb.UsbDevice; @@ -55,6 +56,7 @@ public final class UsbAlsaManager { private final Context mContext; private IAudioService mAudioService; + private final boolean mHasMidiFeature; private final AlsaCardsParser mCardsParser = new AlsaCardsParser(); private final AlsaDevicesParser mDevicesParser = new AlsaDevicesParser(); @@ -126,6 +128,7 @@ public final class UsbAlsaManager { /* package */ UsbAlsaManager(Context context) { mContext = context; + mHasMidiFeature = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI); // initial scan mCardsParser.scan(); @@ -389,7 +392,7 @@ public final class UsbAlsaManager { // mDevicesParser.scan() boolean hasMidi = mDevicesParser.hasMIDIDevices(addedCard); - if (hasMidi) { + if (hasMidi && mHasMidiFeature) { int device = mDevicesParser.getDefaultDeviceNum(addedCard); AlsaDevice alsaDevice = waitForAlsaDevice(addedCard, device, AlsaDevice.TYPE_MIDI); if (alsaDevice != null) { @@ -459,6 +462,10 @@ public final class UsbAlsaManager { } /* package */ void setPeripheralMidiState(boolean enabled, int card, int device) { + if (!mHasMidiFeature) { + return; + } + if (enabled && mPeripheralMidiDevice == null) { Bundle properties = new Bundle(); Resources r = mContext.getResources(); |