Last refactoring for now: BluetoothCommunicationService

- rename to DeviceCommunicationService
- move all bluetooth related bits into separate DeviceSupportFactory
  class
This commit is contained in:
cpfeiffer 2015-08-04 01:01:14 +02:00
parent db4261e02b
commit c407ed1a76
20 changed files with 211 additions and 158 deletions

View File

@ -164,7 +164,7 @@
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
<service android:name=".service.BluetoothCommunicationService" />
<service android:name=".service.DeviceCommunicationService" />
<receiver
android:name=".externalevents.PhoneCallReceiver"

View File

@ -24,7 +24,7 @@ import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.adapter.GBDeviceAppAdapter;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
public class AppManagerActivity extends Activity {
@ -71,8 +71,8 @@ public class AppManagerActivity extends Activity {
@Override
public void onItemClick(AdapterView parent, View v, int position, long id) {
UUID uuid = appList.get(position).getUUID();
Intent startAppIntent = new Intent(AppManagerActivity.this, BluetoothCommunicationService.class);
startAppIntent.setAction(BluetoothCommunicationService.ACTION_STARTAPP);
Intent startAppIntent = new Intent(AppManagerActivity.this, DeviceCommunicationService.class);
startAppIntent.setAction(DeviceCommunicationService.ACTION_STARTAPP);
startAppIntent.putExtra("app_uuid", uuid.toString());
startService(startAppIntent);
}
@ -86,8 +86,8 @@ public class AppManagerActivity extends Activity {
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter);
Intent startIntent = new Intent(this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_REQUEST_APPINFO);
Intent startIntent = new Intent(this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_REQUEST_APPINFO);
startService(startIntent);
}
@ -106,8 +106,8 @@ public class AppManagerActivity extends Activity {
switch (item.getItemId()) {
case R.id.appmanager_app_delete:
if (selectedApp != null) {
Intent deleteIntent = new Intent(this, BluetoothCommunicationService.class);
deleteIntent.setAction(BluetoothCommunicationService.ACTION_DELETEAPP);
Intent deleteIntent = new Intent(this, DeviceCommunicationService.class);
deleteIntent.setAction(DeviceCommunicationService.ACTION_DELETEAPP);
deleteIntent.putExtra("app_uuid", selectedApp.getUUID().toString());
startService(deleteIntent);
}

View File

@ -11,7 +11,7 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.impl.GBAlarm;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.adapter.GBAlarmListAdapter;
@ -78,9 +78,9 @@ public class ConfigureAlarms extends ListActivity {
}
private void sendAlarmsToDevice() {
Intent startIntent = new Intent(ConfigureAlarms.this, BluetoothCommunicationService.class);
Intent startIntent = new Intent(ConfigureAlarms.this, DeviceCommunicationService.class);
startIntent.putParcelableArrayListExtra("alarms", mGBAlarmListAdapter.getAlarmList());
startIntent.setAction(BluetoothCommunicationService.ACTION_SET_ALARMS);
startIntent.setAction(DeviceCommunicationService.ACTION_SET_ALARMS);
startService(startIntent);
}
}

View File

@ -30,6 +30,7 @@ import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
@ -38,7 +39,6 @@ import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsActivity;
import nodomain.freeyourgadget.gadgetbridge.adapter.GBDeviceAdapter;
import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
public class ControlCenter extends Activity {
@ -117,9 +117,9 @@ public class ControlCenter extends Activity {
startActivity(startIntent);
}
} else {
Intent startIntent = new Intent(ControlCenter.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_CONNECT);
startIntent.putExtra(BluetoothCommunicationService.EXTRA_DEVICE_ADDRESS, deviceList.get(position).getAddress());
Intent startIntent = new Intent(ControlCenter.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_CONNECT);
startIntent.putExtra(DeviceCommunicationService.EXTRA_DEVICE_ADDRESS, deviceList.get(position).getAddress());
startService(startIntent);
}
}
@ -146,8 +146,8 @@ public class ControlCenter extends Activity {
Intent enableIntent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
startActivity(enableIntent);
}
Intent startIntent = new Intent(this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_START);
Intent startIntent = new Intent(this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_START);
startService(startIntent);
@ -160,14 +160,14 @@ public class ControlCenter extends Activity {
}
/**
* Requests information from the {@link BluetoothCommunicationService} about the connection state,
* Requests information from the {@link DeviceCommunicationService} about the connection state,
* firmware info, etc.
* <p/>
* Note that this method may cause an implicit device connection (for auto-connectable devices).
*/
private void requestDeviceInfo() {
Intent versionInfoIntent = new Intent(ControlCenter.this, BluetoothCommunicationService.class);
versionInfoIntent.setAction(BluetoothCommunicationService.ACTION_REQUEST_VERSIONINFO);
Intent versionInfoIntent = new Intent(ControlCenter.this, DeviceCommunicationService.class);
versionInfoIntent.setAction(DeviceCommunicationService.ACTION_REQUEST_VERSIONINFO);
startService(versionInfoIntent);
}
@ -213,16 +213,16 @@ public class ControlCenter extends Activity {
return true;
case R.id.controlcenter_fetch_activity_data:
if (selectedDevice != null) {
Intent startIntent = new Intent(this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_FETCH_ACTIVITY_DATA);
Intent startIntent = new Intent(this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_FETCH_ACTIVITY_DATA);
startService(startIntent);
}
return true;
case R.id.controlcenter_disconnect:
if (selectedDevice != null) {
selectedDevice = null;
Intent startIntent = new Intent(this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_DISCONNECT);
Intent startIntent = new Intent(this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_DISCONNECT);
startService(startIntent);
}
return true;
@ -251,8 +251,8 @@ public class ControlCenter extends Activity {
return true;
case R.id.controlcenter_take_screenshot:
if (selectedDevice != null) {
Intent startIntent = new Intent(this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_REQUEST_SCREENSHOT);
Intent startIntent = new Intent(this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_REQUEST_SCREENSHOT);
startService(startIntent);
}
return true;
@ -262,9 +262,9 @@ public class ControlCenter extends Activity {
}
private void findDevice(boolean start) {
Intent startIntent = new Intent(this, BluetoothCommunicationService.class);
Intent startIntent = new Intent(this, DeviceCommunicationService.class);
startIntent.putExtra("find_start", start);
startIntent.setAction(BluetoothCommunicationService.ACTION_FIND_DEVICE);
startIntent.setAction(DeviceCommunicationService.ACTION_FIND_DEVICE);
startService(startIntent);
}
@ -288,7 +288,7 @@ public class ControlCenter extends Activity {
startActivity(debugIntent);
return true;
case R.id.action_quit:
Intent stopIntent = new Intent(this, BluetoothCommunicationService.class);
Intent stopIntent = new Intent(this, DeviceCommunicationService.class);
stopService(stopIntent);
Intent quitIntent = new Intent(ControlCenter.ACTION_QUIT);

View File

@ -21,13 +21,13 @@ import org.slf4j.LoggerFactory;
import java.io.File;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.database.DBHandler;
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
@ -70,8 +70,8 @@ public class DebugActivity extends Activity {
sendSMSButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(DebugActivity.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_NOTIFICATION_SMS);
Intent startIntent = new Intent(DebugActivity.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_NOTIFICATION_SMS);
startIntent.putExtra("notification_sender", getResources().getText(R.string.app_name));
startIntent.putExtra("notification_body", editContent.getText().toString());
startService(startIntent);
@ -81,8 +81,8 @@ public class DebugActivity extends Activity {
sendEmailButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(DebugActivity.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_NOTIFICATION_EMAIL);
Intent startIntent = new Intent(DebugActivity.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_NOTIFICATION_EMAIL);
startIntent.putExtra("notification_sender", getResources().getText(R.string.app_name));
startIntent.putExtra("notification_subject", getResources().getText(R.string.test));
startIntent.putExtra("notification_body", editContent.getText().toString());
@ -94,8 +94,8 @@ public class DebugActivity extends Activity {
incomingCallButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(DebugActivity.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_CALLSTATE);
Intent startIntent = new Intent(DebugActivity.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_CALLSTATE);
startIntent.putExtra("call_phonenumber", editContent.getText().toString());
startIntent.putExtra("call_command", ServiceCommand.CALL_INCOMING.ordinal());
startService(startIntent);
@ -105,8 +105,8 @@ public class DebugActivity extends Activity {
outgoingCallButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(DebugActivity.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_CALLSTATE);
Intent startIntent = new Intent(DebugActivity.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_CALLSTATE);
startIntent.putExtra("call_phonenumber", editContent.getText().toString());
startIntent.putExtra("call_command", ServiceCommand.CALL_OUTGOING.ordinal());
startService(startIntent);
@ -117,8 +117,8 @@ public class DebugActivity extends Activity {
startCallButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(DebugActivity.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_CALLSTATE);
Intent startIntent = new Intent(DebugActivity.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_CALLSTATE);
startIntent.putExtra("call_command", ServiceCommand.CALL_START.ordinal());
startService(startIntent);
}
@ -127,8 +127,8 @@ public class DebugActivity extends Activity {
endCallButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(DebugActivity.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_CALLSTATE);
Intent startIntent = new Intent(DebugActivity.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_CALLSTATE);
startIntent.putExtra("call_command", ServiceCommand.CALL_END.ordinal());
startService(startIntent);
}
@ -153,8 +153,8 @@ public class DebugActivity extends Activity {
rebootButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(DebugActivity.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_REBOOT);
Intent startIntent = new Intent(DebugActivity.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_REBOOT);
startService(startIntent);
}
});
@ -163,8 +163,8 @@ public class DebugActivity extends Activity {
setMusicInfoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(DebugActivity.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_SETMUSICINFO);
Intent startIntent = new Intent(DebugActivity.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_SETMUSICINFO);
startIntent.putExtra("music_artist", editContent.getText().toString() + "(artist)");
startIntent.putExtra("music_album", editContent.getText().toString() + "(album)");
startIntent.putExtra("music_track", editContent.getText().toString() + "(track)");
@ -176,8 +176,8 @@ public class DebugActivity extends Activity {
setTimeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(DebugActivity.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_SETTIME);
Intent startIntent = new Intent(DebugActivity.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_SETTIME);
startService(startIntent);
}
});

View File

@ -17,7 +17,7 @@ import android.widget.TextView;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceApp;
@ -104,14 +104,14 @@ public class FwAppInstallerActivity extends Activity {
installButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startIntent = new Intent(FwAppInstallerActivity.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_INSTALL);
Intent startIntent = new Intent(FwAppInstallerActivity.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_INSTALL);
startIntent.putExtra("uri", uri.toString());
startService(startIntent);
}
});
Intent versionInfoIntent = new Intent(this, BluetoothCommunicationService.class);
versionInfoIntent.setAction(BluetoothCommunicationService.ACTION_REQUEST_VERSIONINFO);
Intent versionInfoIntent = new Intent(this, DeviceCommunicationService.class);
versionInfoIntent.setAction(DeviceCommunicationService.ACTION_REQUEST_VERSIONINFO);
startService(versionInfoIntent);
}

View File

@ -23,7 +23,7 @@ import org.slf4j.LoggerFactory;
import java.util.Locale;
import nodomain.freeyourgadget.gadgetbridge.activities.ControlCenter;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.R;
@ -117,8 +117,8 @@ public class ChartsActivity extends FragmentActivity {
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.charts_fetch_activity_data:
Intent startIntent = new Intent(this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_FETCH_ACTIVITY_DATA);
Intent startIntent = new Intent(this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_FETCH_ACTIVITY_DATA);
startService(startIntent);
return true;
default:

View File

@ -12,7 +12,7 @@ import android.support.v4.content.LocalBroadcastManager;
import android.widget.TextView;
import android.widget.Toast;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.activities.ControlCenter;
import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
@ -105,14 +105,14 @@ public class MiBandPairingActivity extends Activity {
IntentFilter filter = new IntentFilter(GBDevice.ACTION_DEVICE_CHANGED);
LocalBroadcastManager.getInstance(this).registerReceiver(mPairingReceiver, filter);
Intent serviceIntent = new Intent(this, BluetoothCommunicationService.class);
serviceIntent.setAction(BluetoothCommunicationService.ACTION_START);
Intent serviceIntent = new Intent(this, DeviceCommunicationService.class);
serviceIntent.setAction(DeviceCommunicationService.ACTION_START);
startService(serviceIntent);
serviceIntent = new Intent(this, BluetoothCommunicationService.class);
serviceIntent.setAction(BluetoothCommunicationService.ACTION_CONNECT);
serviceIntent.putExtra(BluetoothCommunicationService.EXTRA_PERFORM_PAIR, true);
serviceIntent.putExtra(BluetoothCommunicationService.EXTRA_DEVICE_ADDRESS, macAddress);
serviceIntent = new Intent(this, DeviceCommunicationService.class);
serviceIntent.setAction(DeviceCommunicationService.ACTION_CONNECT);
serviceIntent.putExtra(DeviceCommunicationService.EXTRA_PERFORM_PAIR, true);
serviceIntent.putExtra(DeviceCommunicationService.EXTRA_DEVICE_ADDRESS, macAddress);
startService(serviceIntent);
}

View File

@ -8,7 +8,7 @@ import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v4.content.LocalBroadcastManager;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.activities.ControlCenter;
public class BluetoothStateChangeReceiver extends BroadcastReceiver {
@ -28,17 +28,17 @@ public class BluetoothStateChangeReceiver extends BroadcastReceiver {
}
String deviceAddress = sharedPrefs.getString("last_device_address", null);
Intent startIntent = new Intent(context, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_START);
Intent startIntent = new Intent(context, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_START);
context.startService(startIntent);
if (deviceAddress != null) {
Intent connectIntent = new Intent(context, BluetoothCommunicationService.class);
connectIntent.setAction(BluetoothCommunicationService.ACTION_CONNECT);
connectIntent.putExtra(BluetoothCommunicationService.EXTRA_DEVICE_ADDRESS, deviceAddress);
Intent connectIntent = new Intent(context, DeviceCommunicationService.class);
connectIntent.setAction(DeviceCommunicationService.ACTION_CONNECT);
connectIntent.putExtra(DeviceCommunicationService.EXTRA_DEVICE_ADDRESS, deviceAddress);
context.startService(connectIntent);
}
} else if (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_OFF) {
Intent stopIntent = new Intent(context, BluetoothCommunicationService.class);
Intent stopIntent = new Intent(context, DeviceCommunicationService.class);
context.stopService(stopIntent);
Intent quitIntent = new Intent(ControlCenter.ACTION_QUIT);

View File

@ -12,7 +12,7 @@ import android.preference.PreferenceManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
public class K9Receiver extends BroadcastReceiver {
@ -65,8 +65,8 @@ public class K9Receiver extends BroadcastReceiver {
} while (c.moveToNext());
c.close();
Intent startIntent = new Intent(context, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_NOTIFICATION_EMAIL);
Intent startIntent = new Intent(context, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_NOTIFICATION_EMAIL);
startIntent.putExtra("notification_sender", sender);
startIntent.putExtra("notification_subject", subject);
startIntent.putExtra("notification_body", preview);

View File

@ -7,7 +7,7 @@ import android.content.Intent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
public class MusicPlaybackReceiver extends BroadcastReceiver {
private static final Logger LOG = LoggerFactory.getLogger(MusicPlaybackReceiver.class);
@ -20,8 +20,8 @@ public class MusicPlaybackReceiver extends BroadcastReceiver {
LOG.info("Current track: " + artist + ", " + album + ", " + track);
Intent startIntent = new Intent(context, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_SETMUSICINFO);
Intent startIntent = new Intent(context, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_SETMUSICINFO);
startIntent.putExtra("music_artist", artist);
startIntent.putExtra("music_album", album);
startIntent.putExtra("music_track", track);

View File

@ -17,7 +17,7 @@ import android.support.v4.content.LocalBroadcastManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
public class NotificationListener extends NotificationListenerService {
@ -53,7 +53,7 @@ public class NotificationListener extends NotificationListenerService {
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
/*
* return early if BluetoothCommunicationService is not running,
* return early if DeviceCommunicationService is not running,
* else the service would get started every time we get a notification.
* unfortunately we cannot enable/disable NotificationListener at runtime like we do with
* broadcast receivers because it seems to invalidate the permissions that are
@ -62,7 +62,7 @@ public class NotificationListener extends NotificationListenerService {
boolean isServiceRunning = false;
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (BluetoothCommunicationService.class.getName().equals(service.service.getClassName())) {
if (DeviceCommunicationService.class.getName().equals(service.service.getClassName())) {
isServiceRunning = true;
}
}
@ -119,8 +119,8 @@ public class NotificationListener extends NotificationListenerService {
}
if (content != null) {
Intent startIntent = new Intent(NotificationListener.this, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_NOTIFICATION_GENERIC);
Intent startIntent = new Intent(NotificationListener.this, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_NOTIFICATION_GENERIC);
startIntent.putExtra("notification_title", title);
startIntent.putExtra("notification_body", content);
startService(startIntent);

View File

@ -12,7 +12,7 @@ import org.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
public class PebbleReceiver extends BroadcastReceiver {
@ -51,8 +51,8 @@ public class PebbleReceiver extends BroadcastReceiver {
}
if (title != null && body != null) {
Intent startIntent = new Intent(context, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_NOTIFICATION_SMS);
Intent startIntent = new Intent(context, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_NOTIFICATION_SMS);
startIntent.putExtra("notification_sender", title);
startIntent.putExtra("notification_body", body);
context.startService(startIntent);

View File

@ -5,7 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
@ -62,8 +62,8 @@ public class PhoneCallReceiver extends BroadcastReceiver {
break;
}
if (callCommand != null) {
Intent startIntent = new Intent(context, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_CALLSTATE);
Intent startIntent = new Intent(context, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_CALLSTATE);
startIntent.putExtra("call_phonenumber", mSavedNumber);
startIntent.putExtra("call_command", callCommand.ordinal());
context.startService(startIntent);

View File

@ -9,7 +9,7 @@ import android.os.PowerManager;
import android.preference.PreferenceManager;
import android.telephony.SmsMessage;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
public class SMSReceiver extends BroadcastReceiver {
@ -36,8 +36,8 @@ public class SMSReceiver extends BroadcastReceiver {
String body = message.getDisplayMessageBody();
String sender = message.getOriginatingAddress();
if (sender != null && body != null) {
Intent startIntent = new Intent(context, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_NOTIFICATION_SMS);
Intent startIntent = new Intent(context, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_NOTIFICATION_SMS);
startIntent.putExtra("notification_sender", sender);
startIntent.putExtra("notification_body", body);
context.startService(startIntent);

View File

@ -9,7 +9,7 @@ import android.preference.PreferenceManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import nodomain.freeyourgadget.gadgetbridge.service.BluetoothCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
public class TimeChangeReceiver extends BroadcastReceiver {
@ -23,8 +23,8 @@ public class TimeChangeReceiver extends BroadcastReceiver {
if (sharedPrefs.getBoolean("datetime_synconconnect", true) && (action.equals(Intent.ACTION_TIME_CHANGED) || action.equals(Intent.ACTION_TIMEZONE_CHANGED))) {
LOG.info("Time or Timezone changed, syncing with device");
Intent startIntent = new Intent(context, BluetoothCommunicationService.class);
startIntent.setAction(BluetoothCommunicationService.ACTION_SETTIME);
Intent startIntent = new Intent(context, DeviceCommunicationService.class);
startIntent.setAction(DeviceCommunicationService.ACTION_SETTIME);
context.startService(startIntent);
}
}

View File

@ -2,8 +2,6 @@ package nodomain.freeyourgadget.gadgetbridge.service;
import android.app.NotificationManager;
import android.app.Service;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
@ -24,54 +22,51 @@ import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice.State;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.model.Alarm;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.MiBandSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.PebbleSupport;
import nodomain.freeyourgadget.gadgetbridge.model.ServiceCommand;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
public class BluetoothCommunicationService extends Service {
public class DeviceCommunicationService extends Service {
public static final String ACTION_START
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.start";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.start";
public static final String ACTION_CONNECT
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.connect";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.connect";
public static final String ACTION_NOTIFICATION_GENERIC
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.notification_generic";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.notification_generic";
public static final String ACTION_NOTIFICATION_SMS
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.notification_sms";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.notification_sms";
public static final String ACTION_NOTIFICATION_EMAIL
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.notification_email";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.notification_email";
public static final String ACTION_CALLSTATE
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.callstate";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.callstate";
public static final String ACTION_SETTIME
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.settime";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.settime";
public static final String ACTION_SETMUSICINFO
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.setmusicinfo";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.setmusicinfo";
public static final String ACTION_REQUEST_VERSIONINFO
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.request_versioninfo";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.request_versioninfo";
public static final String ACTION_REQUEST_APPINFO
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.request_appinfo";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.request_appinfo";
public static final String ACTION_REQUEST_SCREENSHOT
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.request_screenshot";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.request_screenshot";
public static final String ACTION_STARTAPP
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.startapp";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.startapp";
public static final String ACTION_DELETEAPP
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.deleteapp";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.deleteapp";
public static final String ACTION_INSTALL
= "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.install";
public static final String ACTION_REBOOT = "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.reboot";
public static final String ACTION_FETCH_ACTIVITY_DATA = "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.fetch_activity_data";
public static final String ACTION_DISCONNECT = "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.disconnect";
public static final String ACTION_FIND_DEVICE = "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.find_device";
public static final String ACTION_SET_ALARMS = "nodomain.freeyourgadget.gadgetbridge.bluetoothcommunicationservice.action.set_alarms";
= "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.install";
public static final String ACTION_REBOOT = "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.reboot";
public static final String ACTION_FETCH_ACTIVITY_DATA = "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.fetch_activity_data";
public static final String ACTION_DISCONNECT = "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.disconnect";
public static final String ACTION_FIND_DEVICE = "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.find_device";
public static final String ACTION_SET_ALARMS = "nodomain.freeyourgadget.gadgetbridge.devicecommunicationservice.action.set_alarms";
public static final String EXTRA_PERFORM_PAIR = "perform_pair";
private static final Logger LOG = LoggerFactory.getLogger(BluetoothCommunicationService.class);
private static final Logger LOG = LoggerFactory.getLogger(DeviceCommunicationService.class);
public static final String EXTRA_DEVICE_ADDRESS = "device_address";
private boolean mStarted = false;
@ -99,7 +94,7 @@ public class BluetoothCommunicationService extends Service {
@Override
public void onCreate() {
LOG.debug("BluetoothCommunicationService is being created");
LOG.debug("DeviceCommunicationService is being created");
super.onCreate();
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, new IntentFilter(GBDevice.ACTION_DEVICE_CHANGED));
}
@ -146,43 +141,30 @@ public class BluetoothCommunicationService extends Service {
switch (action) {
case ACTION_CONNECT:
//Check the system status
BluetoothAdapter mBtAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBtAdapter == null) {
Toast.makeText(this, R.string.bluetooth_is_not_supported_, Toast.LENGTH_SHORT).show();
} else if (!mBtAdapter.isEnabled()) {
Toast.makeText(this, R.string.bluetooth_is_disabled_, Toast.LENGTH_SHORT).show();
} else {
String btDeviceAddress = intent.getStringExtra(EXTRA_DEVICE_ADDRESS);
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
sharedPrefs.edit().putString("last_device_address", btDeviceAddress).apply();
String btDeviceAddress = intent.getStringExtra(EXTRA_DEVICE_ADDRESS);
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
sharedPrefs.edit().putString("last_device_address", btDeviceAddress).apply();
if (btDeviceAddress != null && !isConnected() && !isConnecting()) {
if (btDeviceAddress != null && !isConnected() && !isConnecting()) {
if (mDeviceSupport != null) {
mDeviceSupport.dispose();
mDeviceSupport = null;
}
try {
DeviceSupportFactory factory = new DeviceSupportFactory(this);
mDeviceSupport = factory.createDeviceSupport(btDeviceAddress);
if (mDeviceSupport != null) {
mDeviceSupport.dispose();
mDeviceSupport = null;
}
try {
BluetoothDevice btDevice = mBtAdapter.getRemoteDevice(btDeviceAddress);
if (btDevice.getName() == null || btDevice.getName().equals("MI")) { //FIXME: workaround for Miband not being paired
mGBDevice = new GBDevice(btDeviceAddress, "MI", DeviceType.MIBAND);
mDeviceSupport = new ServiceDeviceSupport(new MiBandSupport());
} else if (btDevice.getName().indexOf("Pebble") == 0) {
mGBDevice = new GBDevice(btDeviceAddress, btDevice.getName(), DeviceType.PEBBLE);
mDeviceSupport = new ServiceDeviceSupport(new PebbleSupport());
mGBDevice = mDeviceSupport.getDevice();
if (pair) {
mDeviceSupport.pair();
} else {
mDeviceSupport.connect();
}
if (mDeviceSupport != null) {
mDeviceSupport.setContext(mGBDevice, mBtAdapter, this);
if (pair) {
mDeviceSupport.pair();
} else {
mDeviceSupport.connect();
}
}
} catch (Exception e) {
Toast.makeText(this, R.string.cannot_connect_bt_address_invalid_, Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
} catch (Exception e) {
GB.toast(this, getString(R.string.cannot_connect, e.getMessage()), Toast.LENGTH_SHORT, GB.ERROR);
mDeviceSupport = null;
mGBDevice = null;
}
}
break;
@ -294,7 +276,7 @@ public class BluetoothCommunicationService extends Service {
@Override
public void onDestroy() {
LOG.debug("BluetoothCommunicationService is being destroyed");
LOG.debug("DeviceCommunicationService is being destroyed");
super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);

View File

@ -8,7 +8,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
/**
* Provides the communication support for a specific device. Instances will <b>only</b>
* be used inside the BluetoothCommunicationService. Has hooks to manage the life cycle
* be used inside the DeviceCommunicationService. Has hooks to manage the life cycle
* of a device: instances of this interface will be created, initialized, and disposed
* as needed.
* <p/>

View File

@ -0,0 +1,70 @@
package nodomain.freeyourgadget.gadgetbridge.service;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.widget.Toast;
import nodomain.freeyourgadget.gadgetbridge.GBException;
import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceType;
import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.MiBandSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.pebble.PebbleSupport;
import nodomain.freeyourgadget.gadgetbridge.util.GB;
public class DeviceSupportFactory {
private final BluetoothAdapter mBtAdapter;
private Context mContext;
public DeviceSupportFactory(Context context) {
mContext = context;
mBtAdapter = BluetoothAdapter.getDefaultAdapter();
}
public synchronized DeviceSupport createDeviceSupport(String deviceAddress) throws GBException {
DeviceSupport deviceSupport = createBTDeviceSupport(deviceAddress);
if (deviceSupport != null) {
return deviceSupport;
}
// support for other kinds of transports
// no device found, check transport availability and warn
checkBtAvailability();
return null;
}
private void checkBtAvailability() {
if (mBtAdapter == null) {
GB.toast(mContext.getString(R.string.bluetooth_is_not_supported_), Toast.LENGTH_SHORT, GB.WARN);
} else if (!mBtAdapter.isEnabled()) {
GB.toast(mContext.getString(R.string.bluetooth_is_disabled_), Toast.LENGTH_SHORT, GB.WARN);
}
}
private DeviceSupport createBTDeviceSupport(String deviceAddress) throws GBException {
if (mBtAdapter != null && mBtAdapter.isEnabled()) {
GBDevice gbDevice = null;
DeviceSupport deviceSupport = null;
try {
BluetoothDevice btDevice = mBtAdapter.getRemoteDevice(deviceAddress);
if (btDevice.getName() == null || btDevice.getName().equals("MI")) { //FIXME: workaround for Miband not being paired
gbDevice = new GBDevice(deviceAddress, "MI", DeviceType.MIBAND);
deviceSupport = new MiBandSupport();
} else if (btDevice.getName().indexOf("Pebble") == 0) {
gbDevice = new GBDevice(deviceAddress, btDevice.getName(), DeviceType.PEBBLE);
deviceSupport = new PebbleSupport();
}
if (deviceSupport != null) {
deviceSupport = new ServiceDeviceSupport(deviceSupport);
deviceSupport.setContext(gbDevice, mBtAdapter, mContext);
return deviceSupport;
}
} catch (Exception e) {
throw new GBException(mContext.getString(R.string.cannot_connect_bt_address_invalid_, e));
}
}
return null;
}
}

View File

@ -160,4 +160,5 @@
<string name="miband_prefs_fitness_goal">Target steps for each day</string>
<string name="dbaccess_error_executing">Error executing \'%1$s\'</string>
<string name="controlcenter_start_activitymonitor">Your Activity (ALPHA)</string>
<string name="cannot_connect">Cannot connect: %1$s</string>
</resources>