gt: 			final String deviceName = device.getName();
context: package com.duvallsoftware.cardiotracker.activities;
  
  /*
   * Copyright (C) 2013 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import java.util.ArrayList;
  
  import android.app.Activity;
  import android.app.ListActivity;
  import android.bluetooth.BluetoothAdapter;
  import android.bluetooth.BluetoothDevice;
  import android.bluetooth.BluetoothManager;
  import android.content.Context;
  import android.content.Intent;
  import android.content.pm.PackageManager;
  import android.os.Bundle;
  import android.os.Handler;
  import android.view.LayoutInflater;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.BaseAdapter;
  import android.widget.FrameLayout;
  import android.widget.ListView;
  import android.widget.TextView;
  import android.widget.Toast;
  
  import com.duvallsoftware.cardiotracker.R;
  import com.duvallsoftware.cardiotracker.services.BluetoothLeService;
  
  /**
   * Activity for scanning and displaying available Bluetooth LE devices.
   */
  public class DeviceScanActivity extends ListActivity {
  	private LeDeviceListAdapter mLeDeviceListAdapter;
  	private BluetoothAdapter mBluetoothAdapter;
  	
  	private BluetoothLeService mBluetoothLeService;
  	
  	private boolean mScanning;
  	private Handler mHandler;
  	private static final int REQUEST_ENABLE_BT = 1;
  	// Stops scanning after 10 seconds.
  	private static final long SCAN_PERIOD = 10000;
  
  	private FrameLayout mFrameLayout;
  	
  	@Override
  	public void onCreate(Bundle savedInstanceState) {
  		super.onCreate(savedInstanceState);
  		getActionBar().setTitle(R.string.title_devices);		
  		
  		setContentView(R.layout.activity_devices_main);
  		
  		mFrameLayout = (FrameLayout) findViewById(R.id.frameLayout);
  		
  		mHandler = new Handler();
  		// Use this check to determine whether BLE is supported on the device.
  		// Then you can selectively disable BLE-related features.
  		if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
  			Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
  			finish();
  		}
  		// Initializes a Bluetooth adapter. For API level 18 and above, get a
  		// reference to BluetoothAdapter through BluetoothManager.
  		final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
  		mBluetoothAdapter = bluetoothManager.getAdapter();
  		// Checks if Bluetooth is supported on the device.
  		if (mBluetoothAdapter == null) {
  			Toast.makeText(this, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show();
  			finish();
  			return;
  		}
  	}
  
  	@Override
  	public boolean onCreateOptionsMenu(Menu menu) {
  		getMenuInflater().inflate(R.menu.devices_main, menu);
  		if (!mScanning) {
  			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_indeterminate_progress);
  		}
  		return true;
  	}
  
  	@Override
  	public boolean onOptionsItemSelected(MenuItem item) {
  		switch (item.getItemId()) {
  		case R.id.menu_scan:
  			mLeDeviceListAdapter.clear();
  			scanLeDevice(true);
  			break;
  		case R.id.menu_stop:
  			scanLeDevice(false);
  			break;
  		}
  		return true;
  	}
  
  	@Override
  	protected void onResume() {
  		super.onResume();
  		// Ensures Bluetooth is enabled on the device. If Bluetooth is not
  		// currently enabled, fire an intent to display a dialog asking the
  		// user to grant permission to enable it.
  		if (!mBluetoothAdapter.isEnabled()) {
  			if (!mBluetoothAdapter.isEnabled()) {
  				Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
  				startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
  			}
  		}
  		// Initializes list view adapter.
  		mLeDeviceListAdapter = new LeDeviceListAdapter();
  		setListAdapter(mLeDeviceListAdapter);
  		scanLeDevice(true);
  	}
  
  	@Override
  	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  		// User chose not to enable Bluetooth.
  		if (requestCode == REQUEST_ENABLE_BT && resultCode == Activity.RESULT_CANCELED) {
  			finish();
  			return;
  		}
  		super.onActivityResult(requestCode, resultCode, data);
  	}
  
  	@Override
  	protected void onPause() {
  		super.onPause();
  		scanLeDevice(false);
  		mLeDeviceListAdapter.clear();
  	}
  
  	@Override
  	protected void onListItemClick(ListView l, View v, int position, long id) {
  		final BluetoothDevice device = mLeDeviceListAdapter.getDevice(position);
  		if (device == null || device.getName() == null || device.getAddress() == null) {
  			return;
  		}
  				
  		final Intent intent = new Intent(this, DeviceSelectActivity.class);
  		intent.putExtra(DeviceSelectActivity.EXTRAS_DEVICE_NAME, device.getName());
  		intent.putExtra(DeviceSelectActivity.EXTRAS_DEVICE_ADDRESS, device.getAddress());
  		if (mScanning) {
  			mBluetoothAdapter.stopLeScan(mLeScanCallback);
  			mBluetoothAdapter.cancelDiscovery();
  			mScanning = false;
  		}
  		
  		startActivity(intent);
  		finish();
  	}
  
  	private void scanLeDevice(final boolean enable) {
  		if (enable) {
  			// Stops scanning after a pre-defined scan period.
  			mHandler.postDelayed(new Runnable() {
  				@Override
  				public void run() {
  					mScanning = false;
  					mBluetoothAdapter.stopLeScan(mLeScanCallback);
  					mBluetoothAdapter.cancelDiscovery();
  					invalidateOptionsMenu();
  				}
  			}, SCAN_PERIOD);
  			mScanning = true;
  			mBluetoothAdapter.startLeScan(mLeScanCallback);
  		} else {
  			mScanning = false;
  			mBluetoothAdapter.stopLeScan(mLeScanCallback);
  			mBluetoothAdapter.cancelDiscovery();
  		}
  		invalidateOptionsMenu();
  	}
  
  	// Adapter for holding devices found through scanning.
  	private class LeDeviceListAdapter extends BaseAdapter {
  		private ArrayList<BluetoothDevice> mLeDevices;
  		private LayoutInflater mInflator;
  
  		public LeDeviceListAdapter() {
  			super();
  			mLeDevices = new ArrayList<BluetoothDevice>();
  			mInflator = DeviceScanActivity.this.getLayoutInflater();
  		}
  
  		public void addDevice(BluetoothDevice device) {
  			if (!mLeDevices.contains(device)) {
  				mLeDevices.add(device);
  			}
  		}
  
  		public BluetoothDevice getDevice(int position) {
  			return mLeDevices.get(position);
  		}
  
  		public void clear() {
  			mLeDevices.clear();
  			mFrameLayout.setVisibility(View.VISIBLE);
  		}
  
  		@Override
  		public int getCount() {
  			return mLeDevices.size();
  		}
  
  		@Override
  		public Object getItem(int i) {
  			return mLeDevices.get(i);
  		}
  
  		@Override
  		public long getItemId(int i) {
  			return i;
  		}
  
  		@Override
  		public View getView(int i, View view, ViewGroup viewGroup) {
  			ViewHolder viewHolder;
  			// General ListView optimization code.
  			if (view == null) {
  				view = mInflator.inflate(R.layout.listitem_device, null);
  				viewHolder = new ViewHolder();
  				viewHolder.deviceAddress = (TextView) view.findViewById(R.id.device_address);
  				viewHolder.deviceName = (TextView) view.findViewById(R.id.device_name);
  				view.setTag(viewHolder);
  			} else {
  				viewHolder = (ViewHolder) view.getTag();
  			}
  			BluetoothDevice device = mLeDevices.get(i);
  			
  