diff --git a/build.gradle b/build.gradle index e6d3881..327b2ba 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. -ext.compileSdkVersion = 18 -ext.buildToolsVersion = "21.1.1" +ext.compileSdkVersion = 22 +ext.buildToolsVersion = "22.0.1" ext.minSdkVersion = 18 ext.targetSdkVersion = 22 diff --git a/library/library.iml b/library/library.iml index f457fe4..7656b88 100644 --- a/library/library.iml +++ b/library/library.iml @@ -85,12 +85,12 @@ - + + - \ No newline at end of file diff --git a/sample_app/build.gradle b/sample_app/build.gradle index 7375806..7cb7815 100644 --- a/sample_app/build.gradle +++ b/sample_app/build.gradle @@ -8,6 +8,20 @@ final def androidVersionCode = 100 final def targetSdk = rootProject.targetSdkVersion; final def minSdkRed = rootProject.minSdkVersion; +repositories { + maven { + url "https://repo.commonsware.com.s3.amazonaws.com" + } +} + +dependencies { + compile 'com.jakewharton:butterknife:7.0.1' + compile 'com.android.support:appcompat-v7:22.2.0' + compile 'com.commonsware.cwac:merge:1.1.0' + compile fileTree(include: ['*.jar'], dir: 'libs') + compile project(':library') +} + android { compileSdkVersion rootProject.compileSdkVersion buildToolsVersion rootProject.buildToolsVersion @@ -33,8 +47,3 @@ android { productFlavors { } } - -dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile project(':library') -} diff --git a/sample_app/libs/android-support-v4.jar b/sample_app/libs/android-support-v4.jar deleted file mode 100644 index 96644ed..0000000 Binary files a/sample_app/libs/android-support-v4.jar and /dev/null differ diff --git a/sample_app/libs/butterknife-4.0.1.jar b/sample_app/libs/butterknife-4.0.1.jar deleted file mode 100644 index e048516..0000000 Binary files a/sample_app/libs/butterknife-4.0.1.jar and /dev/null differ diff --git a/sample_app/libs/merge-1.0.1.jar b/sample_app/libs/merge-1.0.1.jar deleted file mode 100644 index fb49c15..0000000 Binary files a/sample_app/libs/merge-1.0.1.jar and /dev/null differ diff --git a/sample_app/libs/sacklist-1.0.0.jar b/sample_app/libs/sacklist-1.0.0.jar deleted file mode 100644 index 3a49a76..0000000 Binary files a/sample_app/libs/sacklist-1.0.0.jar and /dev/null differ diff --git a/sample_app/sample_app.iml b/sample_app/sample_app.iml index 0282668..cfe2b1d 100644 --- a/sample_app/sample_app.iml +++ b/sample_app/sample_app.iml @@ -69,6 +69,10 @@ + + + + @@ -84,14 +88,16 @@ - + - - - + + + + - - + + + \ No newline at end of file diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceControlActivity.java b/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceControlActivity.java index a421b88..5e3753b 100644 --- a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceControlActivity.java +++ b/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceControlActivity.java @@ -16,7 +16,6 @@ package uk.co.alt236.btlescan.activities; -import android.app.Activity; import android.bluetooth.BluetoothGattCharacteristic; import android.bluetooth.BluetoothGattService; import android.content.BroadcastReceiver; @@ -27,6 +26,7 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; +import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -40,8 +40,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import butterknife.Bind; import butterknife.ButterKnife; -import butterknife.InjectView; import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice; import uk.co.alt236.bluetoothlelib.resolvers.GattAttributeResolver; import uk.co.alt236.bluetoothlelib.util.ByteUtils; @@ -54,23 +54,23 @@ import uk.co.alt236.btlescan.services.BluetoothLeService; * communicates with {@code BluetoothLeService}, which in turn interacts with the * Bluetooth LE API. */ -public class DeviceControlActivity extends Activity { +public class DeviceControlActivity extends AppCompatActivity { public static final String EXTRA_DEVICE = "extra_device"; private final static String TAG = DeviceControlActivity.class.getSimpleName(); private static final String LIST_NAME = "NAME"; private static final String LIST_UUID = "UUID"; - @InjectView(R.id.gatt_services_list) - ExpandableListView mGattServicesList; - @InjectView(R.id.connection_state) - TextView mConnectionState; - @InjectView(R.id.uuid) - TextView mGattUUID; - @InjectView(R.id.description) - TextView mGattUUIDDesc; - @InjectView(R.id.data_as_string) - TextView mDataAsString; - @InjectView(R.id.data_as_array) - TextView mDataAsArray; + @Bind(R.id.gatt_services_list) + protected ExpandableListView mGattServicesList; + @Bind(R.id.connection_state) + protected TextView mConnectionState; + @Bind(R.id.uuid) + protected TextView mGattUUID; + @Bind(R.id.description) + protected TextView mGattUUIDDesc; + @Bind(R.id.data_as_string) + protected TextView mDataAsString; + @Bind(R.id.data_as_array) + protected TextView mDataAsArray; private BluetoothGattCharacteristic mNotifyCharacteristic; private BluetoothLeService mBluetoothLeService; private List> mGattCharacteristics = new ArrayList<>(); @@ -282,14 +282,14 @@ public class DeviceControlActivity extends Activity { mDeviceName = device.getName(); mDeviceAddress = device.getAddress(); - ButterKnife.inject(this); + ButterKnife.bind(this); // Sets up UI references. ((TextView) findViewById(R.id.device_address)).setText(mDeviceAddress); mGattServicesList.setOnChildClickListener(servicesListClickListner); - getActionBar().setTitle(mDeviceName); - getActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setTitle(mDeviceName); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); final Intent gattServiceIntent = new Intent(this, BluetoothLeService.class); bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE); diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceDetailsActivity.java b/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceDetailsActivity.java index 6f2c131..fbc9045 100644 --- a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceDetailsActivity.java +++ b/sample_app/src/main/java/uk/co/alt236/btlescan/activities/DeviceDetailsActivity.java @@ -1,11 +1,14 @@ package uk.co.alt236.btlescan.activities; -import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; +import android.view.View; import android.widget.LinearLayout; +import android.widget.ListView; import android.widget.TextView; import com.commonsware.cwac.merge.MergeAdapter; @@ -13,6 +16,7 @@ import com.commonsware.cwac.merge.MergeAdapter; import java.util.Collection; import java.util.Locale; +import butterknife.Bind; import butterknife.ButterKnife; import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice; import uk.co.alt236.bluetoothlelib.device.adrecord.AdRecord; @@ -24,9 +28,13 @@ import uk.co.alt236.bluetoothlelib.util.IBeaconUtils; import uk.co.alt236.btlescan.R; import uk.co.alt236.btlescan.util.TimeFormatter; -public class DeviceDetailsActivity extends ListActivity { +public class DeviceDetailsActivity extends AppCompatActivity { public static final String EXTRA_DEVICE = "extra_device"; - + @Bind(android.R.id.list) + protected ListView mList; + @Nullable + @Bind(android.R.id.empty) + protected View mEmpty; private BluetoothLeDevice mDevice; private void appendAdRecordView(final MergeAdapter adapter, final String title, final AdRecord record) { @@ -129,7 +137,9 @@ public class DeviceDetailsActivity extends ListActivity { protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_details); - ButterKnife.inject(this); + ButterKnife.bind(this); + + mList.setEmptyView(mEmpty); mDevice = getIntent().getParcelableExtra(EXTRA_DEVICE); @@ -194,7 +204,7 @@ public class DeviceDetailsActivity extends ListActivity { } } - getListView().setAdapter(adapter); + mList.setAdapter(adapter); } private static String formatTime(final long time) { diff --git a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/MainActivity.java b/sample_app/src/main/java/uk/co/alt236/btlescan/activities/MainActivity.java index f5f4536..153f522 100644 --- a/sample_app/src/main/java/uk/co/alt236/btlescan/activities/MainActivity.java +++ b/sample_app/src/main/java/uk/co/alt236/btlescan/activities/MainActivity.java @@ -1,23 +1,24 @@ package uk.co.alt236.btlescan.activities; import android.app.AlertDialog; -import android.app.ListActivity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; import android.text.SpannableString; import android.text.method.LinkMovementMethod; import android.text.util.Linkify; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; +import butterknife.Bind; import butterknife.ButterKnife; -import butterknife.InjectView; import uk.co.alt236.bluetoothlelib.device.BluetoothLeDevice; import uk.co.alt236.btlescan.R; import uk.co.alt236.btlescan.adapters.LeDeviceListAdapter; @@ -26,13 +27,17 @@ import uk.co.alt236.btlescan.util.BluetoothLeScanner; import uk.co.alt236.btlescan.util.BluetoothUtils; import uk.co.alt236.easycursor.objectcursor.EasyObjectCursor; -public class MainActivity extends ListActivity { - @InjectView(R.id.tvBluetoothLe) - TextView mTvBluetoothLeStatus; - @InjectView(R.id.tvBluetoothStatus) - TextView mTvBluetoothStatus; - @InjectView(R.id.tvItemCount) - TextView mTvItemCount; +public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { + @Bind(R.id.tvBluetoothLe) + protected TextView mTvBluetoothLeStatus; + @Bind(R.id.tvBluetoothStatus) + protected TextView mTvBluetoothStatus; + @Bind(R.id.tvItemCount) + protected TextView mTvItemCount; + @Bind(android.R.id.list) + protected ListView mList; + @Bind(android.R.id.empty) + protected View mEmpty; private BluetoothUtils mBluetoothUtils; private BluetoothLeScanner mScanner; @@ -87,8 +92,9 @@ public class MainActivity extends ListActivity { protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - ButterKnife.inject(this); - + ButterKnife.bind(this); + mList.setEmptyView(mEmpty); + mList.setOnItemClickListener(this); mDeviceStore = new BluetoothLeDeviceStore(); mBluetoothUtils = new BluetoothUtils(this); mScanner = new BluetoothLeScanner(mLeScanCallback, mBluetoothUtils); @@ -108,7 +114,7 @@ public class MainActivity extends ListActivity { menu.findItem(R.id.menu_refresh).setActionView(R.layout.actionbar_progress_indeterminate); } - if (getListView().getCount() > 0) { + if (mList.getCount() > 0) { menu.findItem(R.id.menu_share).setVisible(true); } else { menu.findItem(R.id.menu_share).setVisible(false); @@ -118,7 +124,7 @@ public class MainActivity extends ListActivity { } @Override - protected void onListItemClick(final ListView l, final View v, final int position, final long id) { + public void onItemClick(AdapterView adapterView, View view, int position, long l) { final BluetoothLeDevice device = mLeDeviceListAdapter.getItem(position); if (device == null) return; @@ -181,7 +187,7 @@ public class MainActivity extends ListActivity { updateItemCount(0); mLeDeviceListAdapter = new LeDeviceListAdapter(this, mDeviceStore.getDeviceCursor()); - setListAdapter(mLeDeviceListAdapter); + mList.setAdapter(mLeDeviceListAdapter); mBluetoothUtils.askUserToEnableBluetoothIfNeeded(); if (mIsBluetoothOn && mIsBluetoothLePresent) { diff --git a/sample_app/src/main/res/menu/details.xml b/sample_app/src/main/res/menu/details.xml index a36f333..dde8544 100644 --- a/sample_app/src/main/res/menu/details.xml +++ b/sample_app/src/main/res/menu/details.xml @@ -14,14 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. --> - + + android:title="@string/menu_connect" + app:showAsAction="always|withText"/> \ No newline at end of file diff --git a/sample_app/src/main/res/menu/gatt_services.xml b/sample_app/src/main/res/menu/gatt_services.xml index 8f30302..f5ed52b 100644 --- a/sample_app/src/main/res/menu/gatt_services.xml +++ b/sample_app/src/main/res/menu/gatt_services.xml @@ -14,28 +14,30 @@ See the License for the specific language governing permissions and limitations under the License. --> - + + android:title="" + app:showAsAction="always"/> + android:title="@string/menu_share" + app:showAsAction="ifRoom"/> + android:title="@string/menu_connect" + app:showAsAction="ifRoom|withText"/> + android:title="@string/menu_disconnect" + app:showAsAction="ifRoom|withText"/> \ No newline at end of file diff --git a/sample_app/src/main/res/menu/main.xml b/sample_app/src/main/res/menu/main.xml index 46c5051..e0858d8 100644 --- a/sample_app/src/main/res/menu/main.xml +++ b/sample_app/src/main/res/menu/main.xml @@ -14,33 +14,36 @@ See the License for the specific language governing permissions and limitations under the License. --> - + + android:title="" + app:showAsAction="always"/> + + android:title="@string/menu_scan" + app:showAsAction="ifRoom|withText"/> + android:title="@string/menu_stop" + app:showAsAction="ifRoom|withText"/> + android:title="@string/menu_share" + app:showAsAction="ifRoom"/> + android:title="@string/menu_about" + app:showAsAction="never"/> \ No newline at end of file diff --git a/sample_app/src/main/res/values-v11/styles.xml b/sample_app/src/main/res/values-v11/styles.xml index 3c02242..c0ef0ed 100644 --- a/sample_app/src/main/res/values-v11/styles.xml +++ b/sample_app/src/main/res/values-v11/styles.xml @@ -4,7 +4,7 @@ Base application theme for API 11+. This theme completely replaces AppBaseTheme from res/values/styles.xml on API 11+ devices. --> - diff --git a/sample_app/src/main/res/values-v14/styles.xml b/sample_app/src/main/res/values-v14/styles.xml index a91fd03..664f4f1 100644 --- a/sample_app/src/main/res/values-v14/styles.xml +++ b/sample_app/src/main/res/values-v14/styles.xml @@ -5,7 +5,7 @@ AppBaseTheme from BOTH res/values/styles.xml and res/values-v11/styles.xml on API 14+ devices. --> - diff --git a/sample_app/src/main/res/values/styles.xml b/sample_app/src/main/res/values/styles.xml index 9cf5fd9..c503b3f 100644 --- a/sample_app/src/main/res/values/styles.xml +++ b/sample_app/src/main/res/values/styles.xml @@ -4,7 +4,7 @@ Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> - - -