Skip to content

Commit 726f27a

Browse files
committed
KeyEvent の onDown イベントを GET できないことがある問題を修正。
1 parent 3e3e0cf commit 726f27a

5 files changed

Lines changed: 24 additions & 52 deletions

File tree

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

Lines changed: 17 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,16 @@
1313
import org.deviceconnect.message.DConnectMessage;
1414

1515
import java.util.ArrayList;
16+
import java.util.HashMap;
1617
import java.util.List;
17-
import java.util.logging.Logger;
18+
import java.util.Map;
1819

1920
public abstract class BaseMidiOutputProfile extends BaseMidiProfile {
2021

21-
private final Logger mLogger = Logger.getLogger("midi-plugin");
22+
private final Map<Class< ? extends MessageEvent>, MessageEvent> mLastEventList = new HashMap<>();
2223

23-
private List<MessageEvent> mLastEventList;
24-
25-
boolean onEventCacheRequest(final Intent request, final Intent response) {
26-
MessageEvent messageEvent = getLastMessageEvent(request);
24+
boolean onEventCacheRequest(final Class<? extends MessageEvent> eventClass, final Intent response) {
25+
MessageEvent messageEvent = getLastMessageEvent(eventClass);
2726
if (messageEvent != null) {
2827
messageEvent.putExtras(response);
2928
}
@@ -69,7 +68,15 @@ boolean onRemoveEventRequest(final Intent request, final Intent response) {
6968
public void sendEvent(final int port, final @NonNull MidiMessage message, final long timestamp) {
7069
List<MessageEvent> results = new ArrayList<>();
7170
convertMessageToEvent(port, message, timestamp, results);
72-
mLastEventList = results;
71+
72+
synchronized (mLastEventList) {
73+
for (MessageEvent result : results) {
74+
if (result != null) {
75+
mLastEventList.put(result.getClass(), result);
76+
}
77+
}
78+
}
79+
7380
for (MessageEvent result : results) {
7481
List<Event> events = EventManager.INSTANCE.getEventList(
7582
getService().getId(),
@@ -89,22 +96,10 @@ abstract void convertMessageToEvent(final int port,
8996
final long timestamp,
9097
final @NonNull List<MessageEvent> results);
9198

92-
private MessageEvent getLastMessageEvent(final Intent request) {
93-
List<MessageEvent> messageEventList = mLastEventList;
94-
if (messageEventList != null) {
95-
String profileName = request.getStringExtra("profile");
96-
String interfaceName = request.getStringExtra("interface");
97-
String attributeName = request.getStringExtra("attribute");
98-
mLogger.info("getLastMessageEvent: profile=" + profileName + ", interface=" + interfaceName + ", attribute=" + attributeName);
99-
if (profileName != null) {
100-
for (MessageEvent messageEvent : mLastEventList) {
101-
if (messageEvent.isSameEvent(profileName, interfaceName, attributeName)) {
102-
return messageEvent;
103-
}
104-
}
105-
}
99+
private MessageEvent getLastMessageEvent(final Class<? extends MessageEvent> eventClass) {
100+
synchronized (mLastEventList) {
101+
return mLastEventList.get(eventClass);
106102
}
107-
return null;
108103
}
109104

110105
static abstract class MessageEvent {
@@ -135,26 +130,5 @@ long getElapsedTime() {
135130

136131
@Nullable
137132
abstract String getAttribute();
138-
139-
boolean isSameEvent(final @NonNull String profileName,
140-
final @Nullable String interfaceName,
141-
final @Nullable String attributeName) {
142-
return isSame(profileName, getProfile())
143-
&& isSame(interfaceName, getInterface())
144-
&& isSame(attributeName, getAttribute());
145-
}
146-
147-
private boolean isSame(final String a, final String b) {
148-
if (a == null && b == null) {
149-
return true;
150-
}
151-
if (a == null) {
152-
return false;
153-
}
154-
if (b == null) {
155-
return false;
156-
}
157-
return a.equalsIgnoreCase(b);
158-
}
159133
}
160134
}

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public String getAttribute() {
3838

3939
@Override
4040
public boolean onRequest(final Intent request, final Intent response) {
41-
return onEventCacheRequest(request, response);
41+
return onEventCacheRequest(KeyDownEvent.class, response);
4242
}
4343
});
4444

@@ -77,7 +77,7 @@ public String getAttribute() {
7777

7878
@Override
7979
public boolean onRequest(final Intent request, final Intent response) {
80-
return onEventCacheRequest(request, response);
80+
return onEventCacheRequest(KeyChangeEvent.class, response);
8181
}
8282
});
8383

@@ -116,7 +116,7 @@ public String getAttribute() {
116116

117117
@Override
118118
public boolean onRequest(final Intent request, final Intent response) {
119-
return onEventCacheRequest(request, response);
119+
return onEventCacheRequest(KeyUpEvent.class, response);
120120
}
121121
});
122122

@@ -192,8 +192,8 @@ int getId() {
192192
void putExtras(final Intent intent) {
193193
Bundle keyEvent = new Bundle();
194194
keyEvent.putInt("id", getId());
195+
keyEvent.putString("config", "");
195196
intent.putExtra("keyevent", keyEvent);
196-
intent.putExtra("config", "");
197197
}
198198

199199
@NonNull
@@ -232,6 +232,7 @@ void putExtras(final Intent intent) {
232232
Bundle keyEvent = new Bundle();
233233
keyEvent.putInt("id", getId());
234234
keyEvent.putString("state", getState());
235+
keyEvent.putString("config", "");
235236
intent.putExtra("keyevent", keyEvent);
236237
}
237238

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public String getAttribute() {
3333

3434
@Override
3535
public boolean onRequest(final Intent request, final Intent response) {
36-
return onEventCacheRequest(request, response);
36+
return onEventCacheRequest(NoteEvent.class, response);
3737
}
3838
});
3939

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
package org.deviceconnect.android.deviceplugin.midi.profiles;
22

33
import android.content.Intent;
4-
import android.media.midi.MidiDevice;
5-
import android.media.midi.MidiInputPort;
64

75
import org.deviceconnect.android.deviceplugin.midi.MidiMessageSender;
86
import org.deviceconnect.android.deviceplugin.midi.NoteNameTable;
9-
import org.deviceconnect.android.deviceplugin.midi.core.MidiMessage;
107
import org.deviceconnect.android.deviceplugin.midi.core.NoteOffMessage;
118
import org.deviceconnect.android.deviceplugin.midi.core.NoteOnMessage;
129
import org.deviceconnect.android.message.MessageUtils;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public String getAttribute() {
2525

2626
@Override
2727
public boolean onRequest(final Intent request, final Intent response) {
28-
return onEventCacheRequest(request, response);
28+
return onEventCacheRequest(VolumeChangeEvent.class, response);
2929
}
3030
});
3131

0 commit comments

Comments
 (0)