Added navigation class to abstract activity launching

This commit is contained in:
Alexandros Schillings
2016-08-31 17:50:31 +01:00
parent e9c2f0d486
commit e43bfc1b82
6 changed files with 100 additions and 54 deletions
+9 -8
View File
@@ -64,14 +64,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
@@ -80,6 +72,14 @@
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
@@ -131,6 +131,7 @@
<orderEntry type="library" exported="" name="support-vector-drawable-24.2.0" level="project" /> <orderEntry type="library" exported="" name="support-vector-drawable-24.2.0" level="project" />
<orderEntry type="library" exported="" name="animated-vector-drawable-24.2.0" level="project" /> <orderEntry type="library" exported="" name="animated-vector-drawable-24.2.0" level="project" />
<orderEntry type="library" exported="" name="permissions-1.0" level="project" /> <orderEntry type="library" exported="" name="permissions-1.0" level="project" />
<orderEntry type="library" exported="" name="easycursor-android-1.0.0" level="project" />
<orderEntry type="module" module-name="library" exported="" /> <orderEntry type="module" module-name="library" exported="" />
</component> </component>
</module> </module>
+11 -14
View File
@@ -1,15 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="uk.co.alt236.btlescan" package="uk.co.alt236.btlescan">
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-feature <uses-feature
android:name="android.hardware.bluetooth_le" android:name="android.hardware.bluetooth_le"
android:required="false"/> android:required="false" />
<application <application
android:allowBackup="true" android:allowBackup="true"
@@ -20,20 +19,18 @@
android:name=".ui.main.MainActivity" android:name=".ui.main.MainActivity"
android:label="@string/app_name"> android:label="@string/app_name">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity <activity android:name=".ui.details.DeviceDetailsActivity" />
android:name=".ui.details.DeviceDetailsActivity"
android:label="@string/app_name"> <activity android:name=".ui.control.DeviceControlActivity" />
</activity>
<activity android:name=".ui.control.DeviceControlActivity"/>
<service <service
android:name="uk.co.alt236.btlescan.services.BluetoothLeService" android:name="uk.co.alt236.btlescan.services.BluetoothLeService"
android:enabled="true"/> android:enabled="true" />
</application> </application>
</manifest> </manifest>
@@ -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);
}
}
@@ -26,6 +26,7 @@ import android.content.IntentFilter;
import android.content.ServiceConnection; import android.content.ServiceConnection;
import android.os.Bundle; import android.os.Bundle;
import android.os.IBinder; import android.os.IBinder;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.util.Log; import android.util.Log;
import android.view.Menu; import android.view.Menu;
@@ -55,7 +56,7 @@ import uk.co.alt236.btlescan.services.BluetoothLeService;
* Bluetooth LE API. * Bluetooth LE API.
*/ */
public class DeviceControlActivity extends AppCompatActivity { 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 final static String TAG = DeviceControlActivity.class.getSimpleName();
private static final String LIST_NAME = "NAME"; private static final String LIST_NAME = "NAME";
private static final String LIST_UUID = "UUID"; private static final String LIST_UUID = "UUID";
@@ -103,7 +104,7 @@ public class DeviceControlActivity extends AppCompatActivity {
return false; return false;
} }
}; };
private String mDeviceAddress;
// Code to manage Service lifecycle. // Code to manage Service lifecycle.
private final ServiceConnection mServiceConnection = new ServiceConnection() { private final ServiceConnection mServiceConnection = new ServiceConnection() {
@Override @Override
@@ -114,7 +115,7 @@ public class DeviceControlActivity extends AppCompatActivity {
finish(); finish();
} }
// Automatically connects to the device upon successful start-up initialization. // Automatically connects to the device upon successful start-up initialization.
mBluetoothLeService.connect(mDeviceAddress); mBluetoothLeService.connect(mDevice.getAddress());
} }
@Override @Override
@@ -122,7 +123,7 @@ public class DeviceControlActivity extends AppCompatActivity {
mBluetoothLeService = null; mBluetoothLeService = null;
} }
}; };
private String mDeviceName; private BluetoothLeDevice mDevice;
private boolean mConnected = false; private boolean mConnected = false;
private String mExportString; private String mExportString;
// Handles various events fired by the Service. // Handles various events fired by the Service.
@@ -173,7 +174,10 @@ public class DeviceControlActivity extends AppCompatActivity {
// on the UI. // on the UI.
private void displayGattServices(final List<BluetoothGattService> gattServices) { private void displayGattServices(final List<BluetoothGattService> gattServices) {
if (gattServices == null) return; if (gattServices == null) return;
mExportString = mExporter.generateExportString(mDeviceName, mDeviceAddress, gattServices); mExportString = mExporter.generateExportString(
mDevice.getName(),
mDevice.getAddress(),
gattServices);
String uuid = null; String uuid = null;
final String unknownServiceString = getResources().getString(R.string.unknown_service); final String unknownServiceString = getResources().getString(R.string.unknown_service);
@@ -230,16 +234,14 @@ public class DeviceControlActivity extends AppCompatActivity {
setContentView(R.layout.activity_gatt_services); setContentView(R.layout.activity_gatt_services);
final Intent intent = getIntent(); final Intent intent = getIntent();
final BluetoothLeDevice device = intent.getParcelableExtra(EXTRA_DEVICE); mDevice = intent.getParcelableExtra(EXTRA_DEVICE);
mDeviceName = device.getName();
mDeviceAddress = device.getAddress();
ButterKnife.bind(this); ButterKnife.bind(this);
// Sets up UI references. // Sets up UI references.
((TextView) findViewById(R.id.device_address)).setText(mDeviceAddress); ((TextView) findViewById(R.id.device_address)).setText(mDevice.getAddress());
mGattServicesList.setOnChildClickListener(servicesListClickListner); mGattServicesList.setOnChildClickListener(servicesListClickListner);
getSupportActionBar().setTitle(mDeviceName); getSupportActionBar().setTitle(mDevice.getName());
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mExporter = new Exporter(this); mExporter = new Exporter(this);
@@ -279,7 +281,7 @@ public class DeviceControlActivity extends AppCompatActivity {
public boolean onOptionsItemSelected(final MenuItem item) { public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.menu_connect: case R.id.menu_connect:
mBluetoothLeService.connect(mDeviceAddress); mBluetoothLeService.connect(mDevice.getAddress());
return true; return true;
case R.id.menu_disconnect: case R.id.menu_disconnect:
mBluetoothLeService.disconnect(); mBluetoothLeService.disconnect();
@@ -289,7 +291,10 @@ public class DeviceControlActivity extends AppCompatActivity {
return true; return true;
case R.id.menu_share: case R.id.menu_share:
final Intent intent = new Intent(android.content.Intent.ACTION_SEND); 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.setType("text/plain");
intent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject); intent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
@@ -315,7 +320,7 @@ public class DeviceControlActivity extends AppCompatActivity {
super.onResume(); super.onResume();
registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter()); registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter());
if (mBluetoothLeService != null) { if (mBluetoothLeService != null) {
final boolean result = mBluetoothLeService.connect(mDeviceAddress); final boolean result = mBluetoothLeService.connect(mDevice.getAddress());
Log.d(TAG, "Connect request result=" + result); Log.d(TAG, "Connect request result=" + result);
} }
} }
@@ -339,7 +344,7 @@ public class DeviceControlActivity extends AppCompatActivity {
} }
mConnectionState.setText(resourceId); 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; 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;
}
} }
@@ -1,5 +1,6 @@
package uk.co.alt236.btlescan.ui.details; package uk.co.alt236.btlescan.ui.details;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity; 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.device.beacon.ibeacon.IBeaconManufacturerData;
import uk.co.alt236.bluetoothlelib.util.ByteUtils; import uk.co.alt236.bluetoothlelib.util.ByteUtils;
import uk.co.alt236.btlescan.R; 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.RecyclerViewBinderCore;
import uk.co.alt236.btlescan.ui.common.recyclerview.RecyclerViewItem; 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.AdRecordItem;
import uk.co.alt236.btlescan.ui.details.recyclerview.model.DeviceInfoItem; import uk.co.alt236.btlescan.ui.details.recyclerview.model.DeviceInfoItem;
import uk.co.alt236.btlescan.ui.details.recyclerview.model.HeaderItem; 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; import uk.co.alt236.btlescan.ui.details.recyclerview.model.TextItem;
public class DeviceDetailsActivity extends AppCompatActivity { 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; private static final int LAYOUT_ID = R.layout.activity_details;
@Bind(R.id.recycler) @Bind(R.id.recycler)
@@ -48,6 +49,9 @@ public class DeviceDetailsActivity extends AppCompatActivity {
mRecycler.setLayoutManager(new LinearLayoutManager(this)); mRecycler.setLayoutManager(new LinearLayoutManager(this));
mDevice = getIntent().getParcelableExtra(EXTRA_DEVICE); mDevice = getIntent().getParcelableExtra(EXTRA_DEVICE);
getSupportActionBar().setTitle(mDevice.getName());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
pupulateDetails(mDevice); pupulateDetails(mDevice);
} }
@@ -61,15 +65,13 @@ public class DeviceDetailsActivity extends AppCompatActivity {
public boolean onOptionsItemSelected(final MenuItem item) { public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) { switch (item.getItemId()) {
case R.id.menu_connect: case R.id.menu_connect:
new Navigation(this).startControlActivity(mDevice);
final Intent intent = new Intent(this, DeviceControlActivity.class); return true;
intent.putExtra(DeviceControlActivity.EXTRA_DEVICE, mDevice); case android.R.id.home:
onBackPressed();
startActivity(intent); return true;
break;
} }
return true; return super.onOptionsItemSelected(item);
} }
private void pupulateDetails(final BluetoothLeDevice device) { private void pupulateDetails(final BluetoothLeDevice device) {
@@ -113,4 +115,11 @@ public class DeviceDetailsActivity extends AppCompatActivity {
final RecyclerViewBinderCore core = RecyclerViewCoreFactory.create(this); final RecyclerViewBinderCore core = RecyclerViewCoreFactory.create(this);
mRecycler.setAdapter(new DetailsRecyclerAdapter(core, list)); 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;
}
} }
@@ -3,7 +3,6 @@ package uk.co.alt236.btlescan.ui.main;
import android.Manifest; import android.Manifest;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
@@ -23,7 +22,7 @@ import butterknife.ButterKnife;
import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice; import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice;
import uk.co.alt236.btlescan.R; import uk.co.alt236.btlescan.R;
import uk.co.alt236.btlescan.containers.BluetoothLeDeviceStore; 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.BluetoothLeScanner;
import uk.co.alt236.btlescan.util.BluetoothUtils; import uk.co.alt236.btlescan.util.BluetoothUtils;
import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor; import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor;
@@ -101,12 +100,7 @@ public class MainActivity extends AppCompatActivity implements AdapterView.OnIte
@Override @Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
final BluetoothLeDevice device = mDeviceListAdapter.getItem(position); final BluetoothLeDevice device = mDeviceListAdapter.getItem(position);
if (device == null) return; new Navigation(this).openDetailsActivity(device);
final Intent intent = new Intent(this, DeviceDetailsActivity.class);
intent.putExtra(DeviceDetailsActivity.EXTRA_DEVICE, device);
startActivity(intent);
} }
@Override @Override