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