diff --git a/sample_app/sample_app.iml b/sample_app/sample_app.iml
index fa79116..4d16de8 100644
--- a/sample_app/sample_app.iml
+++ b/sample_app/sample_app.iml
@@ -64,14 +64,6 @@
-
-
-
-
-
-
-
-
@@ -80,6 +72,14 @@
+
+
+
+
+
+
+
+
@@ -131,6 +131,7 @@
+
\ No newline at end of file
diff --git a/sample_app/src/main/AndroidManifest.xml b/sample_app/src/main/AndroidManifest.xml
index 1d3170a..51d15d9 100644
--- a/sample_app/src/main/AndroidManifest.xml
+++ b/sample_app/src/main/AndroidManifest.xml
@@ -1,15 +1,14 @@
-
+
-
-
+
+
+ android:required="false" />
-
+
-
+
-
-
-
+
+
+
+ android:enabled="true" />
\ No newline at end of file
diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/ui/common/Navigation.java b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/common/Navigation.java
new file mode 100644
index 0000000..bae79c3
--- /dev/null
+++ b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/common/Navigation.java
@@ -0,0 +1,34 @@
+package uk.co.alt236.btlescan.ui.common;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.support.v4.app.ActivityCompat;
+
+import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice;
+import uk.co.alt236.btlescan.ui.control.DeviceControlActivity;
+import uk.co.alt236.btlescan.ui.details.DeviceDetailsActivity;
+
+public class Navigation {
+
+ private final Activity mActivity;
+
+ public Navigation(final Activity activity) {
+ mActivity = activity;
+ }
+
+ public void openDetailsActivity(final BluetoothLeDevice device) {
+ final Intent intent = DeviceDetailsActivity.createIntent(mActivity, device);
+
+ startActivity(intent);
+ }
+
+ public void startControlActivity(final BluetoothLeDevice device) {
+ final Intent intent = DeviceControlActivity.createIntent(mActivity, device);
+
+ startActivity(intent);
+ }
+
+ private void startActivity(final Intent intent) {
+ ActivityCompat.startActivity(mActivity, intent, null);
+ }
+}
diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/ui/control/DeviceControlActivity.java b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/control/DeviceControlActivity.java
index 98ce4ca..727be6f 100644
--- a/sample_app/src/main/java/uk/co/alt236/btlescan/ui/control/DeviceControlActivity.java
+++ b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/control/DeviceControlActivity.java
@@ -26,6 +26,7 @@ import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
+import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
@@ -55,7 +56,7 @@ import uk.co.alt236.btlescan.services.BluetoothLeService;
* Bluetooth LE API.
*/
public class DeviceControlActivity extends AppCompatActivity {
- public static final String EXTRA_DEVICE = DeviceControlActivity.class.getName() + ".EXTRA_DEVICE";
+ private static final String EXTRA_DEVICE = DeviceControlActivity.class.getName() + ".EXTRA_DEVICE";
private final static String TAG = DeviceControlActivity.class.getSimpleName();
private static final String LIST_NAME = "NAME";
private static final String LIST_UUID = "UUID";
@@ -103,7 +104,7 @@ public class DeviceControlActivity extends AppCompatActivity {
return false;
}
};
- private String mDeviceAddress;
+
// Code to manage Service lifecycle.
private final ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
@@ -114,7 +115,7 @@ public class DeviceControlActivity extends AppCompatActivity {
finish();
}
// Automatically connects to the device upon successful start-up initialization.
- mBluetoothLeService.connect(mDeviceAddress);
+ mBluetoothLeService.connect(mDevice.getAddress());
}
@Override
@@ -122,7 +123,7 @@ public class DeviceControlActivity extends AppCompatActivity {
mBluetoothLeService = null;
}
};
- private String mDeviceName;
+ private BluetoothLeDevice mDevice;
private boolean mConnected = false;
private String mExportString;
// Handles various events fired by the Service.
@@ -173,7 +174,10 @@ public class DeviceControlActivity extends AppCompatActivity {
// on the UI.
private void displayGattServices(final List gattServices) {
if (gattServices == null) return;
- mExportString = mExporter.generateExportString(mDeviceName, mDeviceAddress, gattServices);
+ mExportString = mExporter.generateExportString(
+ mDevice.getName(),
+ mDevice.getAddress(),
+ gattServices);
String uuid = null;
final String unknownServiceString = getResources().getString(R.string.unknown_service);
@@ -230,16 +234,14 @@ public class DeviceControlActivity extends AppCompatActivity {
setContentView(R.layout.activity_gatt_services);
final Intent intent = getIntent();
- final BluetoothLeDevice device = intent.getParcelableExtra(EXTRA_DEVICE);
- mDeviceName = device.getName();
- mDeviceAddress = device.getAddress();
+ mDevice = intent.getParcelableExtra(EXTRA_DEVICE);
ButterKnife.bind(this);
// Sets up UI references.
- ((TextView) findViewById(R.id.device_address)).setText(mDeviceAddress);
+ ((TextView) findViewById(R.id.device_address)).setText(mDevice.getAddress());
mGattServicesList.setOnChildClickListener(servicesListClickListner);
- getSupportActionBar().setTitle(mDeviceName);
+ getSupportActionBar().setTitle(mDevice.getName());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mExporter = new Exporter(this);
@@ -279,7 +281,7 @@ public class DeviceControlActivity extends AppCompatActivity {
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_connect:
- mBluetoothLeService.connect(mDeviceAddress);
+ mBluetoothLeService.connect(mDevice.getAddress());
return true;
case R.id.menu_disconnect:
mBluetoothLeService.disconnect();
@@ -289,7 +291,10 @@ public class DeviceControlActivity extends AppCompatActivity {
return true;
case R.id.menu_share:
final Intent intent = new Intent(android.content.Intent.ACTION_SEND);
- final String subject = getString(R.string.exporter_email_device_services_subject, mDeviceName, mDeviceAddress);
+ final String subject = getString(
+ R.string.exporter_email_device_services_subject,
+ mDevice.getName(),
+ mDevice.getAddress());
intent.setType("text/plain");
intent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
@@ -315,7 +320,7 @@ public class DeviceControlActivity extends AppCompatActivity {
super.onResume();
registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter());
if (mBluetoothLeService != null) {
- final boolean result = mBluetoothLeService.connect(mDeviceAddress);
+ final boolean result = mBluetoothLeService.connect(mDevice.getAddress());
Log.d(TAG, "Connect request result=" + result);
}
}
@@ -339,7 +344,7 @@ public class DeviceControlActivity extends AppCompatActivity {
}
mConnectionState.setText(resourceId);
- mConnectionState.setTextColor(getResources().getColor(colourId));
+ mConnectionState.setTextColor(ContextCompat.getColor(DeviceControlActivity.this, colourId));
}
});
}
@@ -360,4 +365,10 @@ public class DeviceControlActivity extends AppCompatActivity {
return string;
}
}
+
+ public static Intent createIntent(final Context context, final BluetoothLeDevice device) {
+ final Intent intent = new Intent(context, DeviceControlActivity.class);
+ intent.putExtra(DeviceControlActivity.EXTRA_DEVICE, device);
+ return intent;
+ }
}
\ No newline at end of file
diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/ui/details/DeviceDetailsActivity.java b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/details/DeviceDetailsActivity.java
index 5a8a68a..12cd7d4 100644
--- a/sample_app/src/main/java/uk/co/alt236/btlescan/ui/details/DeviceDetailsActivity.java
+++ b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/details/DeviceDetailsActivity.java
@@ -1,5 +1,6 @@
package uk.co.alt236.btlescan.ui.details;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
@@ -21,9 +22,9 @@ import uk.co.alt236.bluetoothlelib.device.beacon.BeaconUtils;
import uk.co.alt236.bluetoothlelib.device.beacon.ibeacon.IBeaconManufacturerData;
import uk.co.alt236.bluetoothlelib.util.ByteUtils;
import uk.co.alt236.btlescan.R;
+import uk.co.alt236.btlescan.ui.common.Navigation;
import uk.co.alt236.btlescan.ui.common.recyclerview.RecyclerViewBinderCore;
import uk.co.alt236.btlescan.ui.common.recyclerview.RecyclerViewItem;
-import uk.co.alt236.btlescan.ui.control.DeviceControlActivity;
import uk.co.alt236.btlescan.ui.details.recyclerview.model.AdRecordItem;
import uk.co.alt236.btlescan.ui.details.recyclerview.model.DeviceInfoItem;
import uk.co.alt236.btlescan.ui.details.recyclerview.model.HeaderItem;
@@ -32,7 +33,7 @@ import uk.co.alt236.btlescan.ui.details.recyclerview.model.RssiItem;
import uk.co.alt236.btlescan.ui.details.recyclerview.model.TextItem;
public class DeviceDetailsActivity extends AppCompatActivity {
- public static final String EXTRA_DEVICE = DeviceDetailsActivity.class.getName() + ".EXTRA_DEVICE";
+ private static final String EXTRA_DEVICE = DeviceDetailsActivity.class.getName() + ".EXTRA_DEVICE";
private static final int LAYOUT_ID = R.layout.activity_details;
@Bind(R.id.recycler)
@@ -48,6 +49,9 @@ public class DeviceDetailsActivity extends AppCompatActivity {
mRecycler.setLayoutManager(new LinearLayoutManager(this));
mDevice = getIntent().getParcelableExtra(EXTRA_DEVICE);
+ getSupportActionBar().setTitle(mDevice.getName());
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+
pupulateDetails(mDevice);
}
@@ -61,15 +65,13 @@ public class DeviceDetailsActivity extends AppCompatActivity {
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_connect:
-
- final Intent intent = new Intent(this, DeviceControlActivity.class);
- intent.putExtra(DeviceControlActivity.EXTRA_DEVICE, mDevice);
-
- startActivity(intent);
-
- break;
+ new Navigation(this).startControlActivity(mDevice);
+ return true;
+ case android.R.id.home:
+ onBackPressed();
+ return true;
}
- return true;
+ return super.onOptionsItemSelected(item);
}
private void pupulateDetails(final BluetoothLeDevice device) {
@@ -113,4 +115,11 @@ public class DeviceDetailsActivity extends AppCompatActivity {
final RecyclerViewBinderCore core = RecyclerViewCoreFactory.create(this);
mRecycler.setAdapter(new DetailsRecyclerAdapter(core, list));
}
+
+ public static Intent createIntent(Context context, BluetoothLeDevice device) {
+ final Intent intent = new Intent(context, DeviceDetailsActivity.class);
+ intent.putExtra(DeviceDetailsActivity.EXTRA_DEVICE, device);
+
+ return intent;
+ }
}
diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/MainActivity.java b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/MainActivity.java
index 18dd387..b6b4668 100644
--- a/sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/MainActivity.java
+++ b/sample_app/src/main/java/uk/co/alt236/btlescan/ui/main/MainActivity.java
@@ -3,7 +3,6 @@ package uk.co.alt236.btlescan.ui.main;
import android.Manifest;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
-import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
@@ -23,7 +22,7 @@ import butterknife.ButterKnife;
import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice;
import uk.co.alt236.btlescan.R;
import uk.co.alt236.btlescan.containers.BluetoothLeDeviceStore;
-import uk.co.alt236.btlescan.ui.details.DeviceDetailsActivity;
+import uk.co.alt236.btlescan.ui.common.Navigation;
import uk.co.alt236.btlescan.util.BluetoothLeScanner;
import uk.co.alt236.btlescan.util.BluetoothUtils;
import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor;
@@ -101,12 +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 = mDeviceListAdapter.getItem(position);
- if (device == null) return;
-
- final Intent intent = new Intent(this, DeviceDetailsActivity.class);
- intent.putExtra(DeviceDetailsActivity.EXTRA_DEVICE, device);
-
- startActivity(intent);
+ new Navigation(this).openDetailsActivity(device);
}
@Override