Skip to content

Commit bb449e5

Browse files
committed
サービス一覧画面でリアルタイムにオフライン表示が切り替わらない問題を修正。別のUSB MIDIデバイスに差し替えても前のデバイスとして認識してしまう問題を修正。
1 parent 1654242 commit bb449e5

2 files changed

Lines changed: 49 additions & 3 deletions

File tree

dConnectDevicePlugin/dConnectDeviceMidi/plugin/src/main/java/org/deviceconnect/android/deviceplugin/midi/DConnectMidiDeviceService.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import java.net.HttpURLConnection;
4040
import java.net.MalformedURLException;
4141
import java.net.URL;
42+
import java.security.MessageDigest;
43+
import java.security.NoSuchAlgorithmException;
4244
import java.util.List;
4345
import java.util.logging.Logger;
4446

@@ -346,6 +348,8 @@ private String getDirectionName() {
346348

347349
void destroy() {
348350
mMidiDevice = null;
351+
setOnline(false);
352+
349353
mMidiFilePlayer.stop();
350354
synchronized (mMidiInputBuffers) {
351355
for (int index = 0; index < mMidiInputBuffers.size(); index++) {
@@ -399,6 +403,8 @@ synchronized void setMidiDevice(final MidiDevice device) {
399403
for (int port = 0; port < device.getInfo().getOutputPortCount(); port++) {
400404
connectOutputPort(port);
401405
}
406+
407+
setOnline(mMidiDevice != null);
402408
}
403409

404410
private void connectOutputPort(final int port) {
@@ -473,10 +479,13 @@ static String createServiceId(final MidiDeviceInfo deviceInfo) {
473479
deviceType = "usb";
474480
UsbDevice device = props.getParcelable(MidiDeviceInfo.PROPERTY_USB_DEVICE);
475481
if (device != null) {
476-
deviceId = Integer.toString(device.getDeviceId());
482+
LOGGER.info("createServiceId: USB Device ID = " + device.getDeviceId() + ", MIDI ID = " + deviceInfo.getId());
483+
String deviceName = createServiceName(deviceInfo);
484+
deviceId = device.getDeviceId() + "_" + md5(deviceName);
477485
} else {
478-
LOGGER.warning("createServiceId: NO USB DEVICE INFO; id = " + deviceInfo.getId());
479-
deviceId = "midi" + deviceInfo.getId();
486+
487+
LOGGER.warning("createServiceId: NO USB DEVICE INFO; MIDI ID = " + deviceInfo.getId());
488+
deviceId = "midi_" + deviceInfo.getId();
480489
}
481490
break;
482491
}
@@ -505,6 +514,22 @@ static String createServiceId(final MidiDeviceInfo deviceInfo) {
505514
return concat(array);
506515
}
507516

517+
public static String md5(final String s) {
518+
try {
519+
MessageDigest md = MessageDigest.getInstance("MD5");
520+
md.update(s.getBytes());
521+
byte[] messageDigest = md.digest();
522+
523+
StringBuilder hex = new StringBuilder();
524+
for (int i = 0; i < messageDigest.length; i++) {
525+
hex.append(String.format("%02x", messageDigest[i] & 0xFF));
526+
}
527+
return hex.toString();
528+
} catch (NoSuchAlgorithmException e) {
529+
return s;
530+
}
531+
}
532+
508533
private static String createServiceName(final MidiDeviceInfo deviceInfo) {
509534
Bundle props = deviceInfo.getProperties();
510535
if (props != null) {

dConnectDevicePlugin/dConnectDeviceMidi/plugin/src/main/java/org/deviceconnect/android/deviceplugin/midi/DConnectMidiServiceListActivity.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@
1010

1111
import java.util.ArrayList;
1212
import java.util.List;
13+
import java.util.logging.Logger;
1314

1415
/**
1516
* MIDI プラグインのサービス一覧画面.
1617
*/
1718
public class DConnectMidiServiceListActivity extends DConnectServiceListActivity {
1819

20+
private final Logger mLogger = Logger.getLogger("midi-plugin");
21+
1922
@Override
2023
protected Class<? extends DConnectMessageService> getMessageServiceClass() {
2124
return MidiMessageService.class;
@@ -52,4 +55,22 @@ private List<String> getProfileNameList(final DConnectService service) {
5255
}
5356
return result;
5457
}
58+
59+
@Override
60+
public void onServiceAdded(DConnectService service) {
61+
mLogger.info("*** onServiceAdded: name = " + service.getName());
62+
super.onServiceAdded(service);
63+
}
64+
65+
@Override
66+
public void onServiceRemoved(DConnectService service) {
67+
mLogger.info("*** onServiceRemoved: name = " + service.getName());
68+
super.onServiceRemoved(service);
69+
}
70+
71+
@Override
72+
public void onStatusChange(DConnectService service) {
73+
mLogger.info("*** onStatusChange: name = " + service.getName() + " isOnline = " + service.isOnline());
74+
super.onStatusChange(service);
75+
}
5576
}

0 commit comments

Comments
 (0)