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/rs" 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/resources" 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/rs" 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/blame" />
<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="animated-vector-drawable-24.2.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="" />
</component>
</module>
+11 -14
View File
@@ -1,15 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="uk.co.alt236.btlescan"
xmlns:android="http://schemas.android.com/apk/res/android">
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="uk.co.alt236.btlescan">
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-feature
android:name="android.hardware.bluetooth_le"
android:required="false"/>
android:required="false" />
<application
android:allowBackup="true"
@@ -20,20 +19,18 @@
android:name=".ui.main.MainActivity"
android:label="@string/app_name">
<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>
</activity>
<activity
android:name=".ui.details.DeviceDetailsActivity"
android:label="@string/app_name">
</activity>
<activity android:name=".ui.control.DeviceControlActivity"/>
<activity android:name=".ui.details.DeviceDetailsActivity" />
<activity android:name=".ui.control.DeviceControlActivity" />
<service
android:name="uk.co.alt236.btlescan.services.BluetoothLeService"
android:enabled="true"/>
android:enabled="true" />
</application>
</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.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<BluetoothGattService> 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;
}
}
@@ -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;
}
}
@@ -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