/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.media.midi; import android.os.Parcel; import android.os.Parcelable; /** * This is an immutable class that describes the current status of a MIDI device's ports. */ public final class MidiDeviceStatus implements Parcelable { private static final String TAG = "MidiDeviceStatus"; private final MidiDeviceInfo mDeviceInfo; // true if input ports are open private final boolean mInputPortOpen[]; // open counts for output ports private final int mOutputPortOpenCount[]; /** * @hide */ public MidiDeviceStatus(MidiDeviceInfo deviceInfo, boolean inputPortOpen[], int outputPortOpenCount[]) { // MidiDeviceInfo is immutable so we can share references mDeviceInfo = deviceInfo; // make copies of the arrays mInputPortOpen = new boolean[inputPortOpen.length]; System.arraycopy(inputPortOpen, 0, mInputPortOpen, 0, inputPortOpen.length); mOutputPortOpenCount = new int[outputPortOpenCount.length]; System.arraycopy(outputPortOpenCount, 0, mOutputPortOpenCount, 0, outputPortOpenCount.length); } /** * Creates a MidiDeviceStatus with zero for all port open counts * @hide */ public MidiDeviceStatus(MidiDeviceInfo deviceInfo) { mDeviceInfo = deviceInfo; mInputPortOpen = new boolean[deviceInfo.getInputPortCount()]; mOutputPortOpenCount = new int[deviceInfo.getOutputPortCount()]; } /** * Returns the {@link MidiDeviceInfo} of the device. * * @return the device info */ public MidiDeviceInfo getDeviceInfo() { return mDeviceInfo; } /** * Returns true if an input port is open. * An input port can only be opened by one client at a time. * * @param portNumber the input port's port number * @return input port open status */ public boolean isInputPortOpen(int portNumber) { return mInputPortOpen[portNumber]; } /** * Returns the number of clients currently connected to the specified output port. * Unlike input ports, an output port can be opened by multiple clients at the same time. * * @param portNumber the output port's port number * @return output port open count */ public int getOutputPortOpenCount(int portNumber) { return mOutputPortOpenCount[portNumber]; } @Override public String toString() { int inputPortCount = mDeviceInfo.getInputPortCount(); int outputPortCount = mDeviceInfo.getOutputPortCount(); StringBuilder builder = new StringBuilder("mInputPortOpen=["); for (int i = 0; i < inputPortCount; i++) { builder.append(mInputPortOpen[i]); if (i < inputPortCount -1) { builder.append(","); } } builder.append("] mOutputPortOpenCount=["); for (int i = 0; i < outputPortCount; i++) { builder.append(mOutputPortOpenCount[i]); if (i < outputPortCount -1) { builder.append(","); } } builder.append("]"); return builder.toString(); } public static final Parcelable.Creator<MidiDeviceStatus> CREATOR = new Parcelable.Creator<MidiDeviceStatus>() { public MidiDeviceStatus createFromParcel(Parcel in) { ClassLoader classLoader = MidiDeviceInfo.class.getClassLoader(); MidiDeviceInfo deviceInfo = in.readParcelable(classLoader); boolean[] inputPortOpen = in.createBooleanArray(); int[] outputPortOpenCount = in.createIntArray(); return new MidiDeviceStatus(deviceInfo, inputPortOpen, outputPortOpenCount); } public MidiDeviceStatus[] newArray(int size) { return new MidiDeviceStatus[size]; } }; public int describeContents() { return 0; } public void writeToParcel(Parcel parcel, int flags) { parcel.writeParcelable(mDeviceInfo, flags); parcel.writeBooleanArray(mInputPortOpen); parcel.writeIntArray(mOutputPortOpenCount); } }