Refactoring: get rid of ServiceCommand, use new CallSpec and MusicSpec to pass Call and Music info

master
Andreas Shimokawa 2016-04-04 20:08:34 +02:00
parent 3e3cf462a6
commit a15b327ff1
21 changed files with 158 additions and 121 deletions

View File

@ -29,9 +29,10 @@ import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils; import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
@ -118,20 +119,20 @@ public class DebugActivity extends Activity {
incomingCallButton.setOnClickListener(new View.OnClickListener() { incomingCallButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
GBApplication.deviceService().onSetCallState( CallSpec callSpec = new CallSpec();
editContent.getText().toString(), callSpec.command = CallSpec.CALL_INCOMING;
null, callSpec.number = editContent.getText().toString();
ServiceCommand.CALL_INCOMING); GBApplication.deviceService().onSetCallState(callSpec);
} }
}); });
outgoingCallButton = (Button) findViewById(R.id.outgoingCallButton); outgoingCallButton = (Button) findViewById(R.id.outgoingCallButton);
outgoingCallButton.setOnClickListener(new View.OnClickListener() { outgoingCallButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
GBApplication.deviceService().onSetCallState( CallSpec callSpec = new CallSpec();
editContent.getText().toString(), callSpec.command = CallSpec.CALL_OUTGOING;
null, callSpec.number = editContent.getText().toString();
ServiceCommand.CALL_OUTGOING); GBApplication.deviceService().onSetCallState(callSpec);
} }
}); });
@ -139,20 +140,18 @@ public class DebugActivity extends Activity {
startCallButton.setOnClickListener(new View.OnClickListener() { startCallButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
GBApplication.deviceService().onSetCallState( CallSpec callSpec = new CallSpec();
null, callSpec.command = CallSpec.CALL_START;
null, GBApplication.deviceService().onSetCallState(callSpec);
ServiceCommand.CALL_START);
} }
}); });
endCallButton = (Button) findViewById(R.id.endCallButton); endCallButton = (Button) findViewById(R.id.endCallButton);
endCallButton.setOnClickListener(new View.OnClickListener() { endCallButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
GBApplication.deviceService().onSetCallState( CallSpec callSpec = new CallSpec();
null, callSpec.command = CallSpec.CALL_END;
null, GBApplication.deviceService().onSetCallState(callSpec);
ServiceCommand.CALL_END);
} }
}); });
@ -199,10 +198,15 @@ public class DebugActivity extends Activity {
setMusicInfoButton.setOnClickListener(new View.OnClickListener() { setMusicInfoButton.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
GBApplication.deviceService().onSetMusicInfo( MusicSpec musicSpec = new MusicSpec();
editContent.getText().toString() + "(artist)", musicSpec.artist = editContent.getText().toString() + "(artist)";
editContent.getText().toString() + "(album)", musicSpec.album = editContent.getText().toString() + "(album)";
editContent.getText().toString() + "(track)", 20, 10, 2); musicSpec.track = editContent.getText().toString() + "(track)";
musicSpec.duration = 10;
musicSpec.trackCount = 5;
musicSpec.trackNr = 2;
GBApplication.deviceService().onSetMusicInfo(musicSpec);
} }
}); });

View File

@ -9,6 +9,7 @@ public class GBDeviceEventDisplayMessage {
* An event for displaying a message to the user. How the message is displayed * An event for displaying a message to the user. How the message is displayed
* is a detail of the current activity, which needs to listen to the Intent * is a detail of the current activity, which needs to listen to the Intent
* GB.ACTION_DISPLAY_MESSAGE. * GB.ACTION_DISPLAY_MESSAGE.
*
* @param message * @param message
* @param duration * @param duration
* @param severity * @param severity

View File

@ -1,14 +1,14 @@
package nodomain.freeyourgadget.gadgetbridge.devices; package nodomain.freeyourgadget.gadgetbridge.devices;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.UUID; import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
/** /**
* Specifies all events that GadgetBridge intends to send to the gadget device. * Specifies all events that GadgetBridge intends to send to the gadget device.
@ -22,9 +22,9 @@ public interface EventHandler {
void onSetAlarms(ArrayList<? extends Alarm> alarms); void onSetAlarms(ArrayList<? extends Alarm> alarms);
void onSetCallState(@Nullable String number, @Nullable String name, ServiceCommand command); void onSetCallState(CallSpec callSpec);
void onSetMusicInfo(String artist, String album, String track, int duration, int trackCount, int trackNr); void onSetMusicInfo(MusicSpec musicSpec);
void onEnableRealtimeSteps(boolean enable); void onEnableRealtimeSteps(boolean enable);

View File

@ -18,7 +18,6 @@ public final class MiBandConst {
public static final String PREF_MIBAND_USE_HR_FOR_SLEEP_DETECTION = "mi_hr_sleep_detection"; public static final String PREF_MIBAND_USE_HR_FOR_SLEEP_DETECTION = "mi_hr_sleep_detection";
public static final String ORIGIN_SMS = "sms"; public static final String ORIGIN_SMS = "sms";
public static final String ORIGIN_INCOMING_CALL = "incoming_call"; public static final String ORIGIN_INCOMING_CALL = "incoming_call";
public static final String ORIGIN_K9MAIL = "k9mail"; public static final String ORIGIN_K9MAIL = "k9mail";

View File

@ -8,12 +8,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
public class MusicPlaybackReceiver extends BroadcastReceiver { public class MusicPlaybackReceiver extends BroadcastReceiver {
private static final Logger LOG = LoggerFactory.getLogger(MusicPlaybackReceiver.class); private static final Logger LOG = LoggerFactory.getLogger(MusicPlaybackReceiver.class);
private static String mLastSource;
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
String artist = intent.getStringExtra("artist"); String artist = intent.getStringExtra("artist");
@ -24,11 +23,16 @@ public class MusicPlaybackReceiver extends BroadcastReceiver {
for (String key : bundle.keySet()) { for (String key : bundle.keySet()) {
Object value = bundle.get(key); Object value = bundle.get(key);
LOG.info(String.format("%s %s (%s)", key, LOG.info(String.format("%s %s (%s)", key,
value.toString(), value.getClass().getName())); value != null ? value.toString() : "null", value != null ? value.getClass().getName() : "no class"));
} }
*/ */
LOG.info("Current track: " + artist + ", " + album + ", " + track); LOG.info("Current track: " + artist + ", " + album + ", " + track);
GBApplication.deviceService().onSetMusicInfo(artist, album, track, 0, 0, 0); MusicSpec musicSpec = new MusicSpec();
musicSpec.artist = artist;
musicSpec.artist = album;
musicSpec.artist = track;
GBApplication.deviceService().onSetMusicInfo(musicSpec);
} }
} }

View File

@ -26,7 +26,6 @@ import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.activities.ControlCenter;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService; import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;

View File

@ -8,7 +8,7 @@ import android.preference.PreferenceManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
public class PhoneCallReceiver extends BroadcastReceiver { public class PhoneCallReceiver extends BroadcastReceiver {
@ -40,35 +40,38 @@ public class PhoneCallReceiver extends BroadcastReceiver {
return; return;
} }
ServiceCommand callCommand = null; int callCommand = CallSpec.CALL_UNDEFINED;
switch (state) { switch (state) {
case TelephonyManager.CALL_STATE_RINGING: case TelephonyManager.CALL_STATE_RINGING:
mSavedNumber = number; mSavedNumber = number;
callCommand = ServiceCommand.CALL_INCOMING; callCommand = CallSpec.CALL_INCOMING;
break; break;
case TelephonyManager.CALL_STATE_OFFHOOK: case TelephonyManager.CALL_STATE_OFFHOOK:
if (mLastState == TelephonyManager.CALL_STATE_RINGING) { if (mLastState == TelephonyManager.CALL_STATE_RINGING) {
callCommand = ServiceCommand.CALL_START; callCommand = CallSpec.CALL_START;
} else { } else {
callCommand = ServiceCommand.CALL_OUTGOING; callCommand = CallSpec.CALL_OUTGOING;
mSavedNumber = number; mSavedNumber = number;
} }
break; break;
case TelephonyManager.CALL_STATE_IDLE: case TelephonyManager.CALL_STATE_IDLE:
if (mLastState == TelephonyManager.CALL_STATE_RINGING) { if (mLastState == TelephonyManager.CALL_STATE_RINGING) {
//missed call would be correct here //missed call would be correct here
callCommand = ServiceCommand.CALL_END; callCommand = CallSpec.CALL_END;
} else { } else {
callCommand = ServiceCommand.CALL_END; callCommand = CallSpec.CALL_END;
} }
break; break;
} }
if (callCommand != null) { if (callCommand != CallSpec.CALL_UNDEFINED) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
if ("never".equals(sharedPrefs.getString("notification_mode_calls", "always"))) { if ("never".equals(sharedPrefs.getString("notification_mode_calls", "always"))) {
return; return;
} }
GBApplication.deviceService().onSetCallState(mSavedNumber, null, callCommand); CallSpec callSpec = new CallSpec();
callSpec.number = mSavedNumber;
callSpec.command = callCommand;
GBApplication.deviceService().onSetCallState(callSpec);
} }
mLastState = state; mLastState = state;
} }

View File

@ -10,9 +10,10 @@ import java.util.ArrayList;
import java.util.UUID; import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService; import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
public class GBDeviceService implements DeviceService { public class GBDeviceService implements DeviceService {
@ -115,23 +116,23 @@ public class GBDeviceService implements DeviceService {
} }
@Override @Override
public void onSetCallState(String number, String name, ServiceCommand command) { public void onSetCallState(CallSpec callSpec) {
// name is actually ignored and provided by the service itself... // name is actually ignored and provided by the service itself...
Intent intent = createIntent().setAction(ACTION_CALLSTATE) Intent intent = createIntent().setAction(ACTION_CALLSTATE)
.putExtra(EXTRA_CALL_PHONENUMBER, number) .putExtra(EXTRA_CALL_PHONENUMBER, callSpec.number)
.putExtra(EXTRA_CALL_COMMAND, command); .putExtra(EXTRA_CALL_COMMAND, callSpec.command);
invokeService(intent); invokeService(intent);
} }
@Override @Override
public void onSetMusicInfo(String artist, String album, String track, int duration, int trackCount, int trackNr) { public void onSetMusicInfo(MusicSpec musicSpec) {
Intent intent = createIntent().setAction(ACTION_SETMUSICINFO) Intent intent = createIntent().setAction(ACTION_SETMUSICINFO)
.putExtra(EXTRA_MUSIC_ARTIST, artist) .putExtra(EXTRA_MUSIC_ARTIST, musicSpec.artist)
.putExtra(EXTRA_MUSIC_ALBUM, album) .putExtra(EXTRA_MUSIC_ALBUM, musicSpec.album)
.putExtra(EXTRA_MUSIC_TRACK, track) .putExtra(EXTRA_MUSIC_TRACK, musicSpec.track)
.putExtra(EXTRA_MUSIC_DURATION, duration) .putExtra(EXTRA_MUSIC_DURATION, musicSpec.duration)
.putExtra(EXTRA_MUSIC_TRACKCOUNT, trackCount) .putExtra(EXTRA_MUSIC_TRACKCOUNT, musicSpec.trackCount)
.putExtra(EXTRA_MUSIC_TRACKNR, trackNr); .putExtra(EXTRA_MUSIC_TRACKNR, musicSpec.trackNr);
invokeService(intent); invokeService(intent);
} }

View File

@ -0,0 +1,15 @@
package nodomain.freeyourgadget.gadgetbridge.model;
public class CallSpec {
public static final int CALL_UNDEFINED = 1;
public static final int CALL_ACCEPT = 1;
public static final int CALL_INCOMING = 2;
public static final int CALL_OUTGOING = 3;
public static final int CALL_REJECT = 4;
public static final int CALL_START = 5;
public static final int CALL_END = 6;
public String number;
public String name;
public int command;
}

View File

@ -0,0 +1,17 @@
package nodomain.freeyourgadget.gadgetbridge.model;
public class MusicSpec {
public static final int MUSIC_UNDEFINED = 0;
public static final int MUSIC_PLAY = 1;
public static final int MUSIC_PAUSE = 2;
public static final int MUSIC_PLAYPAUSE = 3;
public static final int MUSIC_NEXT = 4;
public static final int MUSIC_PREVIOUS = 5;
public String artist;
public String album;
public String track;
public int duration;
public int trackCount;
public int trackNr;
}

View File

@ -1,22 +0,0 @@
package nodomain.freeyourgadget.gadgetbridge.model;
public enum ServiceCommand {
UNDEFINED,
CALL_ACCEPT,
CALL_END,
CALL_INCOMING,
CALL_OUTGOING,
CALL_REJECT,
CALL_START,
MUSIC_PLAY,
MUSIC_PAUSE,
MUSIC_PLAYPAUSE,
MUSIC_NEXT,
MUSIC_PREVIOUS,
APP_INFO_NAME,
VERSION_FIRMWARE
}

View File

@ -1,6 +1,5 @@
package nodomain.freeyourgadget.gadgetbridge.service; package nodomain.freeyourgadget.gadgetbridge.service;
import android.app.Application;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent; import android.app.PendingIntent;

View File

@ -33,9 +33,10 @@ import nodomain.freeyourgadget.gadgetbridge.externalevents.SMSReceiver;
import nodomain.freeyourgadget.gadgetbridge.externalevents.TimeChangeReceiver; import nodomain.freeyourgadget.gadgetbridge.externalevents.TimeChangeReceiver;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
@ -64,10 +65,10 @@ import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_ALA
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_APP_CONFIG; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_APP_CONFIG;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_APP_START; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_APP_START;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_APP_UUID; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_APP_UUID;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_BOOLEAN_ENABLE;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_CALL_COMMAND; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_CALL_COMMAND;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_CALL_PHONENUMBER; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_CALL_PHONENUMBER;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_DEVICE_ADDRESS; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_DEVICE_ADDRESS;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_BOOLEAN_ENABLE;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_FIND_START; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_FIND_START;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_MUSIC_ALBUM; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_MUSIC_ALBUM;
import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_MUSIC_ARTIST; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_MUSIC_ARTIST;
@ -278,26 +279,32 @@ public class DeviceCommunicationService extends Service {
break; break;
} }
case ACTION_CALLSTATE: case ACTION_CALLSTATE:
ServiceCommand command = (ServiceCommand) intent.getSerializableExtra(EXTRA_CALL_COMMAND); int command = intent.getIntExtra(EXTRA_CALL_COMMAND, CallSpec.CALL_UNDEFINED);
String phoneNumber = intent.getStringExtra(EXTRA_CALL_PHONENUMBER); String phoneNumber = intent.getStringExtra(EXTRA_CALL_PHONENUMBER);
String callerName = null; String callerName = null;
if (phoneNumber != null) { if (phoneNumber != null) {
callerName = getContactDisplayNameByNumber(phoneNumber); callerName = getContactDisplayNameByNumber(phoneNumber);
} }
mDeviceSupport.onSetCallState(phoneNumber, callerName, command);
CallSpec callSpec = new CallSpec();
callSpec.command = command;
callSpec.number = phoneNumber;
callSpec.name = callerName;
mDeviceSupport.onSetCallState(callSpec);
break; break;
case ACTION_SETTIME: case ACTION_SETTIME:
mDeviceSupport.onSetTime(); mDeviceSupport.onSetTime();
break; break;
case ACTION_SETMUSICINFO: case ACTION_SETMUSICINFO:
String artist = intent.getStringExtra(EXTRA_MUSIC_ARTIST); MusicSpec musicSpec = new MusicSpec();
String album = intent.getStringExtra(EXTRA_MUSIC_ALBUM); musicSpec.artist = intent.getStringExtra(EXTRA_MUSIC_ARTIST);
String track = intent.getStringExtra(EXTRA_MUSIC_TRACK); musicSpec.album = intent.getStringExtra(EXTRA_MUSIC_ALBUM);
int duration = intent.getIntExtra(EXTRA_MUSIC_DURATION, 0); musicSpec.track = intent.getStringExtra(EXTRA_MUSIC_TRACK);
int trackCount = intent.getIntExtra(EXTRA_MUSIC_TRACKCOUNT, 0); musicSpec.duration = intent.getIntExtra(EXTRA_MUSIC_DURATION, 0);
int trackNr = intent.getIntExtra(EXTRA_MUSIC_TRACKNR, 0); musicSpec.trackCount = intent.getIntExtra(EXTRA_MUSIC_TRACKCOUNT, 0);
mDeviceSupport.onSetMusicInfo(artist, album, track, duration, trackCount, trackNr); musicSpec.trackNr = intent.getIntExtra(EXTRA_MUSIC_TRACKNR, 0);
mDeviceSupport.onSetMusicInfo(musicSpec);
break; break;
case ACTION_REQUEST_APPINFO: case ACTION_REQUEST_APPINFO:
mDeviceSupport.onAppInfoReq(); mDeviceSupport.onAppInfoReq();
@ -424,7 +431,10 @@ public class DeviceCommunicationService extends Service {
} }
if (mMusicPlaybackReceiver == null) { if (mMusicPlaybackReceiver == null) {
mMusicPlaybackReceiver = new MusicPlaybackReceiver(); mMusicPlaybackReceiver = new MusicPlaybackReceiver();
registerReceiver(mMusicPlaybackReceiver, new IntentFilter("com.android.music.metachanged")); IntentFilter filter = new IntentFilter();
filter.addAction("com.android.music.metachanged");
//filter.addAction("com.android.music.playstatechanged");
registerReceiver(mMusicPlaybackReceiver, filter);
} }
if (mTimeChangeReceiver == null) { if (mTimeChangeReceiver == null) {
mTimeChangeReceiver = new TimeChangeReceiver(); mTimeChangeReceiver = new TimeChangeReceiver();

View File

@ -13,8 +13,9 @@ import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
/** /**
* Wraps another device support instance and supports busy-checking and throttling of events. * Wraps another device support instance and supports busy-checking and throttling of events.
@ -131,19 +132,19 @@ public class ServiceDeviceSupport implements DeviceSupport {
// No throttling for the other events // No throttling for the other events
@Override @Override
public void onSetCallState(String number, String name, ServiceCommand command) { public void onSetCallState(CallSpec callSpec) {
if (checkBusy("set call state")) { if (checkBusy("set call state")) {
return; return;
} }
delegate.onSetCallState(number, name, command); delegate.onSetCallState(callSpec);
} }
@Override @Override
public void onSetMusicInfo(String artist, String album, String track, int duration, int trackCount, int trackNr) { public void onSetMusicInfo(MusicSpec musicSpec) {
if (checkBusy("set music info")) { if (checkBusy("set music info")) {
return; return;
} }
delegate.onSetMusicInfo(artist, album, track, duration, trackCount, trackNr); delegate.onSetMusicInfo(musicSpec);
} }
@Override @Override

View File

@ -20,9 +20,10 @@ public abstract class ConditionalWriteAction extends WriteAction {
/** /**
* Checks the condition whether the write shall happen or not. * Checks the condition whether the write shall happen or not.
* Returns the actual value to be written or null in case nothing shall be written. * Returns the actual value to be written or null in case nothing shall be written.
* * <p/>
* Note that returning null will not cause run() to return false, in other words, * Note that returning null will not cause run() to return false, in other words,
* the rest of the queue will still be executed. * the rest of the queue will still be executed.
*
* @return the value to be written or null to not write anything * @return the value to be written or null to not write anything
*/ */
protected abstract byte[] checkCondition(); protected abstract byte[] checkCondition();

View File

@ -34,10 +34,11 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice.State; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice.State;
import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
import nodomain.freeyourgadget.gadgetbridge.model.CalendarEvents; import nodomain.freeyourgadget.gadgetbridge.model.CalendarEvents;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
import nodomain.freeyourgadget.gadgetbridge.model.GenericItem; import nodomain.freeyourgadget.gadgetbridge.model.GenericItem;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.btle.AbstractBTLEDeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.btle.BtLEAction; import nodomain.freeyourgadget.gadgetbridge.service.btle.BtLEAction;
import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic; import nodomain.freeyourgadget.gadgetbridge.service.btle.GattCharacteristic;
@ -383,6 +384,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
/** /**
* Part of device initialization process. Do not call manually. * Part of device initialization process. Do not call manually.
*
* @param builder * @param builder
*/ */
private MiBandSupport setHeartrateSleepSupport(TransactionBuilder builder) { private MiBandSupport setHeartrateSleepSupport(TransactionBuilder builder) {
@ -558,8 +560,8 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
} }
@Override @Override
public void onSetCallState(String number, String name, ServiceCommand command) { public void onSetCallState(CallSpec callSpec) {
if (ServiceCommand.CALL_INCOMING.equals(command)) { if (callSpec.command == CallSpec.CALL_INCOMING) {
telephoneRinging = true; telephoneRinging = true;
AbortTransactionAction abortAction = new AbortTransactionAction() { AbortTransactionAction abortAction = new AbortTransactionAction() {
@Override @Override
@ -568,7 +570,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
} }
}; };
performPreferredNotification("incoming call", MiBandConst.ORIGIN_INCOMING_CALL, abortAction); performPreferredNotification("incoming call", MiBandConst.ORIGIN_INCOMING_CALL, abortAction);
} else if (ServiceCommand.CALL_START.equals(command) || ServiceCommand.CALL_END.equals(command)) { } else if ((callSpec.command == CallSpec.CALL_START) || (callSpec.command == CallSpec.CALL_END)) {
telephoneRinging = false; telephoneRinging = false;
} }
} }
@ -579,7 +581,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
} }
@Override @Override
public void onSetMusicInfo(String artist, String album, String track, int duration, int trackCount, int trackNr) { public void onSetMusicInfo(MusicSpec musicSpec) {
// not supported // not supported
} }

View File

@ -33,9 +33,9 @@ import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleColor;
import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleIconID; import nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleIconID;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol; import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol;
public class PebbleProtocol extends GBDeviceProtocol { public class PebbleProtocol extends GBDeviceProtocol {
@ -495,7 +495,7 @@ public class PebbleProtocol extends GBDeviceProtocol {
@Override @Override
public byte[] encodeFindDevice(boolean start) { public byte[] encodeFindDevice(boolean start) {
return encodeSetCallState("Where are you?", "Gadgetbridge", start ? ServiceCommand.CALL_INCOMING : ServiceCommand.CALL_END); return encodeSetCallState("Where are you?", "Gadgetbridge", start ? CallSpec.CALL_INCOMING : CallSpec.CALL_END);
} }
private static byte[] encodeExtensibleNotification(int id, int timestamp, String title, String subtitle, String body, String sourceName, boolean hasHandle, String[] cannedReplies) { private static byte[] encodeExtensibleNotification(int id, int timestamp, String title, String subtitle, String body, String sourceName, boolean hasHandle, String[] cannedReplies) {
@ -1044,20 +1044,20 @@ public class PebbleProtocol extends GBDeviceProtocol {
} }
@Override @Override
public byte[] encodeSetCallState(String number, String name, ServiceCommand command) { public byte[] encodeSetCallState(String number, String name, int command) {
String[] parts = {number, name}; String[] parts = {number, name};
byte pebbleCmd; byte pebbleCmd;
switch (command) { switch (command) {
case CALL_START: case CallSpec.CALL_START:
pebbleCmd = PHONECONTROL_START; pebbleCmd = PHONECONTROL_START;
break; break;
case CALL_END: case CallSpec.CALL_END:
pebbleCmd = PHONECONTROL_END; pebbleCmd = PHONECONTROL_END;
break; break;
case CALL_INCOMING: case CallSpec.CALL_INCOMING:
pebbleCmd = PHONECONTROL_INCOMINGCALL; pebbleCmd = PHONECONTROL_INCOMINGCALL;
break; break;
case CALL_OUTGOING: case CallSpec.CALL_OUTGOING:
// pebbleCmd = PHONECONTROL_OUTGOINGCALL; // pebbleCmd = PHONECONTROL_OUTGOINGCALL;
/* /*
* HACK/WORKAROUND for non-working outgoing call display. * HACK/WORKAROUND for non-working outgoing call display.

View File

@ -12,8 +12,9 @@ import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractSerialDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.serial.AbstractSerialDeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceIoThread; import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceIoThread;
import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol; import nodomain.freeyourgadget.gadgetbridge.service.serial.GBDeviceProtocol;
@ -99,16 +100,16 @@ public class PebbleSupport extends AbstractSerialDeviceSupport {
} }
@Override @Override
public void onSetCallState(String number, String name, ServiceCommand command) { public void onSetCallState(CallSpec callSpec) {
if (reconnect()) { if (reconnect()) {
super.onSetCallState(number, name, command); super.onSetCallState(callSpec);
} }
} }
@Override @Override
public void onSetMusicInfo(String artist, String album, String track, int duration, int trackCount, int trackNr) { public void onSetMusicInfo(MusicSpec musicSpec) {
if (reconnect()) { if (reconnect()) {
super.onSetMusicInfo(artist, album, track, duration, trackCount, trackNr); super.onSetMusicInfo(musicSpec);
} }
} }

View File

@ -8,8 +8,9 @@ import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes;
import nodomain.freeyourgadget.gadgetbridge.devices.EventHandler; import nodomain.freeyourgadget.gadgetbridge.devices.EventHandler;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
import nodomain.freeyourgadget.gadgetbridge.service.AbstractDeviceSupport; import nodomain.freeyourgadget.gadgetbridge.service.AbstractDeviceSupport;
/** /**
@ -120,14 +121,14 @@ public abstract class AbstractSerialDeviceSupport extends AbstractDeviceSupport
} }
@Override @Override
public void onSetCallState(String number, String name, ServiceCommand command) { public void onSetCallState(CallSpec callSpec) {
byte[] bytes = gbDeviceProtocol.encodeSetCallState(number, name, command); byte[] bytes = gbDeviceProtocol.encodeSetCallState(callSpec.number, callSpec.name, callSpec.command);
sendToDevice(bytes); sendToDevice(bytes);
} }
@Override @Override
public void onSetMusicInfo(String artist, String album, String track, int duration, int trackCount, int trackNr) { public void onSetMusicInfo(MusicSpec musicSpec) {
byte[] bytes = gbDeviceProtocol.encodeSetMusicInfo(artist, album, track, duration, trackCount, trackNr); byte[] bytes = gbDeviceProtocol.encodeSetMusicInfo(musicSpec.artist, musicSpec.album, musicSpec.track, musicSpec.duration, musicSpec.trackCount, musicSpec.trackNr);
sendToDevice(bytes); sendToDevice(bytes);
} }

View File

@ -4,7 +4,6 @@ import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
public abstract class GBDeviceProtocol { public abstract class GBDeviceProtocol {
@ -16,7 +15,7 @@ public abstract class GBDeviceProtocol {
return null; return null;
} }
public byte[] encodeSetCallState(String number, String name, ServiceCommand command) { public byte[] encodeSetCallState(String number, String name, int command) {
return null; return null;
} }
@ -60,7 +59,9 @@ public abstract class GBDeviceProtocol {
return null; return null;
} }
public byte[] encodeEnableHeartRateSleepSupport(boolean enable) { return null; } public byte[] encodeEnableHeartRateSleepSupport(boolean enable) {
return null;
}
public GBDeviceEvent[] decodeResponse(byte[] responseData) { public GBDeviceEvent[] decodeResponse(byte[] responseData) {
return null; return null;

View File

@ -3,15 +3,15 @@ package nodomain.freeyourgadget.gadgetbridge.service;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.UUID; import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
import nodomain.freeyourgadget.gadgetbridge.model.CallSpec;
import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec;
import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
public class TestDeviceSupport extends AbstractDeviceSupport { public class TestDeviceSupport extends AbstractDeviceSupport {
@ -61,12 +61,12 @@ public class TestDeviceSupport extends AbstractDeviceSupport {
} }
@Override @Override
public void onSetCallState(@Nullable String number, @Nullable String name, ServiceCommand command) { public void onSetCallState(CallSpec callSpec) {
} }
@Override @Override
public void onSetMusicInfo(String artist, String album, String track, int duration, int trackCount, int trackNr) { public void onSetMusicInfo(MusicSpec musicSpec) {
} }