diff --git a/.idea/misc.xml b/.idea/misc.xml index 1d9d626..5d19981 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,32 @@ + + + + + + + diff --git a/sample_app/sample_app.iml b/sample_app/sample_app.iml index a26e01b..3685686 100644 --- a/sample_app/sample_app.iml +++ b/sample_app/sample_app.iml @@ -82,6 +82,7 @@ + diff --git a/sample_app/src/main/AndroidManifest.xml b/sample_app/src/main/AndroidManifest.xml index d67bb8f..1d3170a 100644 --- a/sample_app/src/main/AndroidManifest.xml +++ b/sample_app/src/main/AndroidManifest.xml @@ -17,7 +17,7 @@ android:label="@string/app_name" android:theme="@style/AppTheme"> @@ -26,10 +26,10 @@ - + > mGattCharacteristics = new ArrayList<>(); @@ -172,7 +173,7 @@ public class DeviceControlActivity extends AppCompatActivity { // on the UI. private void displayGattServices(final List gattServices) { if (gattServices == null) return; - generateExportString(gattServices); + mExportString = mExporter.generateExportString(mDeviceName, mDeviceAddress, gattServices); String uuid = null; final String unknownServiceString = getResources().getString(R.string.unknown_service); @@ -223,55 +224,6 @@ public class DeviceControlActivity extends AppCompatActivity { invalidateOptionsMenu(); } - private void generateExportString(final List gattServices) { - final String unknownServiceString = getResources().getString(R.string.unknown_service); - final String unknownCharaString = getResources().getString(R.string.unknown_characteristic); - final StringBuilder exportBuilder = new StringBuilder(); - - exportBuilder.append("Device Name: "); - exportBuilder.append(mDeviceName); - exportBuilder.append('\n'); - exportBuilder.append("Device Address: "); - exportBuilder.append(mDeviceAddress); - exportBuilder.append('\n'); - exportBuilder.append('\n'); - - exportBuilder.append("Services:"); - exportBuilder.append("--------------------------"); - exportBuilder.append('\n'); - - String uuid = null; - for (final BluetoothGattService gattService : gattServices) { - uuid = gattService.getUuid().toString(); - - exportBuilder.append(GattAttributeResolver.getAttributeName(uuid, unknownServiceString)); - exportBuilder.append(" ("); - exportBuilder.append(uuid); - exportBuilder.append(')'); - exportBuilder.append('\n'); - - final List gattCharacteristics = gattService.getCharacteristics(); - for (final BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) { - uuid = gattCharacteristic.getUuid().toString(); - - exportBuilder.append('\t'); - exportBuilder.append(GattAttributeResolver.getAttributeName(uuid, unknownCharaString)); - exportBuilder.append(" ("); - exportBuilder.append(uuid); - exportBuilder.append(')'); - exportBuilder.append('\n'); - } - - exportBuilder.append('\n'); - exportBuilder.append('\n'); - } - - exportBuilder.append("--------------------------"); - exportBuilder.append('\n'); - - mExportString = exportBuilder.toString(); - } - @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -281,7 +233,6 @@ public class DeviceControlActivity extends AppCompatActivity { final BluetoothLeDevice device = intent.getParcelableExtra(EXTRA_DEVICE); mDeviceName = device.getName(); mDeviceAddress = device.getAddress(); - ButterKnife.bind(this); // Sets up UI references. @@ -291,6 +242,8 @@ public class DeviceControlActivity extends AppCompatActivity { getSupportActionBar().setTitle(mDeviceName); getSupportActionBar().setDisplayHomeAsUpEnabled(true); + mExporter = new Exporter(this); + final Intent gattServiceIntent = new Intent(this, BluetoothLeService.class); bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE); } diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/ui/control/Exporter.java b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/control/Exporter.java new file mode 100644 index 0000000..7a8fb8f --- /dev/null +++ b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/control/Exporter.java @@ -0,0 +1,70 @@ +package uk.co.alt236.btlescan.ui.control; + +import android.bluetooth.BluetoothGattCharacteristic; +import android.bluetooth.BluetoothGattService; +import android.content.Context; + +import java.util.List; + +import uk.co.alt236.bluetoothlelib.resolvers.GattAttributeResolver; +import uk.co.alt236.btlescan.R; + +/*package*/ class Exporter { + private final Context mContext; + + public Exporter(final Context context) { + mContext = context.getApplicationContext(); + } + + public String generateExportString(final String deviceName, + final String deviceAddress, + final List gattServices) { + + final String unknownServiceString = mContext.getString(R.string.unknown_service); + final String unknownCharaString = mContext.getString(R.string.unknown_characteristic); + final StringBuilder exportBuilder = new StringBuilder(); + + exportBuilder.append("Device Name: "); + exportBuilder.append(deviceName); + exportBuilder.append('\n'); + exportBuilder.append("Device Address: "); + exportBuilder.append(deviceAddress); + exportBuilder.append('\n'); + exportBuilder.append('\n'); + + exportBuilder.append("Services:"); + exportBuilder.append("--------------------------"); + exportBuilder.append('\n'); + + String uuid = null; + for (final BluetoothGattService gattService : gattServices) { + uuid = gattService.getUuid().toString(); + + exportBuilder.append(GattAttributeResolver.getAttributeName(uuid, unknownServiceString)); + exportBuilder.append(" ("); + exportBuilder.append(uuid); + exportBuilder.append(')'); + exportBuilder.append('\n'); + + final List gattCharacteristics = gattService.getCharacteristics(); + for (final BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) { + uuid = gattCharacteristic.getUuid().toString(); + + exportBuilder.append('\t'); + exportBuilder.append(GattAttributeResolver.getAttributeName(uuid, unknownCharaString)); + exportBuilder.append(" ("); + exportBuilder.append(uuid); + exportBuilder.append(')'); + exportBuilder.append('\n'); + } + + exportBuilder.append('\n'); + exportBuilder.append('\n'); + } + + exportBuilder.append("--------------------------"); + exportBuilder.append('\n'); + + return exportBuilder.toString(); + } +} diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceDetailsActivity.java b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/details/DeviceDetailsActivity.java similarity index 98% rename from sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceDetailsActivity.java rename to sample_app/src/main/java/uk/co/alt236/btlescan/ui/details/DeviceDetailsActivity.java index 7e90244..585411b 100644 --- a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceDetailsActivity.java +++ b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/details/DeviceDetailsActivity.java @@ -1,4 +1,4 @@ -package uk.co.alt236.btlescan.activities; +package uk.co.alt236.btlescan.ui.details; import android.content.Intent; import android.os.Bundle; @@ -28,6 +28,7 @@ import uk.co.alt236.bluetoothlelib.resolvers.CompanyIdentifierResolver; import uk.co.alt236.bluetoothlelib.util.AdRecordUtils; import uk.co.alt236.bluetoothlelib.util.ByteUtils; import uk.co.alt236.btlescan.R; +import uk.co.alt236.btlescan.ui.control.DeviceControlActivity; import uk.co.alt236.btlescan.util.TimeFormatter; public class DeviceDetailsActivity extends AppCompatActivity { diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/DeviceListAdapter.java similarity index 96% rename from sample_app/src/main/java/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java rename to sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/DeviceListAdapter.java index 97cbdbc..57f40da 100644 --- a/sample_app/src/main/java/uk/co/alt236/btlescan/adapters/LeDeviceListAdapter.java +++ b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/DeviceListAdapter.java @@ -1,4 +1,4 @@ -package uk.co.alt236.btlescan.adapters; +package uk.co.alt236.btlescan.ui.main; import android.app.Activity; import android.support.v4.widget.SimpleCursorAdapter; @@ -17,11 +17,11 @@ import uk.co.alt236.btlescan.util.Constants; import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor; // Adapter for holding devices found through scanning. -public class LeDeviceListAdapter extends SimpleCursorAdapter { +/*package*/ class DeviceListAdapter extends SimpleCursorAdapter { private final LayoutInflater mInflator; private final Activity mActivity; - public LeDeviceListAdapter(final Activity activity, final EasyObjectCursor cursor) { + public DeviceListAdapter(final Activity activity, final EasyObjectCursor cursor) { super(activity, R.layout.list_item_device, cursor, new String[0], new int[0], 0); mInflator = activity.getLayoutInflater(); mActivity = activity; diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DialogFactory.java b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/DialogFactory.java similarity index 97% rename from sample_app/src/main/java/uk/co/alt236/btlescan/activities/DialogFactory.java rename to sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/DialogFactory.java index 4ffb6f8..6c786a1 100644 --- a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DialogFactory.java +++ b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/DialogFactory.java @@ -1,4 +1,4 @@ -package uk.co.alt236.btlescan.activities; +package uk.co.alt236.btlescan.ui.main; import android.app.Activity; import android.app.Dialog; diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/MainActivity.java b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/MainActivity.java similarity index 93% rename from sample_app/src/main/java/uk/co/alt236/btlescan/activities/MainActivity.java rename to sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/MainActivity.java index 659c578..18dd387 100644 --- a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/MainActivity.java +++ b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/MainActivity.java @@ -1,4 +1,4 @@ -package uk.co.alt236.btlescan.activities; +package uk.co.alt236.btlescan.ui.main; import android.Manifest; import android.bluetooth.BluetoothAdapter; @@ -22,8 +22,8 @@ import butterknife.Bind; import butterknife.ButterKnife; import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice; import uk.co.alt236.btlescan.R; -import uk.co.alt236.btlescan.adapters.LeDeviceListAdapter; import uk.co.alt236.btlescan.containers.BluetoothLeDeviceStore; +import uk.co.alt236.btlescan.ui.details.DeviceDetailsActivity; import uk.co.alt236.btlescan.util.BluetoothLeScanner; import uk.co.alt236.btlescan.util.BluetoothUtils; import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor; @@ -42,7 +42,7 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte private BluetoothUtils mBluetoothUtils; private BluetoothLeScanner mScanner; - private LeDeviceListAdapter mLeDeviceListAdapter; + private DeviceListAdapter mDeviceListAdapter; private BluetoothLeDeviceStore mDeviceStore; private final BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() { @@ -56,8 +56,8 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte runOnUiThread(new Runnable() { @Override public void run() { - mLeDeviceListAdapter.swapCursor(c); - updateItemCount(mLeDeviceListAdapter.getCount()); + mDeviceListAdapter.swapCursor(c); + updateItemCount(mDeviceListAdapter.getCount()); } }); } @@ -100,7 +100,7 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte @Override public void onItemClick(AdapterView adapterView, View view, int position, long l) { - final BluetoothLeDevice device = mLeDeviceListAdapter.getItem(position); + final BluetoothLeDevice device = mDeviceListAdapter.getItem(position); if (device == null) return; final Intent intent = new Intent(this, DeviceDetailsActivity.class); @@ -176,8 +176,8 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte mDeviceStore.clear(); updateItemCount(0); - mLeDeviceListAdapter = new LeDeviceListAdapter(this, mDeviceStore.getDeviceCursor()); - mList.setAdapter(mLeDeviceListAdapter); + mDeviceListAdapter = new DeviceListAdapter(this, mDeviceStore.getDeviceCursor()); + mList.setAdapter(mDeviceListAdapter); mBluetoothUtils.askUserToEnableBluetoothIfNeeded(); if (mIsBluetoothOn && mIsBluetoothLePresent) { diff --git a/sample_app/src/main/res/layout/activity_main.xml b/sample_app/src/main/res/layout/activity_main.xml index f47a0c7..2ed9f24 100644 --- a/sample_app/src/main/res/layout/activity_main.xml +++ b/sample_app/src/main/res/layout/activity_main.xml @@ -7,7 +7,7 @@ android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" - tools:context=".activities.MainActivity"> + tools:context=".ui.main.MainActivity">