diff --git a/app/app.iml b/app/app.iml
index a5482ec1..a4d4a813 100644
--- a/app/app.iml
+++ b/app/app.iml
@@ -1,5 +1,5 @@
-
+
@@ -12,8 +12,9 @@
-
+
+
@@ -85,13 +86,13 @@
-
+
+
+
-
-
+
-
-
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index cc59358c..19fce4e2 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -7,8 +7,8 @@ android {
applicationId "no.nordicsemi.android.nrftoolbox"
minSdkVersion 18
targetSdkVersion 22
- versionCode 32
- versionName "1.13.1"
+ versionCode 33
+ versionName "1.14.0"
}
buildTypes {
release {
@@ -20,7 +20,8 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.android.support:appcompat-v7:22.1.1'
+ compile 'com.android.support:appcompat-v7:22.2.0'
+ compile 'com.android.support:design:22.2.0'
compile project(':..:DFULibrary:dfu')
compile files('libs/achartengine-1.1.0.jar')
compile files('libs/nrf-logger-v2.0.jar')
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2547c9ff..e2de82ac 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,8 +23,8 @@
+ android:versionCode="33"
+ android:versionName="1.14.1" >
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/AppHelpFragment.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/AppHelpFragment.java
index 174eed8a..ea5e299c 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/AppHelpFragment.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/AppHelpFragment.java
@@ -21,11 +21,12 @@
*/
package no.nordicsemi.android.nrftoolbox;
-import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.DialogFragment;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v4.app.DialogFragment;
+import android.support.v7.app.AlertDialog;
public class AppHelpFragment extends DialogFragment {
private static final String ARG_TEXT = "ARG_TEXT";
@@ -54,6 +55,7 @@ public class AppHelpFragment extends DialogFragment {
}
@Override
+ @NonNull
public Dialog onCreateDialog(final Bundle savedInstanceState) {
final Bundle args = getArguments();
final StringBuilder text = new StringBuilder(getString(args.getInt(ARG_TEXT)));
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/FeaturesActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/FeaturesActivity.java
index 05cea846..af608004 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/FeaturesActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/FeaturesActivity.java
@@ -34,8 +34,9 @@ import android.net.Uri;
import android.os.Bundle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
-import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@@ -50,7 +51,7 @@ import java.util.List;
import no.nordicsemi.android.nrftoolbox.adapter.AppAdapter;
-public class FeaturesActivity extends ActionBarActivity {
+public class FeaturesActivity extends AppCompatActivity {
private static final String MCP_CATEGORY = "no.nordicsemi.android.nrftoolbox.LAUNCHER";
private static final String UTILS_CATEGORY = "no.nordicsemi.android.nrftoolbox.UTILS";
private static final String MCP_PACKAGE = "no.nordicsemi.android.mcp";
@@ -65,6 +66,9 @@ public class FeaturesActivity extends ActionBarActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_features);
+ final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
+ setSupportActionBar(toolbar);
+
// ensure that Bluetooth exists
if (!ensureBLEExists())
finish();
@@ -73,7 +77,13 @@ public class FeaturesActivity extends ActionBarActivity {
drawer.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
// Set the drawer toggle as the DrawerListener
- mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close);
+ mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
+ @Override
+ public void onDrawerSlide(final View drawerView, final float slideOffset) {
+ // Disable the Hamburger icon animation
+ super.onDrawerSlide(drawerView, 0);
+ }
+ };
drawer.setDrawerListener(mDrawerToggle);
// setup plug-ins in the drawer
@@ -117,7 +127,7 @@ public class FeaturesActivity extends ActionBarActivity {
switch (item.getItemId()) {
case R.id.action_about:
final AppHelpFragment fragment = AppHelpFragment.getInstance(R.string.about_text, true);
- fragment.show(getFragmentManager(), null);
+ fragment.show(getSupportFragmentManager(), null);
break;
}
return true;
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/app/ExpandableListActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/app/ExpandableListActivity.java
index aabd9fad..1e80c4ed 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/app/ExpandableListActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/app/ExpandableListActivity.java
@@ -19,7 +19,8 @@ package no.nordicsemi.android.nrftoolbox.app;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
-import android.support.v7.app.ActionBarActivity;
+import android.support.annotation.NonNull;
+import android.support.v7.app.AppCompatActivity;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
@@ -132,7 +133,7 @@ import no.nordicsemi.android.nrftoolbox.R;
* @see #setListAdapter
* @see android.widget.ExpandableListView
*/
-public class ExpandableListActivity extends ActionBarActivity implements
+public class ExpandableListActivity extends AppCompatActivity implements
OnCreateContextMenuListener,
ExpandableListView.OnChildClickListener, ExpandableListView.OnGroupCollapseListener,
ExpandableListView.OnGroupExpandListener {
@@ -182,7 +183,7 @@ public class ExpandableListActivity extends ActionBarActivity implements
* @see Activity#onRestoreInstanceState(Bundle)
*/
@Override
- protected void onRestoreInstanceState(Bundle state) {
+ protected void onRestoreInstanceState(@NonNull Bundle state) {
ensureList();
super.onRestoreInstanceState(state);
}
@@ -190,10 +191,10 @@ public class ExpandableListActivity extends ActionBarActivity implements
/**
* Updates the screen state (current list and other views) when the content changes.
*
- * @see ActionBarActivity#onSupportContentChanged()
+ * @see android.support.v7.app.AppCompatActivity#onContentChanged()
*/
@Override
- public void onSupportContentChanged() {
+ public void onContentChanged() {
super.onContentChanged();
View emptyView = findViewById(R.id.empty);
mList = (ExpandableListView) findViewById(R.id.list);
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/bpm/BPMActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/bpm/BPMActivity.java
index 7070575b..253d96f5 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/bpm/BPMActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/bpm/BPMActivity.java
@@ -46,7 +46,7 @@ public class BPMActivity extends BleProfileActivity implements BPMManagerCallbac
private TextView mTimestampView;
@Override
- protected void onCreateView(Bundle savedInstanceState) {
+ protected void onCreateView(final Bundle savedInstanceState) {
setContentView(R.layout.activity_feature_bpm);
setGUI();
}
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/csc/settings/SettingsActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/csc/settings/SettingsActivity.java
index a88e50a0..b4e60d1d 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/csc/settings/SettingsActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/csc/settings/SettingsActivity.java
@@ -23,19 +23,25 @@
package no.nordicsemi.android.nrftoolbox.csc.settings;
import android.os.Bundle;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
-public class SettingsActivity extends ActionBarActivity {
+import no.nordicsemi.android.nrftoolbox.R;
+
+public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_settings);
+ final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
+ setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Display the fragment as the main content.
- getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
+ getFragmentManager().beginTransaction().replace(R.id.content, new SettingsFragment()).commit();
}
@Override
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/DfuActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/DfuActivity.java
index bb01dc25..a60d85bd 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/DfuActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/DfuActivity.java
@@ -23,8 +23,6 @@ package no.nordicsemi.android.nrftoolbox.dfu;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
-import android.app.AlertDialog;
-import android.app.FragmentManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.app.NotificationManager;
import android.bluetooth.BluetoothAdapter;
@@ -47,8 +45,9 @@ import android.os.Handler;
import android.preference.PreferenceManager;
import android.provider.MediaStore;
import android.support.v4.content.LocalBroadcastManager;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
@@ -81,7 +80,7 @@ import no.nordicsemi.android.nrftoolbox.utility.DebugLogger;
* DeviceScannerFragment.OnDeviceSelectedListener callback to receive callback when device is selected from scanning dialog The activity supports portrait and
* landscape orientations
*/
-public class DfuActivity extends ActionBarActivity implements LoaderCallbacks, ScannerFragment.OnDeviceSelectedListener,
+public class DfuActivity extends AppCompatActivity implements LoaderCallbacks, ScannerFragment.OnDeviceSelectedListener,
UploadCancelFragment.CancelFragmentListener {
private static final String TAG = "DfuActivity";
@@ -197,8 +196,9 @@ public class DfuActivity extends ActionBarActivity implements LoaderCallbacks 200) {
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/gls/GlucoseManager.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/gls/GlucoseManager.java
index d940b4c0..9f3e6925 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/gls/GlucoseManager.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/gls/GlucoseManager.java
@@ -512,7 +512,7 @@ public class GlucoseManager extends BleManager {
/**
* Sends the request to delete all data from the device. A Record Access Control Point indication with status code ({@link #RESPONSE_SUCCESS} (or other in case of error) will be send.
*
- * @FIXME This method is not supported by Nordic Semiconductor Glucose Service in SDK 4.4.2.
+ * FIXME This method is not supported by Nordic Semiconductor Glucose Service in SDK 4.4.2.
*/
public void deleteAllRecords() {
if (mRecordAccessControlPointCharacteristic == null)
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/hrs/HRSActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/hrs/HRSActivity.java
index 7817a32a..9c229e28 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/hrs/HRSActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/hrs/HRSActivity.java
@@ -24,6 +24,7 @@ package no.nordicsemi.android.nrftoolbox.hrs;
import android.graphics.Point;
import android.os.Bundle;
import android.os.Handler;
+import android.support.annotation.NonNull;
import android.view.ViewGroup;
import android.widget.TextView;
@@ -83,7 +84,7 @@ public class HRSActivity extends BleProfileActivity implements HRSManagerCallbac
}
@Override
- protected void onRestoreInstanceState(final Bundle savedInstanceState) {
+ protected void onRestoreInstanceState(@NonNull final Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null) {
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/hts/settings/SettingsActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/hts/settings/SettingsActivity.java
index 3c548fce..77d0a20b 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/hts/settings/SettingsActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/hts/settings/SettingsActivity.java
@@ -23,19 +23,25 @@
package no.nordicsemi.android.nrftoolbox.hts.settings;
import android.os.Bundle;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
-public class SettingsActivity extends ActionBarActivity {
+import no.nordicsemi.android.nrftoolbox.R;
+
+public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_settings);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
+ setSupportActionBar(toolbar);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Display the fragment as the main content.
- getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
+ getFragmentManager().beginTransaction().replace(R.id.content, new SettingsFragment()).commit();
}
@Override
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/parser/TemplateParser.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/parser/TemplateParser.java
index df136172..6d244353 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/parser/TemplateParser.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/parser/TemplateParser.java
@@ -23,9 +23,6 @@ package no.nordicsemi.android.nrftoolbox.parser;
import android.bluetooth.BluetoothGattCharacteristic;
-import java.util.ArrayList;
-import java.util.List;
-
// TODO this method may be used for developing purposes to log the data from your device using the nRF Logger application.
public class TemplateParser {
// TODO add some flags, if needed
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileActivity.java
index 0f8de736..c7b04289 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileActivity.java
@@ -29,7 +29,9 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
-import android.support.v7.app.ActionBarActivity;
+import android.support.annotation.NonNull;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -47,7 +49,7 @@ import no.nordicsemi.android.nrftoolbox.R;
import no.nordicsemi.android.nrftoolbox.scanner.ScannerFragment;
import no.nordicsemi.android.nrftoolbox.utility.DebugLogger;
-public abstract class BleProfileActivity extends ActionBarActivity implements BleManagerCallbacks, ScannerFragment.OnDeviceSelectedListener {
+public abstract class BleProfileActivity extends AppCompatActivity implements BleManagerCallbacks, ScannerFragment.OnDeviceSelectedListener {
private static final String TAG = "BaseProfileActivity";
private static final String CONNECTION_STATUS = "connection_status";
@@ -82,6 +84,10 @@ public abstract class BleProfileActivity extends ActionBarActivity implements Bl
mBleManager = initializeManager();
onInitialize(savedInstanceState);
onCreateView(savedInstanceState);
+
+ final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
+ setSupportActionBar(toolbar);
+
onViewCreated(savedInstanceState);
}
@@ -128,7 +134,7 @@ public abstract class BleProfileActivity extends ActionBarActivity implements Bl
}
@Override
- protected void onRestoreInstanceState(final Bundle savedInstanceState) {
+ protected void onRestoreInstanceState(@NonNull final Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mDeviceConnected = savedInstanceState.getBoolean(CONNECTION_STATUS);
mDeviceName = savedInstanceState.getString(DEVICE_NAME);
@@ -167,7 +173,7 @@ public abstract class BleProfileActivity extends ActionBarActivity implements Bl
break;
case R.id.action_about:
final AppHelpFragment fragment = AppHelpFragment.getInstance(getAboutTextId());
- fragment.show(getFragmentManager(), "help_fragment");
+ fragment.show(getSupportFragmentManager(), "help_fragment");
break;
default:
return onOptionsItemSelected(id);
@@ -407,7 +413,7 @@ public abstract class BleProfileActivity extends ActionBarActivity implements Bl
@Override
public void run() {
final ScannerFragment dialog = ScannerFragment.getInstance(BleProfileActivity.this, filter, discoverableRequired);
- dialog.show(getFragmentManager(), "scan_fragment");
+ dialog.show(getSupportFragmentManager(), "scan_fragment");
}
});
}
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileExpandableListActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileExpandableListActivity.java
index c9433866..edddbeb2 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileExpandableListActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileExpandableListActivity.java
@@ -29,6 +29,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
+import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -82,6 +83,10 @@ public abstract class BleProfileExpandableListActivity extends ExpandableListAct
mBleManager = initializeManager();
onInitialize(savedInstanceState);
onCreateView(savedInstanceState);
+
+ final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
+ setSupportActionBar(toolbar);
+
onViewCreated(savedInstanceState);
}
@@ -165,7 +170,7 @@ public abstract class BleProfileExpandableListActivity extends ExpandableListAct
break;
case R.id.action_about:
final AppHelpFragment fragment = AppHelpFragment.getInstance(getAboutTextId());
- fragment.show(getFragmentManager(), "help_fragment");
+ fragment.show(getSupportFragmentManager(), "help_fragment");
break;
default:
return onOptionsItemSelected(id);
@@ -413,7 +418,7 @@ public abstract class BleProfileExpandableListActivity extends ExpandableListAct
@Override
public void run() {
final ScannerFragment dialog = ScannerFragment.getInstance(BleProfileExpandableListActivity.this, filter, discoverableRequired);
- dialog.show(getFragmentManager(), "scan_fragment");
+ dialog.show(getSupportFragmentManager(), "scan_fragment");
}
});
}
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileServiceReadyActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileServiceReadyActivity.java
index 7858eab0..d7121aa3 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileServiceReadyActivity.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/profile/BleProfileServiceReadyActivity.java
@@ -36,8 +36,10 @@ import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
+import android.support.annotation.NonNull;
import android.support.v4.content.LocalBroadcastManager;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -67,7 +69,7 @@ import no.nordicsemi.android.nrftoolbox.utility.DebugLogger;
* listens for it. When entering back to the activity, activity will to bind to the service and refresh UI.
*
*/
-public abstract class BleProfileServiceReadyActivity extends ActionBarActivity implements
+public abstract class BleProfileServiceReadyActivity extends AppCompatActivity implements
ScannerFragment.OnDeviceSelectedListener, BleManagerCallbacks {
private static final String TAG = "BleProfileServiceReadyActivity";
@@ -213,6 +215,10 @@ public abstract class BleProfileServiceReadyActivity {
+public class UARTLogFragment extends ListFragment implements LoaderManager.LoaderCallbacks {
private static final String SIS_LOG_SCROLL_POSITION = "sis_scroll_position";
private static final int LOG_SCROLL_NULL = -1;
private static final int LOG_SCROLLED_TO_BOTTOM = -2;
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTManager.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTManager.java
index 62360698..65b9c25f 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTManager.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTManager.java
@@ -93,6 +93,12 @@ public class UARTManager extends BleManager {
}
};
+ @Override
+ protected boolean shouldAutoConnect() {
+ // We want the connection to be kept
+ return true;
+ }
+
/**
* Sends the given text to TH characteristic.
* @param text the text to be sent
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTService.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTService.java
index c76f41b1..eb547808 100644
--- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTService.java
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTService.java
@@ -192,14 +192,32 @@ public class UARTService extends BleProfileService implements UARTManagerCallbac
};
/**
- * Broadcast receiver that listens for {@link #ACTION_SEND} from other apps. Sends the String content of the {@link Intent#EXTRA_TEXT} extra to the remote device.
+ * Broadcast receiver that listens for {@link #ACTION_SEND} from other apps. Sends the String or int content of the {@link Intent#EXTRA_TEXT} extra to the remote device.
+ * The integer content will be sent as String (65 -> "65", not 65 -> "A").
*/
private BroadcastReceiver mIntentBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
- Logger.i(getLogSession(), "[Broadcast] Disconnect action pressed");
- final String message = intent.getStringExtra(Intent.EXTRA_TEXT);
- mManager.send(message);
+ final boolean hasMessage = intent.hasExtra(Intent.EXTRA_TEXT);
+ if (hasMessage) {
+ String message = intent.getStringExtra(Intent.EXTRA_TEXT);
+ if (message == null) {
+ final int intValue = intent.getIntExtra(Intent.EXTRA_TEXT, Integer.MIN_VALUE); // how big is the chance of such data?
+ if (intValue != Integer.MIN_VALUE)
+ message = String.valueOf(intValue);
+ }
+
+ if (message != null) {
+ Logger.i(getLogSession(), "[Broadcast] " + ACTION_SEND + " broadcast received with data: \"" + message + "\"");
+ mManager.send(message);
+ return;
+ }
+ }
+ // No data od incompatible type of EXTRA_TEXT
+ if (!hasMessage)
+ Logger.i(getLogSession(), "[Broadcast] " + ACTION_SEND + " broadcast received no data.");
+ else
+ Logger.i(getLogSession(), "[Broadcast] " + ACTION_SEND + " broadcast received incompatible data type. Only String and int are supported.");
}
};
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/widget/ForegroundLinearLayout.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/widget/ForegroundLinearLayout.java
new file mode 100644
index 00000000..42950e70
--- /dev/null
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/widget/ForegroundLinearLayout.java
@@ -0,0 +1,148 @@
+/*************************************************************************************************************************************************
+ * Copyright (c) 2015, Nordic Semiconductor
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ ************************************************************************************************************************************************/
+
+package no.nordicsemi.android.nrftoolbox.widget;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.NinePatchDrawable;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.util.AttributeSet;
+import android.widget.LinearLayout;
+
+import no.nordicsemi.android.nrftoolbox.R;
+
+public class ForegroundLinearLayout extends LinearLayout {
+
+ private Drawable mForegroundSelector;
+ private Rect mRectPadding;
+ private boolean mUseBackgroundPadding = false;
+
+ public ForegroundLinearLayout(Context context) {
+ super(context);
+ }
+
+ public ForegroundLinearLayout(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public ForegroundLinearLayout(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ForegroundRelativeLayout,
+ defStyle, 0);
+
+ final Drawable d = a.getDrawable(R.styleable.ForegroundRelativeLayout_foreground);
+ if (d != null) {
+ setForeground(d);
+ }
+
+ a.recycle();
+
+ if (this.getBackground() instanceof NinePatchDrawable) {
+ final NinePatchDrawable npd = (NinePatchDrawable) this.getBackground();
+ mRectPadding = new Rect();
+ if (npd.getPadding(mRectPadding)) {
+ mUseBackgroundPadding = true;
+ }
+ }
+ }
+
+ @Override
+ protected void drawableStateChanged() {
+ super.drawableStateChanged();
+
+ if (mForegroundSelector != null && mForegroundSelector.isStateful()) {
+ mForegroundSelector.setState(getDrawableState());
+ }
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+
+ if (mForegroundSelector != null) {
+ if (mUseBackgroundPadding) {
+ mForegroundSelector.setBounds(mRectPadding.left, mRectPadding.top, w - mRectPadding.right, h - mRectPadding.bottom);
+ } else {
+ mForegroundSelector.setBounds(0, 0, w, h);
+ }
+ }
+ }
+
+ @Override
+ protected void dispatchDraw(@NonNull Canvas canvas) {
+ super.dispatchDraw(canvas);
+
+ if (mForegroundSelector != null) {
+ mForegroundSelector.draw(canvas);
+ }
+ }
+
+ @Override
+ protected boolean verifyDrawable(Drawable who) {
+ return super.verifyDrawable(who) || (who == mForegroundSelector);
+ }
+
+ @Override
+ public void jumpDrawablesToCurrentState() {
+ super.jumpDrawablesToCurrentState();
+ if (mForegroundSelector != null) mForegroundSelector.jumpToCurrentState();
+ }
+
+ public void setForeground(Drawable drawable) {
+ if (mForegroundSelector != drawable) {
+ if (mForegroundSelector != null) {
+ mForegroundSelector.setCallback(null);
+ unscheduleDrawable(mForegroundSelector);
+ }
+
+ mForegroundSelector = drawable;
+
+ if (drawable != null) {
+ setWillNotDraw(false);
+ drawable.setCallback(this);
+ if (drawable.isStateful()) {
+ drawable.setState(getDrawableState());
+ }
+ } else {
+ setWillNotDraw(true);
+ }
+ requestLayout();
+ invalidate();
+ }
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ @Override
+ public void drawableHotspotChanged(float x, float y) {
+ super.drawableHotspotChanged(x, y);
+ if (mForegroundSelector != null) {
+ mForegroundSelector.setHotspot(x, y);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/widget/ForegroundRelativeLayout.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/widget/ForegroundRelativeLayout.java
new file mode 100644
index 00000000..a0e3ab6c
--- /dev/null
+++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/widget/ForegroundRelativeLayout.java
@@ -0,0 +1,148 @@
+/*************************************************************************************************************************************************
+ * Copyright (c) 2015, Nordic Semiconductor
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ ************************************************************************************************************************************************/
+
+package no.nordicsemi.android.nrftoolbox.widget;
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.NinePatchDrawable;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.util.AttributeSet;
+import android.widget.RelativeLayout;
+
+import no.nordicsemi.android.nrftoolbox.R;
+
+public class ForegroundRelativeLayout extends RelativeLayout {
+
+ private Drawable mForegroundSelector;
+ private Rect mRectPadding;
+ private boolean mUseBackgroundPadding = false;
+
+ public ForegroundRelativeLayout(Context context) {
+ super(context);
+ }
+
+ public ForegroundRelativeLayout(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public ForegroundRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ForegroundRelativeLayout,
+ defStyle, 0);
+
+ final Drawable d = a.getDrawable(R.styleable.ForegroundRelativeLayout_foreground);
+ if (d != null) {
+ setForeground(d);
+ }
+
+ a.recycle();
+
+ if (this.getBackground() instanceof NinePatchDrawable) {
+ final NinePatchDrawable npd = (NinePatchDrawable) this.getBackground();
+ mRectPadding = new Rect();
+ if (npd.getPadding(mRectPadding)) {
+ mUseBackgroundPadding = true;
+ }
+ }
+ }
+
+ @Override
+ protected void drawableStateChanged() {
+ super.drawableStateChanged();
+
+ if (mForegroundSelector != null && mForegroundSelector.isStateful()) {
+ mForegroundSelector.setState(getDrawableState());
+ }
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+
+ if (mForegroundSelector != null) {
+ if (mUseBackgroundPadding) {
+ mForegroundSelector.setBounds(mRectPadding.left, mRectPadding.top, w - mRectPadding.right, h - mRectPadding.bottom);
+ } else {
+ mForegroundSelector.setBounds(0, 0, w, h);
+ }
+ }
+ }
+
+ @Override
+ protected void dispatchDraw(@NonNull Canvas canvas) {
+ super.dispatchDraw(canvas);
+
+ if (mForegroundSelector != null) {
+ mForegroundSelector.draw(canvas);
+ }
+ }
+
+ @Override
+ protected boolean verifyDrawable(Drawable who) {
+ return super.verifyDrawable(who) || (who == mForegroundSelector);
+ }
+
+ @Override
+ public void jumpDrawablesToCurrentState() {
+ super.jumpDrawablesToCurrentState();
+ if (mForegroundSelector != null) mForegroundSelector.jumpToCurrentState();
+ }
+
+ public void setForeground(Drawable drawable) {
+ if (mForegroundSelector != drawable) {
+ if (mForegroundSelector != null) {
+ mForegroundSelector.setCallback(null);
+ unscheduleDrawable(mForegroundSelector);
+ }
+
+ mForegroundSelector = drawable;
+
+ if (drawable != null) {
+ setWillNotDraw(false);
+ drawable.setCallback(this);
+ if (drawable.isStateful()) {
+ drawable.setState(getDrawableState());
+ }
+ } else {
+ setWillNotDraw(true);
+ }
+ requestLayout();
+ invalidate();
+ }
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ @Override
+ public void drawableHotspotChanged(float x, float y) {
+ super.drawableHotspotChanged(x, y);
+ if (mForegroundSelector != null) {
+ mForegroundSelector.setHotspot(x, y);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/item_background_light.xml b/app/src/main/res/color/menu_text.xml
similarity index 80%
rename from app/src/main/res/drawable/item_background_light.xml
rename to app/src/main/res/color/menu_text.xml
index b1d87923..c6d777f2 100644
--- a/app/src/main/res/drawable/item_background_light.xml
+++ b/app/src/main/res/color/menu_text.xml
@@ -1,5 +1,5 @@
-
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
-
-
-
-
+
+
diff --git a/app/src/main/res/drawable-hdpi/ic_drawer.png b/app/src/main/res/drawable-hdpi/ic_drawer.png
deleted file mode 100644
index bb40b723..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_drawer.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_menu_about.png b/app/src/main/res/drawable-hdpi/ic_menu_about.png
deleted file mode 100644
index c643fa54..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_menu_about.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_menu_settings.png b/app/src/main/res/drawable-hdpi/ic_menu_settings.png
deleted file mode 100644
index 3e4580e0..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_menu_settings.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_permission_log.png b/app/src/main/res/drawable-hdpi/ic_permission_log.png
deleted file mode 100644
index e45ea1fd..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_permission_log.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/ic_stat_notify_dfu.png b/app/src/main/res/drawable-hdpi/ic_stat_notify_dfu.png
deleted file mode 100644
index 261078de..00000000
Binary files a/app/src/main/res/drawable-hdpi/ic_stat_notify_dfu.png and /dev/null differ
diff --git a/app/src/main/res/drawable-hdpi/list_divider_holo_light.9.png b/app/src/main/res/drawable-hdpi/list_divider_holo_light.9.png
deleted file mode 100644
index 0279e17a..00000000
Binary files a/app/src/main/res/drawable-hdpi/list_divider_holo_light.9.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_drawer.png b/app/src/main/res/drawable-xhdpi/ic_drawer.png
deleted file mode 100644
index 0f04c497..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_drawer.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_menu_about.png b/app/src/main/res/drawable-xhdpi/ic_menu_about.png
deleted file mode 100644
index e4be458d..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_menu_about.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_menu_settings.png b/app/src/main/res/drawable-xhdpi/ic_menu_settings.png
deleted file mode 100644
index 09b01483..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_menu_settings.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_permission_log.png b/app/src/main/res/drawable-xhdpi/ic_permission_log.png
deleted file mode 100644
index 95708234..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_permission_log.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_notify_dfu.png b/app/src/main/res/drawable-xhdpi/ic_stat_notify_dfu.png
deleted file mode 100644
index 6009fd1b..00000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_stat_notify_dfu.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/list_divider_holo_light.9.png b/app/src/main/res/drawable-xhdpi/list_divider_holo_light.9.png
deleted file mode 100644
index 65061c0f..00000000
Binary files a/app/src/main/res/drawable-xhdpi/list_divider_holo_light.9.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/nordic_logo_horiz.png b/app/src/main/res/drawable-xhdpi/nordic_logo_horiz.png
deleted file mode 100644
index 80552bc9..00000000
Binary files a/app/src/main/res/drawable-xhdpi/nordic_logo_horiz.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/nordic_logo_horiz_dark.png b/app/src/main/res/drawable-xhdpi/nordic_logo_horiz_dark.png
new file mode 100644
index 00000000..89309efe
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/nordic_logo_horiz_dark.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/action_bar_shadow.9.png b/app/src/main/res/drawable-xxhdpi/action_bar_shadow.9.png
new file mode 100644
index 00000000..c4e80834
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/action_bar_shadow.9.png differ
diff --git a/app/src/main/res/layout-land/activity_feature_bpm.xml b/app/src/main/res/layout-land/activity_feature_bpm.xml
index 867ad75d..12e5413e 100644
--- a/app/src/main/res/layout-land/activity_feature_bpm.xml
+++ b/app/src/main/res/layout-land/activity_feature_bpm.xml
@@ -19,269 +19,279 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
+
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
-
+ android:layout_centerVertical="true"
+ android:layout_marginLeft="@dimen/bpm_feature_title_long_margin"
+ android:rotation="270"
+ android:text="@string/bpm_feature_title_long"
+ android:textColor="@color/darkGray"
+ android:textSize="32dp"
+ android:textStyle="bold" />
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_marginTop="@dimen/feature_device_name_margin_top"
+ android:layout_toRightOf="@+id/battery"
+ android:ellipsize="end"
+ android:freezesText="true"
+ android:maxLines="1"
+ android:text="@string/bpm_default_name"
+ android:textAllCaps="true"
+ android:textAppearance="?android:attr/textAppearanceLarge" />
-
+
+
+
+ android:text="@string/bpm_section_bp_header" />
-
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:layout_marginTop="15dp"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
+
+
+
+
+
-
-
+
-
+
+
diff --git a/app/src/main/res/layout-land/activity_feature_csc.xml b/app/src/main/res/layout-land/activity_feature_csc.xml
index 3b64dd25..ebca3ded 100644
--- a/app/src/main/res/layout-land/activity_feature_csc.xml
+++ b/app/src/main/res/layout-land/activity_feature_csc.xml
@@ -19,201 +19,94 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
+ android:orientation="vertical"
+ tools:context=".CSCActivity" >
-
+
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
-
+ android:layout_centerVertical="true"
+ android:layout_marginLeft="@dimen/csc_feature_title_long_margin"
+ android:rotation="270"
+ android:text="@string/csc_feature_title_long"
+ android:textColor="@color/darkGray"
+ android:textSize="32dp"
+ android:textStyle="bold" />
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ android:baselineAligned="false"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:gravity="center_horizontal"
+ android:orientation="horizontal" >
+
+
+ android:layout_height="wrap_content"
+ android:text="@string/csc_section_csc_header" />
+ android:paddingLeft="@dimen/feature_section_padding"
+ android:paddingRight="@dimen/feature_section_padding" >
+ android:text="@string/csc_speed" />
+ android:text="@string/csc_speed_unit_km_h" />
+ android:text="@string/csc_cadence" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_feature_dfu.xml b/app/src/main/res/layout-land/activity_feature_dfu.xml
index 5164cf9c..0bae49de 100644
--- a/app/src/main/res/layout-land/activity_feature_dfu.xml
+++ b/app/src/main/res/layout-land/activity_feature_dfu.xml
@@ -20,233 +20,245 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ tools:context=".DfuActivity" >
-
+
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
+
+
+
+
+ android:baselineAligned="false"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:gravity="center_horizontal"
+ android:orientation="horizontal" >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ android:layout_width="0dp"
+ android:layout_height="160dp"
+ android:layout_weight="1"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ android:layout_marginLeft="4dp"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_margin="@dimen/feature_section_padding"
+ android:enabled="false"
+ android:onClick="onUploadClicked"
+ android:text="@string/dfu_action_upload" />
-
+ android:layout_margin="@dimen/feature_section_padding"
+ android:text="@string/dfu_status_uploading"
+ android:freezesText="true"
+ android:visibility="invisible" />
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_feature_gls.xml b/app/src/main/res/layout-land/activity_feature_gls.xml
index ffaa191b..8ebf5124 100644
--- a/app/src/main/res/layout-land/activity_feature_gls.xml
+++ b/app/src/main/res/layout-land/activity_feature_gls.xml
@@ -19,190 +19,200 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
+ android:orientation="vertical"
+ tools:context=".BPMActivity" >
-
+
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
+
+
+
+
+
+
+ android:layout_above="@+id/action_connect"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:gravity="center_horizontal"
+ android:orientation="horizontal" >
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:text="@string/gls_section_actions" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:gravity="center_horizontal"
+ android:orientation="vertical" >
-
+
+
+
+
+
+
+
+ android:orientation="horizontal"
+ android:visibility="gone" >
-
-
-
-
-
-
+
+
-
-
+
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_feature_hrs.xml b/app/src/main/res/layout-land/activity_feature_hrs.xml
index fd264292..f957104d 100644
--- a/app/src/main/res/layout-land/activity_feature_hrs.xml
+++ b/app/src/main/res/layout-land/activity_feature_hrs.xml
@@ -19,124 +19,134 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
-
+ android:orientation="vertical"
+ tools:context=".BPMActivity" >
-
+
-
-
-
-
-
+ android:layout_height="match_parent">
+
+
-
+
+
+
+
+
+ android:baselineAligned="false"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_above="@+id/action_connect"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ android:orientation="horizontal" >
-
+
-
+ android:gravity="right"
+ android:orientation="vertical" >
-
+
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
+
+
diff --git a/app/src/main/res/layout-land/activity_feature_hts.xml b/app/src/main/res/layout-land/activity_feature_hts.xml
index 8a54406a..77382b0d 100644
--- a/app/src/main/res/layout-land/activity_feature_hts.xml
+++ b/app/src/main/res/layout-land/activity_feature_hts.xml
@@ -19,85 +19,94 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_feature_proximity.xml b/app/src/main/res/layout-land/activity_feature_proximity.xml
index 95bf1dbe..40277993 100644
--- a/app/src/main/res/layout-land/activity_feature_proximity.xml
+++ b/app/src/main/res/layout-land/activity_feature_proximity.xml
@@ -19,97 +19,107 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
+
-
+
-
+
-
-
-
-
-
+ android:layout_centerVertical="true"
+ android:layout_marginLeft="@dimen/proximity_feature_title_long_margin"
+ android:rotation="270"
+ android:text="@string/proximity_feature_title_long"
+ android:textColor="@color/darkGray"
+ android:textSize="32dp"
+ android:textStyle="bold" />
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+ android:layout_alignParentBottom="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:onClick="onConnectClicked"
+ android:text="@string/action_connect" />
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_feature_rsc.xml b/app/src/main/res/layout-land/activity_feature_rsc.xml
index 2a8c7a16..4ad44d49 100644
--- a/app/src/main/res/layout-land/activity_feature_rsc.xml
+++ b/app/src/main/res/layout-land/activity_feature_rsc.xml
@@ -19,296 +19,306 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
+
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_marginTop="@dimen/feature_device_name_margin_top"
+ android:layout_toRightOf="@+id/battery"
+ android:ellipsize="end"
+ android:freezesText="true"
+ android:maxLines="1"
+ android:text="@string/rsc_default_name"
+ android:textAllCaps="true"
+ android:textAppearance="?android:attr/textAppearanceLarge" />
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:gravity="center_horizontal"
+ android:orientation="horizontal" >
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginTop="8dp"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
+
+
+
+
+
+
-
-
-
+
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-land/activity_feature_uart.xml b/app/src/main/res/layout-land/activity_feature_uart.xml
index a10aa6c8..b1bd02c1 100644
--- a/app/src/main/res/layout-land/activity_feature_uart.xml
+++ b/app/src/main/res/layout-land/activity_feature_uart.xml
@@ -23,35 +23,43 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:baselineAligned="false"
- android:orientation="horizontal"
+ android:orientation="vertical"
tools:context=".UARTActivity" >
-
+
-
+
+ android:layout_weight="8"
+ tools:layout="@layout/fragment_feature_uart_control" />
-
-
+ android:layout_weight="6" >
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw600dp-land/activity_feature_bpm.xml b/app/src/main/res/layout-sw600dp-land/activity_feature_bpm.xml
index 71c07133..68c1a7f6 100644
--- a/app/src/main/res/layout-sw600dp-land/activity_feature_bpm.xml
+++ b/app/src/main/res/layout-sw600dp-land/activity_feature_bpm.xml
@@ -19,270 +19,280 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
+
-
+
-
+
-
+
-
+
-
+
+ android:layout_centerHorizontal="true"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:baselineAligned="false"
+ android:gravity="center_horizontal"
+ android:orientation="horizontal" >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ android:text="@string/bpm_section_bp_header" />
-
-
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginTop="15dp"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
+
+
+
+
+
-
-
+
-
+
+
diff --git a/app/src/main/res/layout-sw600dp-land/activity_feature_csc.xml b/app/src/main/res/layout-sw600dp-land/activity_feature_csc.xml
index b82259ed..25c95055 100644
--- a/app/src/main/res/layout-sw600dp-land/activity_feature_csc.xml
+++ b/app/src/main/res/layout-sw600dp-land/activity_feature_csc.xml
@@ -19,228 +19,238 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
+ android:orientation="vertical"
+ tools:context=".CSCActivity" >
-
+
-
-
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw600dp-land/activity_feature_dfu.xml b/app/src/main/res/layout-sw600dp-land/activity_feature_dfu.xml
index 5960265b..8ef3063a 100644
--- a/app/src/main/res/layout-sw600dp-land/activity_feature_dfu.xml
+++ b/app/src/main/res/layout-sw600dp-land/activity_feature_dfu.xml
@@ -20,226 +20,238 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ tools:context=".DfuActivity" >
-
+
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_margin="@dimen/feature_section_padding"
+ android:enabled="false"
+ android:onClick="onUploadClicked"
+ android:text="@string/dfu_action_upload" />
-
+ android:layout_margin="@dimen/feature_section_padding"
+ android:text="@string/dfu_status_uploading"
+ android:freezesText="true"
+ android:visibility="invisible" />
+
+
+
+
-
-
-
+ android:layout_alignParentBottom="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:onClick="onConnectClicked"
+ android:text="@string/action_select" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw600dp-land/activity_feature_hrs.xml b/app/src/main/res/layout-sw600dp-land/activity_feature_hrs.xml
index 9f0e463c..e18c264a 100644
--- a/app/src/main/res/layout-sw600dp-land/activity_feature_hrs.xml
+++ b/app/src/main/res/layout-sw600dp-land/activity_feature_hrs.xml
@@ -19,125 +19,135 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
-
+ android:orientation="vertical"
+ tools:context=".BPMActivity" >
-
+
-
-
-
-
-
+ android:layout_height="match_parent">
+
+
-
+
+
+
+
+
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ android:gravity="center_horizontal"
+ android:orientation="horizontal" >
-
+
-
+ android:gravity="right"
+ android:orientation="vertical" >
-
+
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout-sw720dp-land/activity_feature_rsc.xml b/app/src/main/res/layout-sw720dp-land/activity_feature_rsc.xml
index 6c475147..6f7099ac 100644
--- a/app/src/main/res/layout-sw720dp-land/activity_feature_rsc.xml
+++ b/app/src/main/res/layout-sw720dp-land/activity_feature_rsc.xml
@@ -19,263 +19,273 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
+
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
+
+
+
+
+
+
-
+
+
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginTop="15dp"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
-
-
-
-
-
-
-
-
-
-
+ android:text="@string/rsc_section_activity_header" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_gravity="center_horizontal"
+ android:freezesText="true"
+ android:padding="8dp"
+ android:text="@string/not_available"
+ android:textSize="22sp" />
+
-
-
-
+ android:layout_alignParentBottom="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:onClick="onConnectClicked"
+ android:text="@string/action_connect" />
-
-
-
-
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_feature_bpm.xml b/app/src/main/res/layout/activity_feature_bpm.xml
index b15bfd6a..2fd9c2ff 100644
--- a/app/src/main/res/layout/activity_feature_bpm.xml
+++ b/app/src/main/res/layout/activity_feature_bpm.xml
@@ -19,257 +19,267 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
+
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
+ style="@style/Widget.ListTitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/bpm_section_bp_header" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:id="@+id/timestamp"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:freezesText="true"
+ android:padding="8dp"
+ android:text="@string/not_available"
+ android:textSize="22sp" />
-
-
-
+ android:layout_alignParentBottom="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:onClick="onConnectClicked"
+ android:text="@string/action_connect" />
-
-
-
-
-
-
-
-
-
+
+
diff --git a/app/src/main/res/layout/activity_feature_csc.xml b/app/src/main/res/layout/activity_feature_csc.xml
index b82259ed..25c95055 100644
--- a/app/src/main/res/layout/activity_feature_csc.xml
+++ b/app/src/main/res/layout/activity_feature_csc.xml
@@ -19,228 +19,238 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
+ android:orientation="vertical"
+ tools:context=".CSCActivity" >
-
+
-
-
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_alignParentBottom="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:onClick="onConnectClicked"
+ android:text="@string/action_connect" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_feature_dfu.xml b/app/src/main/res/layout/activity_feature_dfu.xml
index bad8c83c..466f97d7 100644
--- a/app/src/main/res/layout/activity_feature_dfu.xml
+++ b/app/src/main/res/layout/activity_feature_dfu.xml
@@ -20,227 +20,239 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ tools:context=".DfuActivity" >
-
+
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_margin="@dimen/feature_section_padding"
+ android:enabled="false"
+ android:onClick="onUploadClicked"
+ android:text="@string/dfu_action_upload" />
-
+ android:layout_margin="@dimen/feature_section_padding"
+ android:text="@string/dfu_status_uploading"
+ android:freezesText="true"
+ android:visibility="invisible" />
+
+
+
+
-
-
-
+ android:layout_alignParentBottom="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:onClick="onConnectClicked"
+ android:text="@string/action_select" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_feature_gls.xml b/app/src/main/res/layout/activity_feature_gls.xml
index 4be594a7..e15e017d 100644
--- a/app/src/main/res/layout/activity_feature_gls.xml
+++ b/app/src/main/res/layout/activity_feature_gls.xml
@@ -19,189 +19,198 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
+ android:orientation="vertical">
-
+
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
+
+
+
+
+
+
-
+
+
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:text="@string/gls_section_actions" />
-
-
+ android:orientation="horizontal" >
-
+
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+ android:layout_alignParentBottom="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:onClick="onConnectClicked"
+ android:text="@string/action_connect" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_feature_hrs.xml b/app/src/main/res/layout/activity_feature_hrs.xml
index 4dd41d12..e94bdc50 100644
--- a/app/src/main/res/layout/activity_feature_hrs.xml
+++ b/app/src/main/res/layout/activity_feature_hrs.xml
@@ -19,118 +19,128 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_feature_hts.xml b/app/src/main/res/layout/activity_feature_hts.xml
index 8a54406a..77382b0d 100644
--- a/app/src/main/res/layout/activity_feature_hts.xml
+++ b/app/src/main/res/layout/activity_feature_hts.xml
@@ -19,85 +19,94 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_feature_proximity.xml b/app/src/main/res/layout/activity_feature_proximity.xml
index c3ef1f44..f6a1c730 100644
--- a/app/src/main/res/layout/activity_feature_proximity.xml
+++ b/app/src/main/res/layout/activity_feature_proximity.xml
@@ -19,92 +19,102 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
\ No newline at end of file
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_feature_rsc.xml b/app/src/main/res/layout/activity_feature_rsc.xml
index 6c475147..6f7099ac 100644
--- a/app/src/main/res/layout/activity_feature_rsc.xml
+++ b/app/src/main/res/layout/activity_feature_rsc.xml
@@ -19,263 +19,273 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
+
-
-
-
-
-
-
-
+ android:layout_height="match_parent">
-
+
+
+
+
+
+
+
-
+
+
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ android:layout_marginTop="@dimen/feature_vertical_margin_top"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ android:layout_marginTop="15dp"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:layout_marginLeft="@dimen/feature_horizontal_margin"
+ android:layout_marginRight="@dimen/feature_horizontal_margin"
+ style="@style/Widget.List"
+ android:orientation="vertical" >
-
-
-
-
-
-
-
-
-
-
+ android:text="@string/rsc_section_activity_header" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_gravity="center_horizontal"
+ android:freezesText="true"
+ android:padding="8dp"
+ android:text="@string/not_available"
+ android:textSize="22sp" />
+
-
-
-
+ android:layout_alignParentBottom="true"
+ android:layout_centerHorizontal="true"
+ android:layout_marginBottom="@dimen/activity_vertical_margin_bottom"
+ android:onClick="onConnectClicked"
+ android:text="@string/action_connect" />
-
-
-
-
-
-
-
-
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_feature_template.xml b/app/src/main/res/layout/activity_feature_template.xml
index 6e282fe2..562203a1 100644
--- a/app/src/main/res/layout/activity_feature_template.xml
+++ b/app/src/main/res/layout/activity_feature_template.xml
@@ -19,118 +19,128 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ tools:context=".TemplateActivity" >
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
-
-
+
-
+
+
-
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_feature_uart.xml b/app/src/main/res/layout/activity_feature_uart.xml
index 76d9797b..513b4950 100644
--- a/app/src/main/res/layout/activity_feature_uart.xml
+++ b/app/src/main/res/layout/activity_feature_uart.xml
@@ -19,25 +19,40 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
-
-
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_features.xml b/app/src/main/res/layout/activity_features.xml
index 272ae019..97038639 100644
--- a/app/src/main/res/layout/activity_features.xml
+++ b/app/src/main/res/layout/activity_features.xml
@@ -22,45 +22,66 @@
-->
+ android:fitsSystemWindows="true"
+ tools:context=".FeaturesActivity">
-
+ android:layout_height="match_parent"
+ android:orientation="vertical">
-
+
+
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ style="@style/HeaderShadow">
-
-
+
+
+
+
+
-
-
+ android:background="#FFFFFFFF"
+ app:insetForeground="#2000">
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
new file mode 100644
index 00000000..51915c64
--- /dev/null
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/drawer.xml b/app/src/main/res/layout/drawer.xml
index 6f12bcca..baf5587d 100644
--- a/app/src/main/res/layout/drawer.xml
+++ b/app/src/main/res/layout/drawer.xml
@@ -20,53 +20,52 @@
~ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
~ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
-
+
-
+
-
+
-
+
-
+
-
-
-
-
+
-
\ No newline at end of file
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/drawer_plugin.xml b/app/src/main/res/layout/drawer_plugin.xml
index b3eba0ac..8e935290 100644
--- a/app/src/main/res/layout/drawer_plugin.xml
+++ b/app/src/main/res/layout/drawer_plugin.xml
@@ -22,11 +22,11 @@
-->
+ android:layout_marginLeft="24dp" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_zip_info.xml b/app/src/main/res/layout/fragment_zip_info.xml
index 201b79d9..527be066 100644
--- a/app/src/main/res/layout/fragment_zip_info.xml
+++ b/app/src/main/res/layout/fragment_zip_info.xml
@@ -25,7 +25,6 @@
android:layout_height="wrap_content" >
-
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/help.xml b/app/src/main/res/menu/help.xml
index fe54e57f..1f2cf6cd 100644
--- a/app/src/main/res/menu/help.xml
+++ b/app/src/main/res/menu/help.xml
@@ -24,9 +24,8 @@
\ No newline at end of file
diff --git a/app/src/main/res/menu/settings_and_about.xml b/app/src/main/res/menu/settings_and_about.xml
index 594e0051..bc9dbace 100644
--- a/app/src/main/res/menu/settings_and_about.xml
+++ b/app/src/main/res/menu/settings_and_about.xml
@@ -24,14 +24,14 @@
diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/app/src/main/res/values-sw600dp/dimens.xml
index 0c538469..9482d4a2 100644
--- a/app/src/main/res/values-sw600dp/dimens.xml
+++ b/app/src/main/res/values-sw600dp/dimens.xml
@@ -26,8 +26,9 @@
screen margins) for sw600dp devices (e.g. 7" tablets) here.
-->
24dp
- 24dp
40dp
+ 300dp
+ 24dp
80dp
80dp
diff --git a/app/src/main/res/values-sw720dp-land/dimens.xml b/app/src/main/res/values-sw720dp-land/dimens.xml
index db1b9ede..082059fa 100644
--- a/app/src/main/res/values-sw720dp-land/dimens.xml
+++ b/app/src/main/res/values-sw720dp-land/dimens.xml
@@ -26,7 +26,6 @@
screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
-->
128dp
- 32dp
60dp
100dp
diff --git a/app/src/main/res/values-v21/dimens.xml b/app/src/main/res/values-v21/dimens.xml
index 39782e11..11f1d5a6 100644
--- a/app/src/main/res/values-v21/dimens.xml
+++ b/app/src/main/res/values-v21/dimens.xml
@@ -25,9 +25,8 @@
56dp
-48dp
-
- 26dp
- 18dp
- 0dp
-
+ 6dp
+
+ 54dp
+
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
index 634ad1ff..96ee764d 100644
--- a/app/src/main/res/values-v21/styles.xml
+++ b/app/src/main/res/values-v21/styles.xml
@@ -22,7 +22,15 @@
-->
-
+
+
+
+
+
-
-
-
-
-
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_about_text.xml b/app/src/main/res/values/attrs.xml
similarity index 87%
rename from app/src/main/res/layout/dialog_about_text.xml
rename to app/src/main/res/values/attrs.xml
index fe6a45ae..5a70d3f5 100644
--- a/app/src/main/res/layout/dialog_about_text.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -1,4 +1,4 @@
-
+
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 2c070a5a..ce9a2106 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -23,9 +23,7 @@
16dp
- 16dp
32dp
- 16dp
50dp
50dp
8dp
@@ -34,14 +32,18 @@
256dp
256dp
+ 260dp
+ 30dp
+ 16dp
+
10dp
0dp
0dp
-81dp
-
- 16dp
- 8dp
- 8dp
+
+ 24dp
+ 18dp
+ 0dp
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 299a2729..012fa3bf 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -26,9 +26,6 @@
fonts/trebucbd.ttf
fonts/trebuc.ttf
- read and write log
- Allows the app to write and read from Nordic Semiconductor Event log
-
OK
Yes
No
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 02b3ea1e..533a2b47 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -21,6 +21,51 @@
-->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -50,55 +95,34 @@
- 40dp
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+