142 lines
4.1 KiB
Java
142 lines
4.1 KiB
Java
package uk.co.alt236.btlescan.activities;
|
|
|
|
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.util.BluetoothLeScanner;
|
|
import uk.co.alt236.btlescan.util.BluetoothUtils;
|
|
import android.app.ListActivity;
|
|
import android.bluetooth.BluetoothAdapter;
|
|
import android.bluetooth.BluetoothDevice;
|
|
import android.content.Intent;
|
|
import android.os.Bundle;
|
|
import android.view.Menu;
|
|
import android.view.MenuItem;
|
|
import android.view.View;
|
|
import android.widget.ListView;
|
|
import android.widget.TextView;
|
|
import butterknife.ButterKnife;
|
|
import butterknife.InjectView;
|
|
|
|
public class MainActivity extends ListActivity {
|
|
@InjectView(R.id.tvBluetoothLe) TextView mTvBluetoothLeStatus;
|
|
@InjectView(R.id.tvBluetoothStatus) TextView mTvBluetoothStatus;
|
|
|
|
private BluetoothUtils mBluetoothUtils;
|
|
private BluetoothLeScanner mScanner;
|
|
private LeDeviceListAdapter mLeDeviceListAdapter;
|
|
private BluetoothLeDeviceStore mDeviceStore;
|
|
|
|
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
|
|
@Override
|
|
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
|
|
|
|
final BluetoothLeDevice deviceLe = new BluetoothLeDevice(device, rssi, scanRecord, System.currentTimeMillis());
|
|
|
|
runOnUiThread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
mDeviceStore.addDevice(deviceLe);
|
|
mLeDeviceListAdapter.replaceData(mDeviceStore.getDeviceList());
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
@Override
|
|
protected void onListItemClick(ListView l, View v, int position, long id) {
|
|
final BluetoothLeDevice device = mLeDeviceListAdapter.getItem(position);
|
|
if (device == null) return;
|
|
|
|
|
|
final Intent intent = new Intent(this, DeviceDetailsActivity.class);
|
|
intent.putExtra(DeviceDetailsActivity.EXTRA_DEVICE, device);
|
|
|
|
startActivity(intent);
|
|
}
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
setContentView(R.layout.activity_main);
|
|
ButterKnife.inject(this);
|
|
|
|
mDeviceStore = new BluetoothLeDeviceStore();
|
|
mBluetoothUtils = new BluetoothUtils(this);
|
|
mScanner = new BluetoothLeScanner(mLeScanCallback, mBluetoothUtils);
|
|
}
|
|
|
|
@Override
|
|
public boolean onCreateOptionsMenu(Menu menu) {
|
|
getMenuInflater().inflate(R.menu.main, menu);
|
|
if (!mScanner.isScanning()) {
|
|
menu.findItem(R.id.menu_stop).setVisible(false);
|
|
menu.findItem(R.id.menu_scan).setVisible(true);
|
|
menu.findItem(R.id.menu_refresh).setActionView(null);
|
|
} else {
|
|
menu.findItem(R.id.menu_stop).setVisible(true);
|
|
menu.findItem(R.id.menu_scan).setVisible(false);
|
|
menu.findItem(R.id.menu_refresh).setActionView(R.layout.actionbar_progress_indeterminate);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
switch (item.getItemId()) {
|
|
case R.id.menu_scan:
|
|
startScan();
|
|
break;
|
|
case R.id.menu_stop:
|
|
mScanner.scanLeDevice(-1, false);
|
|
invalidateOptionsMenu();
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
protected void onPause() {
|
|
super.onPause();
|
|
mScanner.scanLeDevice(-1, false);
|
|
}
|
|
|
|
@Override
|
|
public void onResume(){
|
|
super.onResume();
|
|
final boolean mIsBluetoothOn = mBluetoothUtils.isBluetoothOn();
|
|
final boolean mIsBluetoothLePresent = mBluetoothUtils.isBluetoothLeSupported();
|
|
|
|
if(mIsBluetoothOn){
|
|
mTvBluetoothStatus.setText(R.string.on);
|
|
} else {
|
|
mTvBluetoothStatus.setText(R.string.off);
|
|
}
|
|
|
|
if(mIsBluetoothLePresent){
|
|
mTvBluetoothLeStatus.setText(R.string.supported);
|
|
} else {
|
|
mTvBluetoothLeStatus.setText(R.string.not_supported);
|
|
}
|
|
|
|
invalidateOptionsMenu();
|
|
}
|
|
|
|
private void startScan(){
|
|
final boolean mIsBluetoothOn = mBluetoothUtils.isBluetoothOn();
|
|
final boolean mIsBluetoothLePresent = mBluetoothUtils.isBluetoothLeSupported();
|
|
mDeviceStore.clear();
|
|
|
|
mLeDeviceListAdapter = new LeDeviceListAdapter(this, mDeviceStore.getDeviceList());
|
|
setListAdapter(mLeDeviceListAdapter);
|
|
|
|
mBluetoothUtils.askUserToEnableBluetoothIfNeeded();
|
|
if(mIsBluetoothOn && mIsBluetoothLePresent){
|
|
mScanner.scanLeDevice(-1, true);
|
|
invalidateOptionsMenu();
|
|
}
|
|
}
|
|
|
|
}
|