1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-07-09 07:01:33 +02:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java
Andreas Shimokawa 73187431b2 Use old Sleep Monitor Activity for Pebble/Morpheuz
The new one does not look good with Morpheuz data yet (samples every 10 minutes)
2015-06-13 20:37:53 +02:00

139 lines
5.6 KiB
Java

package nodomain.freeyourgadget.gadgetbridge;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.Intent;
import android.support.v4.content.LocalBroadcastManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.activities.SleepChartActivityOld;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommand;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandAppInfo;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandCallControl;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandMusicControl;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandSleepMonitorResult;
import nodomain.freeyourgadget.gadgetbridge.protocol.GBDeviceCommandVersionInfo;
// TODO: support option for a single reminder notification when notifications could not be delivered?
// conditions: app was running and received notifications, but device was not connected.
// maybe need to check for "unread notifications" on device for that.
public abstract class AbstractDeviceSupport implements DeviceSupport {
private static final Logger LOG = LoggerFactory.getLogger(AbstractDeviceSupport.class);
protected GBDevice gbDevice;
private BluetoothAdapter btAdapter;
private Context context;
public void initialize(GBDevice gbDevice, BluetoothAdapter btAdapter, Context context) {
this.gbDevice = gbDevice;
this.btAdapter = btAdapter;
this.context = context;
}
@Override
public boolean isConnected() {
return gbDevice.isConnected();
}
protected boolean isInitialized() {
return gbDevice.isInitialized();
}
@Override
public GBDevice getDevice() {
return gbDevice;
}
@Override
public BluetoothAdapter getBluetoothAdapter() {
return btAdapter;
}
@Override
public Context getContext() {
return context;
}
public void evaluateGBDeviceCommand(GBDeviceCommand deviceCmd) {
switch (deviceCmd.commandClass) {
case MUSIC_CONTROL:
handleGBDeviceCommand((GBDeviceCommandMusicControl) deviceCmd);
break;
case CALL_CONTROL:
handleGBDeviceCommand((GBDeviceCommandCallControl) deviceCmd);
break;
case VERSION_INFO:
handleGBDeviceCommand((GBDeviceCommandVersionInfo) deviceCmd);
break;
case APP_INFO:
handleGBDeviceCommand((GBDeviceCommandAppInfo) deviceCmd);
break;
case SLEEP_MONITOR_RES:
handleGBDeviceCommand((GBDeviceCommandSleepMonitorResult) deviceCmd);
break;
default:
break;
}
}
public void handleGBDeviceCommand(GBDeviceCommandMusicControl musicCmd) {
Context context = getContext();
LOG.info("Got command for MUSIC_CONTROL");
Intent musicIntent = new Intent(GBMusicControlReceiver.ACTION_MUSICCONTROL);
musicIntent.putExtra("command", musicCmd.command.ordinal());
musicIntent.setPackage(context.getPackageName());
context.sendBroadcast(musicIntent);
}
public void handleGBDeviceCommand(GBDeviceCommandCallControl callCmd) {
Context context = getContext();
LOG.info("Got command for CALL_CONTROL");
Intent callIntent = new Intent(GBCallControlReceiver.ACTION_CALLCONTROL);
callIntent.putExtra("command", callCmd.command.ordinal());
callIntent.setPackage(context.getPackageName());
context.sendBroadcast(callIntent);
}
public void handleGBDeviceCommand(GBDeviceCommandVersionInfo infoCmd) {
Context context = getContext();
LOG.info("Got command for VERSION_INFO");
if (gbDevice == null) {
return;
}
gbDevice.setFirmwareVersion(infoCmd.fwVersion);
gbDevice.setHardwareVersion(infoCmd.hwVersion);
gbDevice.sendDeviceUpdateIntent(context);
}
public void handleGBDeviceCommand(GBDeviceCommandAppInfo appInfoCmd) {
Context context = getContext();
LOG.info("Got command for APP_INFO");
Intent appInfoIntent = new Intent(AppManagerActivity.ACTION_REFRESH_APPLIST);
int appCount = appInfoCmd.apps.length;
appInfoIntent.putExtra("app_count", appCount);
for (Integer i = 0; i < appCount; i++) {
appInfoIntent.putExtra("app_name" + i.toString(), appInfoCmd.apps[i].getName());
appInfoIntent.putExtra("app_creator" + i.toString(), appInfoCmd.apps[i].getCreator());
appInfoIntent.putExtra("app_uuid" + i.toString(), appInfoCmd.apps[i].getUUID().toString());
appInfoIntent.putExtra("app_type" + i.toString(), appInfoCmd.apps[i].getType().ordinal());
}
LocalBroadcastManager.getInstance(context).sendBroadcast(appInfoIntent);
}
public void handleGBDeviceCommand(GBDeviceCommandSleepMonitorResult sleepMonitorResult) {
Context context = getContext();
LOG.info("Got command for SLEEP_MONIOR_RES");
Intent sleepMontiorIntent = new Intent(SleepChartActivityOld.ACTION_REFRESH);
sleepMontiorIntent.putExtra("smartalarm_from", sleepMonitorResult.smartalarm_from);
sleepMontiorIntent.putExtra("smartalarm_to", sleepMonitorResult.smartalarm_to);
sleepMontiorIntent.putExtra("recording_base_timestamp", sleepMonitorResult.recording_base_timestamp);
sleepMontiorIntent.putExtra("alarm_gone_off", sleepMonitorResult.alarm_gone_off);
LocalBroadcastManager.getInstance(context).sendBroadcast(sleepMontiorIntent);
}
}