Home | History | Annotate | Download | only in com.example.android.common.midi
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.example.android.common.midi;
     18 
     19 import android.media.midi.MidiDeviceInfo;
     20 import android.media.midi.MidiDeviceInfo.PortInfo;
     21 import android.util.Log;
     22 
     23 // Wrapper for a MIDI device and port description.
     24 public class MidiPortWrapper {
     25     private MidiDeviceInfo mInfo;
     26     private int mPortIndex;
     27     private int mType;
     28     private String mString;
     29 
     30     /**
     31      * Wrapper for a MIDI device and port description.
     32      * @param info
     33      * @param portType
     34      * @param portIndex
     35      */
     36     public MidiPortWrapper(MidiDeviceInfo info, int portType, int portIndex) {
     37         mInfo = info;
     38         mType = portType;
     39         mPortIndex = portIndex;
     40     }
     41 
     42     private void updateString() {
     43         if (mInfo == null) {
     44             mString = "- - - - - -";
     45         } else {
     46             StringBuilder sb = new StringBuilder();
     47             String name = mInfo.getProperties()
     48                     .getString(MidiDeviceInfo.PROPERTY_NAME);
     49             if (name == null) {
     50                 name = mInfo.getProperties()
     51                         .getString(MidiDeviceInfo.PROPERTY_MANUFACTURER) + ", "
     52                         + mInfo.getProperties()
     53                                 .getString(MidiDeviceInfo.PROPERTY_PRODUCT);
     54             }
     55             sb.append("#" + mInfo.getId());
     56             sb.append(", ").append(name);
     57             PortInfo portInfo = findPortInfo();
     58             sb.append("[" + mPortIndex + "]");
     59             if (portInfo != null) {
     60                 sb.append(", ").append(portInfo.getName());
     61             } else {
     62                 sb.append(", null");
     63             }
     64             mString = sb.toString();
     65         }
     66     }
     67 
     68     /**
     69      * @param info
     70      * @param portIndex
     71      * @return
     72      */
     73     private PortInfo findPortInfo() {
     74         PortInfo[] ports = mInfo.getPorts();
     75         for (PortInfo portInfo : ports) {
     76             if (portInfo.getPortNumber() == mPortIndex
     77                     && portInfo.getType() == mType) {
     78                 return portInfo;
     79             }
     80         }
     81         return null;
     82     }
     83 
     84     public int getPortIndex() {
     85         return mPortIndex;
     86     }
     87 
     88     public MidiDeviceInfo getDeviceInfo() {
     89         return mInfo;
     90     }
     91 
     92     @Override
     93     public String toString() {
     94         if (mString == null) {
     95             updateString();
     96         }
     97         return mString;
     98     }
     99 
    100     @Override
    101     public boolean equals(Object other) {
    102         if (other == null)
    103             return false;
    104         if (!(other instanceof MidiPortWrapper))
    105             return false;
    106         MidiPortWrapper otherWrapper = (MidiPortWrapper) other;
    107         if (mPortIndex != otherWrapper.mPortIndex)
    108             return false;
    109         if (mType != otherWrapper.mType)
    110             return false;
    111         if (mInfo == null)
    112             return (otherWrapper.mInfo == null);
    113         return mInfo.equals(otherWrapper.mInfo);
    114     }
    115 
    116     @Override
    117     public int hashCode() {
    118         int hashCode = 1;
    119         hashCode = 31 * hashCode + mPortIndex;
    120         hashCode = 31 * hashCode + mType;
    121         hashCode = 31 * hashCode + mInfo.hashCode();
    122         return hashCode;
    123     }
    124 
    125 }
    126