mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2025-12-22 00:44:26 +01:00
Adding units settings to CSC, RSC, HTM.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
|
<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" external.system.module.group="nRFToolbox" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
|
||||||
<component name="FacetManager">
|
<component name="FacetManager">
|
||||||
<facet type="android-gradle" name="Android-Gradle">
|
<facet type="android-gradle" name="Android-Gradle">
|
||||||
<configuration>
|
<configuration>
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
<facet type="android" name="Android">
|
<facet type="android" name="Android">
|
||||||
<configuration>
|
<configuration>
|
||||||
<option name="SELECTED_BUILD_VARIANT" value="debug" />
|
<option name="SELECTED_BUILD_VARIANT" value="debug" />
|
||||||
|
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
|
||||||
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
|
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
|
||||||
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
|
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
|
||||||
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
|
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
|
||||||
@@ -24,6 +25,7 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="NewModuleRootManager" inherit-compiler-output="false">
|
<component name="NewModuleRootManager" inherit-compiler-output="false">
|
||||||
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
|
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
|
||||||
|
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
|
||||||
<exclude-output />
|
<exclude-output />
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
|
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ android {
|
|||||||
applicationId "no.nordicsemi.android.nrftoolbox"
|
applicationId "no.nordicsemi.android.nrftoolbox"
|
||||||
minSdkVersion 18
|
minSdkVersion 18
|
||||||
targetSdkVersion 21
|
targetSdkVersion 21
|
||||||
versionCode 27
|
versionCode 28
|
||||||
versionName "1.11.4"
|
versionName "1.11.5"
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
|
|||||||
@@ -23,8 +23,8 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="no.nordicsemi.android.nrftoolbox"
|
package="no.nordicsemi.android.nrftoolbox"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
android:versionCode="27"
|
android:versionCode="28"
|
||||||
android:versionName="1.11.4" >
|
android:versionName="1.11.5" >
|
||||||
|
|
||||||
<uses-sdk
|
<uses-sdk
|
||||||
android:minSdkVersion="18"
|
android:minSdkVersion="18"
|
||||||
@@ -96,6 +96,9 @@
|
|||||||
<category android:name="no.nordicsemi.android.nrftoolbox.LAUNCHER" />
|
<category android:name="no.nordicsemi.android.nrftoolbox.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name="no.nordicsemi.android.nrftoolbox.hts.settings.SettingsActivity"
|
||||||
|
android:label="@string/hts_settings_title" />
|
||||||
<activity
|
<activity
|
||||||
android:name="no.nordicsemi.android.nrftoolbox.bpm.BPMActivity"
|
android:name="no.nordicsemi.android.nrftoolbox.bpm.BPMActivity"
|
||||||
android:icon="@drawable/ic_bpm_feature"
|
android:icon="@drawable/ic_bpm_feature"
|
||||||
@@ -138,6 +141,9 @@
|
|||||||
<category android:name="no.nordicsemi.android.nrftoolbox.LAUNCHER" />
|
<category android:name="no.nordicsemi.android.nrftoolbox.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name="no.nordicsemi.android.nrftoolbox.rsc.settings.SettingsActivity"
|
||||||
|
android:label="@string/rsc_settings_title" />
|
||||||
<activity
|
<activity
|
||||||
android:name="no.nordicsemi.android.nrftoolbox.csc.CSCActivity"
|
android:name="no.nordicsemi.android.nrftoolbox.csc.CSCActivity"
|
||||||
android:icon="@drawable/ic_csc_feature"
|
android:icon="@drawable/ic_csc_feature"
|
||||||
@@ -149,6 +155,9 @@
|
|||||||
<category android:name="no.nordicsemi.android.nrftoolbox.LAUNCHER" />
|
<category android:name="no.nordicsemi.android.nrftoolbox.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name="no.nordicsemi.android.nrftoolbox.csc.settings.SettingsActivity"
|
||||||
|
android:label="@string/csc_settings_title" />
|
||||||
<activity
|
<activity
|
||||||
android:name="no.nordicsemi.android.nrftoolbox.uart.UARTActivity"
|
android:name="no.nordicsemi.android.nrftoolbox.uart.UARTActivity"
|
||||||
android:icon="@drawable/ic_uart_feature"
|
android:icon="@drawable/ic_uart_feature"
|
||||||
@@ -161,9 +170,6 @@
|
|||||||
<category android:name="no.nordicsemi.android.nrftoolbox.LAUNCHER" />
|
<category android:name="no.nordicsemi.android.nrftoolbox.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
|
||||||
android:name="no.nordicsemi.android.nrftoolbox.csc.settings.SettingsActivity"
|
|
||||||
android:label="@string/csc_settings_title" />
|
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name="no.nordicsemi.android.nrftoolbox.proximity.ProximityService"
|
android:name="no.nordicsemi.android.nrftoolbox.proximity.ProximityService"
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ import android.widget.TextView;
|
|||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
public class FeaturesActivity extends ActionBarActivity {
|
public class FeaturesActivity extends ActionBarActivity {
|
||||||
|
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 UTILS_CATEGORY = "no.nordicsemi.android.nrftoolbox.UTILS";
|
||||||
private static final String MCP_PACKAGE = "no.nordicsemi.android.mcp";
|
private static final String MCP_PACKAGE = "no.nordicsemi.android.mcp";
|
||||||
private static final String MCP_CLASS = MCP_PACKAGE + ".DeviceListActivity";
|
private static final String MCP_CLASS = MCP_PACKAGE + ".DeviceListActivity";
|
||||||
@@ -127,6 +128,7 @@ public class FeaturesActivity extends ActionBarActivity {
|
|||||||
|
|
||||||
// look for Master Control Panel
|
// look for Master Control Panel
|
||||||
final Intent mcpIntent = new Intent(Intent.ACTION_MAIN);
|
final Intent mcpIntent = new Intent(Intent.ACTION_MAIN);
|
||||||
|
mcpIntent.addCategory(MCP_CATEGORY);
|
||||||
mcpIntent.setClassName(MCP_PACKAGE, MCP_CLASS);
|
mcpIntent.setClassName(MCP_PACKAGE, MCP_CLASS);
|
||||||
final ResolveInfo mcpInfo = pm.resolveActivity(mcpIntent, 0);
|
final ResolveInfo mcpInfo = pm.resolveActivity(mcpIntent, 0);
|
||||||
|
|
||||||
@@ -136,7 +138,7 @@ public class FeaturesActivity extends ActionBarActivity {
|
|||||||
mcpItem.setTextColor(Color.GRAY);
|
mcpItem.setTextColor(Color.GRAY);
|
||||||
ColorMatrix grayscale = new ColorMatrix();
|
ColorMatrix grayscale = new ColorMatrix();
|
||||||
grayscale.setSaturation(0.0f);
|
grayscale.setSaturation(0.0f);
|
||||||
mcpItem.getCompoundDrawables()[0].setColorFilter(new ColorMatrixColorFilter(grayscale));
|
mcpItem.getCompoundDrawables()[0].mutate().setColorFilter(new ColorMatrixColorFilter(grayscale));
|
||||||
}
|
}
|
||||||
mcpItem.setOnClickListener(new View.OnClickListener() {
|
mcpItem.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
@@ -145,6 +147,7 @@ public class FeaturesActivity extends ActionBarActivity {
|
|||||||
if (mcpInfo == null)
|
if (mcpInfo == null)
|
||||||
action = new Intent(Intent.ACTION_VIEW, Uri.parse(MCP_MARKET_URI));
|
action = new Intent(Intent.ACTION_VIEW, Uri.parse(MCP_MARKET_URI));
|
||||||
action.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
|
action.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
|
||||||
|
action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
try {
|
try {
|
||||||
startActivity(action);
|
startActivity(action);
|
||||||
} catch (final ActivityNotFoundException e) {
|
} catch (final ActivityNotFoundException e) {
|
||||||
@@ -172,6 +175,7 @@ public class FeaturesActivity extends ActionBarActivity {
|
|||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
intent.setComponent(new ComponentName(info.activityInfo.packageName, info.activityInfo.name));
|
intent.setComponent(new ComponentName(info.activityInfo.packageName, info.activityInfo.name));
|
||||||
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
|
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
|
||||||
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||||
startActivity(intent);
|
startActivity(intent);
|
||||||
mDrawerLayout.closeDrawers();
|
mDrawerLayout.closeDrawers();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,23 +26,28 @@ import java.util.UUID;
|
|||||||
|
|
||||||
import no.nordicsemi.android.nrftoolbox.R;
|
import no.nordicsemi.android.nrftoolbox.R;
|
||||||
import no.nordicsemi.android.nrftoolbox.csc.settings.SettingsActivity;
|
import no.nordicsemi.android.nrftoolbox.csc.settings.SettingsActivity;
|
||||||
|
import no.nordicsemi.android.nrftoolbox.csc.settings.SettingsFragment;
|
||||||
import no.nordicsemi.android.nrftoolbox.profile.BleProfileService;
|
import no.nordicsemi.android.nrftoolbox.profile.BleProfileService;
|
||||||
import no.nordicsemi.android.nrftoolbox.profile.BleProfileServiceReadyActivity;
|
import no.nordicsemi.android.nrftoolbox.profile.BleProfileServiceReadyActivity;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
import android.support.v4.content.LocalBroadcastManager;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
public class CSCActivity extends BleProfileServiceReadyActivity<CSCService.CSCBinder> {
|
public class CSCActivity extends BleProfileServiceReadyActivity<CSCService.CSCBinder> {
|
||||||
private TextView mSpeedView;
|
private TextView mSpeedView;
|
||||||
|
private TextView mSpeedUnitView;
|
||||||
private TextView mCadenceView;
|
private TextView mCadenceView;
|
||||||
private TextView mDistanceView;
|
private TextView mDistanceView;
|
||||||
private TextView mDistanceUnitView;
|
private TextView mDistanceUnitView;
|
||||||
private TextView mTotalDistanceView;
|
private TextView mTotalDistanceView;
|
||||||
|
private TextView mTotalDistanceUnitView;
|
||||||
private TextView mGearRatioView;
|
private TextView mGearRatioView;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -64,21 +69,53 @@ public class CSCActivity extends BleProfileServiceReadyActivity<CSCService.CSCBi
|
|||||||
|
|
||||||
private void setGui() {
|
private void setGui() {
|
||||||
mSpeedView = (TextView) findViewById(R.id.speed);
|
mSpeedView = (TextView) findViewById(R.id.speed);
|
||||||
|
mSpeedUnitView = (TextView) findViewById(R.id.speed_unit);
|
||||||
mCadenceView = (TextView) findViewById(R.id.cadence);
|
mCadenceView = (TextView) findViewById(R.id.cadence);
|
||||||
mDistanceView = (TextView) findViewById(R.id.distance);
|
mDistanceView = (TextView) findViewById(R.id.distance);
|
||||||
mDistanceUnitView = (TextView) findViewById(R.id.distance_unit);
|
mDistanceUnitView = (TextView) findViewById(R.id.distance_unit);
|
||||||
mTotalDistanceView = (TextView) findViewById(R.id.distance_total);
|
mTotalDistanceView = (TextView) findViewById(R.id.distance_total);
|
||||||
|
mTotalDistanceUnitView = (TextView) findViewById(R.id.distance_total_unit);
|
||||||
mGearRatioView = (TextView) findViewById(R.id.ratio);
|
mGearRatioView = (TextView) findViewById(R.id.ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
setDefaultUI();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setDefaultUI() {
|
protected void setDefaultUI() {
|
||||||
mSpeedView.setText(R.string.not_available_value);
|
mSpeedView.setText(R.string.not_available_value);
|
||||||
mCadenceView.setText(R.string.not_available_value);
|
mCadenceView.setText(R.string.not_available_value);
|
||||||
mDistanceView.setText(R.string.not_available_value);
|
mDistanceView.setText(R.string.not_available_value);
|
||||||
mDistanceUnitView.setText(R.string.csc_distance_unit_m);
|
|
||||||
mTotalDistanceView.setText(R.string.not_available_value);
|
mTotalDistanceView.setText(R.string.not_available_value);
|
||||||
mGearRatioView.setText(R.string.not_available_value);
|
mGearRatioView.setText(R.string.not_available_value);
|
||||||
|
|
||||||
|
setUnits();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUnits() {
|
||||||
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
final int unit = Integer.parseInt(preferences.getString(SettingsFragment.SETTINGS_UNIT, String.valueOf(SettingsFragment.SETTINGS_UNIT_DEFAULT)));
|
||||||
|
|
||||||
|
switch (unit) {
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_M_S: // [m/s]
|
||||||
|
mSpeedUnitView.setText(R.string.csc_speed_unit_m_s);
|
||||||
|
mDistanceUnitView.setText(R.string.csc_distance_unit_m);
|
||||||
|
mTotalDistanceUnitView.setText(R.string.csc_total_distance_unit_km);
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_KM_H: // [km/h]
|
||||||
|
mSpeedUnitView.setText(R.string.csc_speed_unit_km_h);
|
||||||
|
mDistanceUnitView.setText(R.string.csc_distance_unit_m);
|
||||||
|
mTotalDistanceUnitView.setText(R.string.csc_total_distance_unit_km);
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_MPH: // [mph]
|
||||||
|
mSpeedUnitView.setText(R.string.csc_speed_unit_mph);
|
||||||
|
mDistanceUnitView.setText(R.string.csc_distance_unit_yd);
|
||||||
|
mTotalDistanceUnitView.setText(R.string.csc_total_distance_unit_mile);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -98,7 +135,7 @@ public class CSCActivity extends BleProfileServiceReadyActivity<CSCService.CSCBi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(final Menu menu) {
|
public boolean onCreateOptionsMenu(final Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.csc_menu, menu);
|
getMenuInflater().inflate(R.menu.settings_and_about, menu);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,17 +175,40 @@ public class CSCActivity extends BleProfileServiceReadyActivity<CSCService.CSCBi
|
|||||||
// not used
|
// not used
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onMeasurementReceived(final float speed, final float distance, final float totalDistance) {
|
private void onMeasurementReceived(float speed, float distance, float totalDistance) {
|
||||||
mSpeedView.setText(String.format("%.1f", speed));
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
if (distance < 1000) { // 1 km in m
|
final int unit = Integer.parseInt(preferences.getString(SettingsFragment.SETTINGS_UNIT, String.valueOf(SettingsFragment.SETTINGS_UNIT_DEFAULT)));
|
||||||
mDistanceView.setText(String.format("%.0f", distance));
|
|
||||||
mDistanceUnitView.setText(R.string.csc_distance_unit_m);
|
switch (unit) {
|
||||||
} else {
|
case SettingsFragment.SETTINGS_UNIT_KM_H:
|
||||||
mDistanceView.setText(String.format("%.2f", distance / 1000.0f));
|
speed = speed * 3.6f;
|
||||||
mDistanceUnitView.setText(R.string.csc_distance_unit_km);
|
// pass through intended
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_M_S:
|
||||||
|
if (distance < 1000) { // 1 km in m
|
||||||
|
mDistanceView.setText(String.format("%.0f", distance));
|
||||||
|
mDistanceUnitView.setText(R.string.csc_distance_unit_m);
|
||||||
|
} else {
|
||||||
|
mDistanceView.setText(String.format("%.2f", distance / 1000.0f));
|
||||||
|
mDistanceUnitView.setText(R.string.csc_distance_unit_km);
|
||||||
|
}
|
||||||
|
|
||||||
|
mTotalDistanceView.setText(String.format("%.2f", totalDistance / 1000.0f));
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_MPH:
|
||||||
|
speed = speed * 2.2369f;
|
||||||
|
if (distance < 1760) { // 1 mile in yrs
|
||||||
|
mDistanceView.setText(String.format("%.0f", distance));
|
||||||
|
mDistanceUnitView.setText(R.string.csc_distance_unit_yd);
|
||||||
|
} else {
|
||||||
|
mDistanceView.setText(String.format("%.2f", distance / 1760.0f));
|
||||||
|
mDistanceUnitView.setText(R.string.csc_distance_unit_mile);
|
||||||
|
}
|
||||||
|
|
||||||
|
mTotalDistanceView.setText(String.format("%.2f", totalDistance / 1609.31f));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
mTotalDistanceView.setText(String.format("%.2f", totalDistance / 1000.0f));
|
mSpeedView.setText(String.format("%.1f", speed));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onGearRatioUpdate(final float ratio, final int cadence) {
|
private void onGearRatioUpdate(final float ratio, final int cadence) {
|
||||||
@@ -162,7 +222,7 @@ public class CSCActivity extends BleProfileServiceReadyActivity<CSCService.CSCBi
|
|||||||
final String action = intent.getAction();
|
final String action = intent.getAction();
|
||||||
|
|
||||||
if (CSCService.BROADCAST_WHEEL_DATA.equals(action)) {
|
if (CSCService.BROADCAST_WHEEL_DATA.equals(action)) {
|
||||||
final float speed = intent.getFloatExtra(CSCService.EXTRA_SPEED, 0.0f);
|
final float speed = intent.getFloatExtra(CSCService.EXTRA_SPEED, 0.0f); // [m/s]
|
||||||
final float distance = intent.getFloatExtra(CSCService.EXTRA_DISTANCE, CSCManagerCallbacks.NOT_AVAILABLE);
|
final float distance = intent.getFloatExtra(CSCService.EXTRA_DISTANCE, CSCManagerCallbacks.NOT_AVAILABLE);
|
||||||
final float totalDistance = intent.getFloatExtra(CSCService.EXTRA_TOTAL_DISTANCE, CSCManagerCallbacks.NOT_AVAILABLE);
|
final float totalDistance = intent.getFloatExtra(CSCService.EXTRA_TOTAL_DISTANCE, CSCManagerCallbacks.NOT_AVAILABLE);
|
||||||
// Update GUI
|
// Update GUI
|
||||||
|
|||||||
@@ -31,6 +31,12 @@ import android.preference.PreferenceScreen;
|
|||||||
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
public static final String SETTINGS_WHEEL_SIZE = "settings_wheel_size";
|
public static final String SETTINGS_WHEEL_SIZE = "settings_wheel_size";
|
||||||
public static final int SETTINGS_WHEEL_SIZE_DEFAULT = 2340;
|
public static final int SETTINGS_WHEEL_SIZE_DEFAULT = 2340;
|
||||||
|
public static final String SETTINGS_UNIT = "settings_csc_unit";
|
||||||
|
public static final int SETTINGS_UNIT_M_S = 0; // [m/s]
|
||||||
|
public static final int SETTINGS_UNIT_KM_H = 1; // [m/s]
|
||||||
|
public static final int SETTINGS_UNIT_MPH = 2; // [m/s]
|
||||||
|
public static final int SETTINGS_UNIT_DEFAULT = SETTINGS_UNIT_KM_H;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(final Bundle savedInstanceState) {
|
public void onCreate(final Bundle savedInstanceState) {
|
||||||
|
|||||||
@@ -417,7 +417,7 @@ public class DfuActivity extends ActionBarActivity implements LoaderCallbacks<Cu
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(final Menu menu) {
|
public boolean onCreateOptionsMenu(final Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.dfu_menu, menu);
|
getMenuInflater().inflate(R.menu.settings_and_about, menu);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,14 +25,20 @@ import java.text.DecimalFormat;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import no.nordicsemi.android.nrftoolbox.R;
|
import no.nordicsemi.android.nrftoolbox.R;
|
||||||
|
import no.nordicsemi.android.nrftoolbox.hts.settings.SettingsFragment;
|
||||||
import no.nordicsemi.android.nrftoolbox.profile.BleProfileService;
|
import no.nordicsemi.android.nrftoolbox.profile.BleProfileService;
|
||||||
import no.nordicsemi.android.nrftoolbox.profile.BleProfileServiceReadyActivity;
|
import no.nordicsemi.android.nrftoolbox.profile.BleProfileServiceReadyActivity;
|
||||||
|
import no.nordicsemi.android.nrftoolbox.hts.settings.SettingsActivity;
|
||||||
|
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
import android.support.v4.content.LocalBroadcastManager;
|
||||||
|
import android.view.Menu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -43,17 +49,34 @@ public class HTSActivity extends BleProfileServiceReadyActivity<HTSService.RSCBi
|
|||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private final String TAG = "HTSActivity";
|
private final String TAG = "HTSActivity";
|
||||||
|
|
||||||
|
private static final String VALUE = "value";
|
||||||
|
private static final DecimalFormat mFormattedTemp = new DecimalFormat("#0.00");
|
||||||
private TextView mHTSValue;
|
private TextView mHTSValue;
|
||||||
|
private TextView mHTSUnit;
|
||||||
|
private Double mValueC;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreateView(Bundle savedInstanceState) {
|
protected void onCreateView(final Bundle savedInstanceState) {
|
||||||
setContentView(R.layout.activity_feature_hts);
|
setContentView(R.layout.activity_feature_hts);
|
||||||
setGUI();
|
setGUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(final Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
|
||||||
|
if (mValueC != null)
|
||||||
|
outState.putDouble(VALUE, mValueC);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onInitialize(final Bundle savedInstanceState) {
|
protected void onInitialize(final Bundle savedInstanceState) {
|
||||||
LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, makeIntentFilter());
|
LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver, makeIntentFilter());
|
||||||
|
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
if (savedInstanceState.containsKey(VALUE))
|
||||||
|
mValueC = savedInstanceState.getDouble(VALUE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -64,6 +87,43 @@ public class HTSActivity extends BleProfileServiceReadyActivity<HTSService.RSCBi
|
|||||||
|
|
||||||
private void setGUI() {
|
private void setGUI() {
|
||||||
mHTSValue = (TextView) findViewById(R.id.text_hts_value);
|
mHTSValue = (TextView) findViewById(R.id.text_hts_value);
|
||||||
|
mHTSUnit = (TextView) findViewById(R.id.text_hts_unit);
|
||||||
|
|
||||||
|
if (mValueC != null)
|
||||||
|
mHTSValue.setText(String.valueOf(mValueC));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
setUnits();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setDefaultUI() {
|
||||||
|
mValueC = null;
|
||||||
|
mHTSValue.setText(R.string.not_available_value);
|
||||||
|
|
||||||
|
setUnits();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUnits() {
|
||||||
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
final int unit = Integer.parseInt(preferences.getString(SettingsFragment.SETTINGS_UNIT, String.valueOf(SettingsFragment.SETTINGS_UNIT_DEFAULT)));
|
||||||
|
|
||||||
|
switch (unit) {
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_C:
|
||||||
|
mHTSUnit.setText(R.string.hts_unit_celsius);
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_F:
|
||||||
|
mHTSUnit.setText(R.string.hts_unit_fahrenheit);
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_K:
|
||||||
|
mHTSUnit.setText(R.string.hts_unit_kelvin);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (mValueC != null)
|
||||||
|
setHTSValueOnView(mValueC);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -81,6 +141,23 @@ public class HTSActivity extends BleProfileServiceReadyActivity<HTSService.RSCBi
|
|||||||
return R.string.hts_about_text;
|
return R.string.hts_about_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(final Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.settings_and_about, menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean onOptionsItemSelected(final int itemId) {
|
||||||
|
switch (itemId) {
|
||||||
|
case R.id.action_settings:
|
||||||
|
final Intent intent = new Intent(this, SettingsActivity.class);
|
||||||
|
startActivity(intent);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getDefaultDeviceName() {
|
protected int getDefaultDeviceName() {
|
||||||
return R.string.hts_default_name;
|
return R.string.hts_default_name;
|
||||||
@@ -101,14 +178,22 @@ public class HTSActivity extends BleProfileServiceReadyActivity<HTSService.RSCBi
|
|||||||
// this may notify user or show some views
|
// this may notify user or show some views
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setHTSValueOnView(final double value) {
|
private void setHTSValueOnView(double value) {
|
||||||
DecimalFormat formattedTemp = new DecimalFormat("#0.00");
|
mValueC = value;
|
||||||
mHTSValue.setText(formattedTemp.format(value));
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
}
|
final int unit = Integer.parseInt(preferences.getString(SettingsFragment.SETTINGS_UNIT, String.valueOf(SettingsFragment.SETTINGS_UNIT_DEFAULT)));
|
||||||
|
|
||||||
@Override
|
switch (unit) {
|
||||||
protected void setDefaultUI() {
|
case SettingsFragment.SETTINGS_UNIT_F:
|
||||||
mHTSValue.setText(R.string.not_available_value);
|
value = value * 1.8 + 32;
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_K:
|
||||||
|
value += 273.15;
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_C:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mHTSValue.setText(mFormattedTemp.format(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
|
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
|
||||||
|
|||||||
@@ -169,11 +169,7 @@ public class HTSManager implements BleManager<HTSManagerCallbacks> {
|
|||||||
gatt.disconnect();
|
gatt.disconnect();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mBatteryCharacteristic != null) {
|
enableHTIndication();
|
||||||
readBatteryLevel();
|
|
||||||
} else {
|
|
||||||
enableHTIndication();
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
mCallbacks.onError(ERROR_DISCOVERY_SERVICE, status);
|
mCallbacks.onError(ERROR_DISCOVERY_SERVICE, status);
|
||||||
}
|
}
|
||||||
@@ -185,8 +181,6 @@ public class HTSManager implements BleManager<HTSManagerCallbacks> {
|
|||||||
if (characteristic.getUuid().equals(BATTERY_LEVEL_CHARACTERISTIC)) {
|
if (characteristic.getUuid().equals(BATTERY_LEVEL_CHARACTERISTIC)) {
|
||||||
int batteryValue = characteristic.getValue()[0];
|
int batteryValue = characteristic.getValue()[0];
|
||||||
mCallbacks.onBatteryValueReceived(batteryValue);
|
mCallbacks.onBatteryValueReceived(batteryValue);
|
||||||
|
|
||||||
enableHTIndication();
|
|
||||||
}
|
}
|
||||||
} else if (status == BluetoothGatt.GATT_INSUFFICIENT_AUTHENTICATION) {
|
} else if (status == BluetoothGatt.GATT_INSUFFICIENT_AUTHENTICATION) {
|
||||||
if (gatt.getDevice().getBondState() != BluetoothDevice.BOND_NONE) {
|
if (gatt.getDevice().getBondState() != BluetoothDevice.BOND_NONE) {
|
||||||
@@ -213,7 +207,7 @@ public class HTSManager implements BleManager<HTSManagerCallbacks> {
|
|||||||
@Override
|
@Override
|
||||||
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
|
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
|
||||||
if (status == BluetoothGatt.GATT_SUCCESS) {
|
if (status == BluetoothGatt.GATT_SUCCESS) {
|
||||||
// HT indications has been enabled
|
readBatteryLevel();
|
||||||
} else if (status == BluetoothGatt.GATT_INSUFFICIENT_AUTHENTICATION) {
|
} else if (status == BluetoothGatt.GATT_INSUFFICIENT_AUTHENTICATION) {
|
||||||
if (gatt.getDevice().getBondState() == BluetoothDevice.BOND_NONE) {
|
if (gatt.getDevice().getBondState() == BluetoothDevice.BOND_NONE) {
|
||||||
mCallbacks.onBondingRequired();
|
mCallbacks.onBondingRequired();
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public class HTSService extends BleProfileService implements HTSManagerCallbacks
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected BleManager<HTSManagerCallbacks> initializeManager() {
|
protected BleManager<HTSManagerCallbacks> initializeManager() {
|
||||||
return mManager = new HTSManager();
|
return mManager = HTSManager.getHTSManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* 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.hts.settings;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.app.ActionBarActivity;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
|
||||||
|
public class SettingsActivity extends ActionBarActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
|
// Display the fragment as the main content.
|
||||||
|
getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case android.R.id.home:
|
||||||
|
onBackPressed();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* 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.hts.settings;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceFragment;
|
||||||
|
|
||||||
|
import no.nordicsemi.android.nrftoolbox.R;
|
||||||
|
|
||||||
|
public class SettingsFragment extends PreferenceFragment {
|
||||||
|
public static final String SETTINGS_UNIT = "settings_hts_unit";
|
||||||
|
public static final int SETTINGS_UNIT_C = 0; // [C]
|
||||||
|
public static final int SETTINGS_UNIT_F = 1; // [F]
|
||||||
|
public static final int SETTINGS_UNIT_K = 2; // [K]
|
||||||
|
public static final int SETTINGS_UNIT_DEFAULT = SETTINGS_UNIT_C;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(final Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
addPreferencesFromResource(R.xml.settings_hts);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,22 +25,29 @@ package no.nordicsemi.android.nrftoolbox.rsc;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import no.nordicsemi.android.nrftoolbox.R;
|
import no.nordicsemi.android.nrftoolbox.R;
|
||||||
|
import no.nordicsemi.android.nrftoolbox.rsc.settings.SettingsFragment;
|
||||||
|
import no.nordicsemi.android.nrftoolbox.rsc.settings.SettingsActivity;
|
||||||
import no.nordicsemi.android.nrftoolbox.profile.BleProfileService;
|
import no.nordicsemi.android.nrftoolbox.profile.BleProfileService;
|
||||||
import no.nordicsemi.android.nrftoolbox.profile.BleProfileServiceReadyActivity;
|
import no.nordicsemi.android.nrftoolbox.profile.BleProfileServiceReadyActivity;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
import android.support.v4.content.LocalBroadcastManager;
|
||||||
|
import android.view.Menu;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
public class RSCActivity extends BleProfileServiceReadyActivity<RSCService.RSCBinder> {
|
public class RSCActivity extends BleProfileServiceReadyActivity<RSCService.RSCBinder> {
|
||||||
private TextView mSpeedView;
|
private TextView mSpeedView;
|
||||||
|
private TextView mSpeedUnitView;
|
||||||
private TextView mCadenceView;
|
private TextView mCadenceView;
|
||||||
private TextView mDistanceView;
|
private TextView mDistanceView;
|
||||||
private TextView mDistanceUnitView;
|
private TextView mDistanceUnitView;
|
||||||
private TextView mTotalDistanceView;
|
private TextView mTotalDistanceView;
|
||||||
|
private TextView mTotalDistanceUnitView;
|
||||||
private TextView mStridesCountView;
|
private TextView mStridesCountView;
|
||||||
private TextView mActivityView;
|
private TextView mActivityView;
|
||||||
|
|
||||||
@@ -63,23 +70,55 @@ public class RSCActivity extends BleProfileServiceReadyActivity<RSCService.RSCBi
|
|||||||
|
|
||||||
private void setGui() {
|
private void setGui() {
|
||||||
mSpeedView = (TextView) findViewById(R.id.speed);
|
mSpeedView = (TextView) findViewById(R.id.speed);
|
||||||
|
mSpeedUnitView = (TextView) findViewById(R.id.speed_unit);
|
||||||
mCadenceView = (TextView) findViewById(R.id.cadence);
|
mCadenceView = (TextView) findViewById(R.id.cadence);
|
||||||
mDistanceView = (TextView) findViewById(R.id.distance);
|
mDistanceView = (TextView) findViewById(R.id.distance);
|
||||||
mDistanceUnitView = (TextView) findViewById(R.id.distance_unit);
|
mDistanceUnitView = (TextView) findViewById(R.id.distance_unit);
|
||||||
mTotalDistanceView = (TextView) findViewById(R.id.total_distance);
|
mTotalDistanceView = (TextView) findViewById(R.id.total_distance);
|
||||||
|
mTotalDistanceUnitView = (TextView) findViewById(R.id.total_distance_unit);
|
||||||
mStridesCountView = (TextView) findViewById(R.id.strides);
|
mStridesCountView = (TextView) findViewById(R.id.strides);
|
||||||
mActivityView = (TextView) findViewById(R.id.activity);
|
mActivityView = (TextView) findViewById(R.id.activity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
setDefaultUI();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setDefaultUI() {
|
protected void setDefaultUI() {
|
||||||
mSpeedView.setText(R.string.not_available_value);
|
mSpeedView.setText(R.string.not_available_value);
|
||||||
mCadenceView.setText(R.string.not_available_value);
|
mCadenceView.setText(R.string.not_available_value);
|
||||||
mDistanceView.setText(R.string.not_available_value);
|
mDistanceView.setText(R.string.not_available_value);
|
||||||
mDistanceUnitView.setText(R.string.rsc_distance_unit_m);
|
|
||||||
mTotalDistanceView.setText(R.string.not_available_value);
|
mTotalDistanceView.setText(R.string.not_available_value);
|
||||||
mStridesCountView.setText(R.string.not_available_value);
|
mStridesCountView.setText(R.string.not_available_value);
|
||||||
mActivityView.setText(R.string.not_available);
|
mActivityView.setText(R.string.not_available);
|
||||||
|
|
||||||
|
setUnits();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUnits() {
|
||||||
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
final int unit = Integer.parseInt(preferences.getString(SettingsFragment.SETTINGS_UNIT, String.valueOf(SettingsFragment.SETTINGS_UNIT_DEFAULT)));
|
||||||
|
|
||||||
|
switch (unit) {
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_M_S: // [m/s]
|
||||||
|
mSpeedUnitView.setText(R.string.csc_speed_unit_m_s);
|
||||||
|
mDistanceUnitView.setText(R.string.csc_distance_unit_m);
|
||||||
|
mTotalDistanceUnitView.setText(R.string.csc_total_distance_unit_km);
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_KM_H: // [km/h]
|
||||||
|
mSpeedUnitView.setText(R.string.csc_speed_unit_km_h);
|
||||||
|
mDistanceUnitView.setText(R.string.csc_distance_unit_m);
|
||||||
|
mTotalDistanceUnitView.setText(R.string.csc_total_distance_unit_km);
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_MPH: // [mph]
|
||||||
|
mSpeedUnitView.setText(R.string.csc_speed_unit_mph);
|
||||||
|
mDistanceUnitView.setText(R.string.csc_distance_unit_yd);
|
||||||
|
mTotalDistanceUnitView.setText(R.string.csc_total_distance_unit_mile);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -97,6 +136,23 @@ public class RSCActivity extends BleProfileServiceReadyActivity<RSCService.RSCBi
|
|||||||
return R.string.rsc_about_text;
|
return R.string.rsc_about_text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(final Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.settings_and_about, menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean onOptionsItemSelected(final int itemId) {
|
||||||
|
switch (itemId) {
|
||||||
|
case R.id.action_settings:
|
||||||
|
final Intent intent = new Intent(this, SettingsActivity.class);
|
||||||
|
startActivity(intent);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Class<? extends BleProfileService> getServiceClass() {
|
protected Class<? extends BleProfileService> getServiceClass() {
|
||||||
return RSCService.class;
|
return RSCService.class;
|
||||||
@@ -122,28 +178,69 @@ public class RSCActivity extends BleProfileServiceReadyActivity<RSCService.RSCBi
|
|||||||
// not used
|
// not used
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onMeasurementReceived(final float speed, final int cadence, final float totalDistance, final int activity) {
|
private void onMeasurementReceived(float speed, int cadence, float totalDistance, final int activity) {
|
||||||
mSpeedView.setText(String.format("%.1f", speed));
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
mCadenceView.setText(String.format("%d", cadence));
|
final int unit = Integer.parseInt(preferences.getString(SettingsFragment.SETTINGS_UNIT, String.valueOf(SettingsFragment.SETTINGS_UNIT_DEFAULT)));
|
||||||
if (totalDistance == RSCManagerCallbacks.NOT_AVAILABLE) {
|
|
||||||
mTotalDistanceView.setText(R.string.not_available);
|
switch (unit) {
|
||||||
} else {
|
case SettingsFragment.SETTINGS_UNIT_KM_H:
|
||||||
mTotalDistanceView.setText(String.format("%.2f", totalDistance / 10000.0f)); // 1km in dm
|
speed = speed * 3.6f;
|
||||||
|
// pass through intended
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_M_S:
|
||||||
|
if (totalDistance == RSCManagerCallbacks.NOT_AVAILABLE) {
|
||||||
|
mTotalDistanceView.setText(R.string.not_available);
|
||||||
|
mTotalDistanceUnitView.setText(null);
|
||||||
|
} else {
|
||||||
|
mTotalDistanceView.setText(String.format("%.2f", totalDistance / 1000.0f)); // 1 km in m
|
||||||
|
mTotalDistanceUnitView.setText(R.string.rsc_total_distance_unit_km);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_MPH:
|
||||||
|
speed = speed * 2.2369f;
|
||||||
|
if (totalDistance == RSCManagerCallbacks.NOT_AVAILABLE) {
|
||||||
|
mTotalDistanceView.setText(R.string.not_available);
|
||||||
|
mTotalDistanceUnitView.setText(null);
|
||||||
|
} else {
|
||||||
|
mTotalDistanceView.setText(String.format("%.2f", totalDistance / 1609.31f)); // 1 mile in m
|
||||||
|
mTotalDistanceUnitView.setText(R.string.rsc_total_distance_unit_mile);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mSpeedView.setText(String.format("%.1f", speed));
|
||||||
|
mCadenceView.setText(String.format("%d", cadence));
|
||||||
mActivityView.setText(activity == RSCManagerCallbacks.ACTIVITY_RUNNING ? R.string.rsc_running : R.string.rsc_walking);
|
mActivityView.setText(activity == RSCManagerCallbacks.ACTIVITY_RUNNING ? R.string.rsc_running : R.string.rsc_walking);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onStripsesUpdate(final float distance, final int strides) {
|
private void onStripesUpdate(final float distance, final int strides) {
|
||||||
if (distance == RSCManagerCallbacks.NOT_AVAILABLE) {
|
if (distance == RSCManagerCallbacks.NOT_AVAILABLE) {
|
||||||
mDistanceView.setText(R.string.not_available);
|
mDistanceView.setText(R.string.not_available);
|
||||||
mDistanceUnitView.setText(R.string.rsc_distance_unit_m);
|
mDistanceUnitView.setText(R.string.rsc_distance_unit_m);
|
||||||
} else if (distance < 100000) { // 1 km in cm
|
|
||||||
mDistanceView.setText(String.format("%.0f", distance / 100.0f));
|
|
||||||
mDistanceUnitView.setText(R.string.rsc_distance_unit_m);
|
|
||||||
} else {
|
} else {
|
||||||
mDistanceView.setText(String.format("%.2f", distance / 100000.0f));
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
mDistanceUnitView.setText(R.string.rsc_distance_unit_km);
|
final int unit = Integer.parseInt(preferences.getString(SettingsFragment.SETTINGS_UNIT, String.valueOf(SettingsFragment.SETTINGS_UNIT_DEFAULT)));
|
||||||
|
|
||||||
|
switch (unit) {
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_KM_H:
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_M_S:
|
||||||
|
if (distance < 100000) { // 1 km in cm
|
||||||
|
mDistanceView.setText(String.format("%.0f", distance / 100.0f));
|
||||||
|
mDistanceUnitView.setText(R.string.rsc_distance_unit_m);
|
||||||
|
} else {
|
||||||
|
mDistanceView.setText(String.format("%.2f", distance / 100000.0f));
|
||||||
|
mDistanceUnitView.setText(R.string.rsc_distance_unit_km);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SettingsFragment.SETTINGS_UNIT_MPH:
|
||||||
|
if (distance < 160931) { // 1 mile in cm
|
||||||
|
mDistanceView.setText(String.format("%.0f", distance / 91.4392f));
|
||||||
|
mDistanceUnitView.setText(R.string.rsc_distance_unit_yd);
|
||||||
|
} else {
|
||||||
|
mDistanceView.setText(String.format("%.2f", distance / 160931.23f));
|
||||||
|
mDistanceUnitView.setText(R.string.rsc_distance_unit_mile);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mStridesCountView.setText(String.valueOf(strides));
|
mStridesCountView.setText(String.valueOf(strides));
|
||||||
@@ -165,7 +262,7 @@ public class RSCActivity extends BleProfileServiceReadyActivity<RSCService.RSCBi
|
|||||||
final int strides = intent.getIntExtra(RSCService.EXTRA_STRIDES, 0);
|
final int strides = intent.getIntExtra(RSCService.EXTRA_STRIDES, 0);
|
||||||
final float distance = intent.getFloatExtra(RSCService.EXTRA_DISTANCE, 0);
|
final float distance = intent.getFloatExtra(RSCService.EXTRA_DISTANCE, 0);
|
||||||
// Update GUI
|
// Update GUI
|
||||||
onStripsesUpdate(distance, strides);
|
onStripesUpdate(distance, strides);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -190,22 +190,22 @@ public class RSCManager implements BleManager<RSCManagerCallbacks> {
|
|||||||
final boolean tdPreset = (flags & TOTAL_DISTANCE_PRESENT) > 0;
|
final boolean tdPreset = (flags & TOTAL_DISTANCE_PRESENT) > 0;
|
||||||
final boolean running = (flags & WALKING_OR_RUNNING_STATUS_BITS) > 0;
|
final boolean running = (flags & WALKING_OR_RUNNING_STATUS_BITS) > 0;
|
||||||
|
|
||||||
final float instantaneousSpeed = (float) characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT16, offset) / 256.0f * 3.6f; // 1/256 m/s in km/h
|
final float instantaneousSpeed = (float) characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT16, offset) / 256.0f; // 1/256 m/s in [m/s]
|
||||||
offset += 2;
|
offset += 2;
|
||||||
|
|
||||||
final int instantaneousCadence = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, offset);
|
final int instantaneousCadence = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT8, offset); // [SPM]
|
||||||
offset += 1;
|
offset += 1;
|
||||||
|
|
||||||
float instantaneousStrideLength = RSCManagerCallbacks.NOT_AVAILABLE;
|
float instantaneousStrideLength = RSCManagerCallbacks.NOT_AVAILABLE;
|
||||||
if (islmPresent) {
|
if (islmPresent) {
|
||||||
instantaneousStrideLength = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT16, offset);
|
instantaneousStrideLength = characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT16, offset); // [cm]
|
||||||
offset += 2;
|
offset += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
float totalDistance = RSCManagerCallbacks.NOT_AVAILABLE;
|
float totalDistance = RSCManagerCallbacks.NOT_AVAILABLE;
|
||||||
if (tdPreset) {
|
if (tdPreset) {
|
||||||
totalDistance = (float) characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT32, offset) / 10.0f;
|
totalDistance = (float) characteristic.getIntValue(BluetoothGattCharacteristic.FORMAT_UINT32, offset) / 10.0f; // 1/10 m in [m]
|
||||||
offset += 4;
|
//offset += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify listener about the new measurement
|
// Notify listener about the new measurement
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* 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.rsc.settings;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.app.ActionBarActivity;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
|
||||||
|
public class SettingsActivity extends ActionBarActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(final Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
|
// Display the fragment as the main content.
|
||||||
|
getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(final MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case android.R.id.home:
|
||||||
|
onBackPressed();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* 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.rsc.settings;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceFragment;
|
||||||
|
import android.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
import no.nordicsemi.android.nrftoolbox.R;
|
||||||
|
|
||||||
|
public class SettingsFragment extends PreferenceFragment {
|
||||||
|
public static final String SETTINGS_UNIT = "settings_rsc_unit";
|
||||||
|
public static final int SETTINGS_UNIT_M_S = 0; // [m/s]
|
||||||
|
public static final int SETTINGS_UNIT_KM_H = 1; // [m/s]
|
||||||
|
public static final int SETTINGS_UNIT_MPH = 2; // [m/s]
|
||||||
|
public static final int SETTINGS_UNIT_DEFAULT = SETTINGS_UNIT_KM_H;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(final Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
addPreferencesFromResource(R.xml.settings_rsc);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -119,11 +119,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/speed_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/csc_speed_unit" />
|
android:text="@string/csc_speed_unit_km_h" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
@@ -234,11 +235,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/distance_total_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/csc_total_distance_unit" />
|
android:text="@string/csc_total_distance_unit_km" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
|
|||||||
@@ -79,6 +79,7 @@
|
|||||||
android:textSize="80sp" />
|
android:textSize="80sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/text_hts_unit"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
|
|||||||
@@ -119,11 +119,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/speed_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/rsc_speed_unit" />
|
android:text="@string/rsc_speed_unit_km_h" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
@@ -234,11 +235,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/total_distance_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/rsc_total_distance_unit" />
|
android:text="@string/rsc_total_distance_unit_km" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
|
|||||||
@@ -110,11 +110,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/speed_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/csc_speed_unit" />
|
android:text="@string/csc_speed_unit_km_h" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
@@ -198,11 +199,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/distance_total_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/csc_total_distance_unit" />
|
android:text="@string/csc_total_distance_unit_km" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
|
|||||||
@@ -115,11 +115,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/speed_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/rsc_speed_unit" />
|
android:text="@string/rsc_speed_unit_km_h" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
@@ -203,11 +204,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/total_distance_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/rsc_total_distance_unit" />
|
android:text="@string/rsc_total_distance_unit_km" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
|
|||||||
@@ -110,11 +110,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/speed_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/csc_speed_unit" />
|
android:text="@string/csc_speed_unit_km_h" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
@@ -198,11 +199,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/distance_total_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/csc_total_distance_unit" />
|
android:text="@string/csc_total_distance_unit_km" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
|
|||||||
@@ -79,6 +79,7 @@
|
|||||||
android:textSize="80sp" />
|
android:textSize="80sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/text_hts_unit"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
|
|||||||
@@ -115,11 +115,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/speed_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/rsc_speed_unit" />
|
android:text="@string/rsc_speed_unit_km_h" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
@@ -203,11 +204,12 @@
|
|||||||
android:textSize="36sp" />
|
android:textSize="36sp" />
|
||||||
|
|
||||||
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
<no.nordicsemi.android.nrftoolbox.widget.TrebuchetTextView
|
||||||
|
android:id="@+id/total_distance_unit"
|
||||||
android:layout_width="45dp"
|
android:layout_width="45dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:freezesText="true"
|
android:freezesText="true"
|
||||||
android:gravity="bottom"
|
android:gravity="bottom"
|
||||||
android:text="@string/rsc_total_distance_unit" />
|
android:text="@string/rsc_total_distance_unit_km" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|
||||||
<TableRow
|
<TableRow
|
||||||
|
|||||||
37
app/src/main/res/menu/settings_and_about.xml
Normal file
37
app/src/main/res/menu/settings_and_about.xml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto" >
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_settings"
|
||||||
|
android:icon="@drawable/ic_menu_settings"
|
||||||
|
app:showAsAction="always"
|
||||||
|
android:title="@string/action_settings"/>
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_about"
|
||||||
|
android:icon="@drawable/ic_menu_about"
|
||||||
|
app:showAsAction="always"
|
||||||
|
android:title="@string/action_about"/>
|
||||||
|
|
||||||
|
</menu>
|
||||||
@@ -29,21 +29,25 @@
|
|||||||
|
|
||||||
<string name="csc_section_csc_header">SPEED AND CADENCE</string>
|
<string name="csc_section_csc_header">SPEED AND CADENCE</string>
|
||||||
<string name="csc_speed">SPEED</string>
|
<string name="csc_speed">SPEED</string>
|
||||||
<string name="csc_speed_unit">km/h</string>
|
<string name="csc_speed_unit_m_s">m/s</string>
|
||||||
|
<string name="csc_speed_unit_km_h">km/h</string>
|
||||||
|
<string name="csc_speed_unit_mph">mph</string>
|
||||||
<string name="csc_cadence">CADENCE</string>
|
<string name="csc_cadence">CADENCE</string>
|
||||||
<string name="csc_cadence_unit">RPM</string>
|
<string name="csc_cadence_unit">RPM</string>
|
||||||
<string name="csc_distance">DISTANCE</string>
|
<string name="csc_distance">DISTANCE</string>
|
||||||
<string name="csc_distance_unit_m">m</string>
|
<string name="csc_distance_unit_m">m</string>
|
||||||
<string name="csc_distance_unit_km">km</string>
|
<string name="csc_distance_unit_km">km</string>
|
||||||
|
<string name="csc_distance_unit_yd">yd</string>
|
||||||
|
<string name="csc_distance_unit_mile">mile</string>
|
||||||
<string name="csc_total_distance">TOTAL DISTANCE</string>
|
<string name="csc_total_distance">TOTAL DISTANCE</string>
|
||||||
<string name="csc_total_distance_unit">km</string>
|
<string name="csc_total_distance_unit_km">km</string>
|
||||||
|
<string name="csc_total_distance_unit_mile">mile</string>
|
||||||
<string name="csc_gear_ratio">GEAR RATIO</string>
|
<string name="csc_gear_ratio">GEAR RATIO</string>
|
||||||
|
|
||||||
<string name="csc_default_name">DEFAULT CSC</string>
|
<string name="csc_default_name">DEFAULT CSC</string>
|
||||||
<string name="csc_notification_action_disconnect">Disconnect</string>
|
<string name="csc_notification_action_disconnect">Disconnect</string>
|
||||||
<string name="csc_notification_connected_message">%s is connected.</string>
|
<string name="csc_notification_connected_message">%s is connected.</string>
|
||||||
|
|
||||||
<string name="csc_settings_wheel_diameter">Wheel size</string>
|
|
||||||
<string name="csc_settings_wheel_diameter_title">Wheel size</string>
|
<string name="csc_settings_wheel_diameter_title">Wheel size</string>
|
||||||
<string name="csc_settings_wheel_diameter_summary">Wheel circumference: %s mm</string>
|
<string name="csc_settings_wheel_diameter_summary">Wheel circumference: %s mm</string>
|
||||||
<string-array name="csc_settings_wheel_diameters">
|
<string-array name="csc_settings_wheel_diameters">
|
||||||
@@ -151,6 +155,19 @@
|
|||||||
<item>1282</item>
|
<item>1282</item>
|
||||||
<item>1272</item>
|
<item>1272</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
<string name="csc_settings_units_title">Units</string>
|
||||||
|
<string name="csc_settings_units_summary">%s</string>
|
||||||
|
<string-array name="csc_settings_units">
|
||||||
|
<item>m/s</item>
|
||||||
|
<item>km/h</item>
|
||||||
|
<item>mph</item>
|
||||||
|
</string-array>
|
||||||
|
<string-array name="csc_settings_units_values">
|
||||||
|
<item>0</item>
|
||||||
|
<item>1</item>
|
||||||
|
<item>2</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<string name="csc_about_text">CSC (Cycling Speed and Cadence) profile allows you to connect to your bike activity sensor.
|
<string name="csc_about_text">CSC (Cycling Speed and Cadence) profile allows you to connect to your bike activity sensor.
|
||||||
\nIt reads wheel and crank data if they are supported by the sensor and calculates speed, cadence, total and trip distance and gear ratio. Set up your wheel size in the settings to get correct readings.
|
\nIt reads wheel and crank data if they are supported by the sensor and calculates speed, cadence, total and trip distance and gear ratio. Set up your wheel size in the settings to get correct readings.
|
||||||
|
|||||||
@@ -22,15 +22,31 @@
|
|||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<string name="hts_feature_title">HTM</string>
|
<string name="hts_feature_title">HTM</string>
|
||||||
|
<string name="hts_settings_title">HTM Settings</string>
|
||||||
|
|
||||||
<string name="hts_feature_title_long">HEALTH THERMOMETER MONITOR</string>
|
<string name="hts_feature_title_long">HEALTH THERMOMETER MONITOR</string>
|
||||||
<dimen name="hts_feature_title_long_margin">-236dp</dimen>
|
<dimen name="hts_feature_title_long_margin">-236dp</dimen>
|
||||||
|
|
||||||
<string name="hts_default_name">DEFAULT HTM</string>
|
<string name="hts_default_name">DEFAULT HTM</string>
|
||||||
<string name="hts_unit_celsius">°C</string>
|
<string name="hts_unit_celsius">°C</string>
|
||||||
|
<string name="hts_unit_fahrenheit">°F</string>
|
||||||
<string name="hts_notification_action_disconnect">Disconnect</string>
|
<string name="hts_unit_kelvin">°K</string>
|
||||||
|
|
||||||
|
<string name="hts_notification_action_disconnect">Disconnect</string>
|
||||||
<string name="hts_notification_connected_message">%s is connected.</string>
|
<string name="hts_notification_connected_message">%s is connected.</string>
|
||||||
|
|
||||||
|
<string name="hts_settings_units_title">Units</string>
|
||||||
|
<string name="hts_settings_units_summary">%s</string>
|
||||||
|
<string-array name="hts_settings_units">
|
||||||
|
<item>Celsius</item>
|
||||||
|
<item>Fahrenheit</item>
|
||||||
|
<item>Kelvin</item>
|
||||||
|
</string-array>
|
||||||
|
<string-array name="hts_settings_units_values">
|
||||||
|
<item>0</item>
|
||||||
|
<item>1</item>
|
||||||
|
<item>2</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<string name="hts_about_text">HTM (Health Thermometer Monitor) profile allows you to connect to your Health Thermometer sensor.
|
<string name="hts_about_text">HTM (Health Thermometer Monitor) profile allows you to connect to your Health Thermometer sensor.
|
||||||
It shows you the temperature value in Celsius.</string>
|
It shows you the temperature value in Celsius.</string>
|
||||||
|
|||||||
@@ -22,21 +22,27 @@
|
|||||||
-->
|
-->
|
||||||
<resources>
|
<resources>
|
||||||
<string name="rsc_feature_title">RSC</string>
|
<string name="rsc_feature_title">RSC</string>
|
||||||
|
<string name="rsc_settings_title">RSC Settings</string>
|
||||||
|
|
||||||
<string name="rsc_feature_title_long">RUNNING SPEED & CADENCE</string>
|
<string name="rsc_feature_title_long">RUNNING SPEED & CADENCE</string>
|
||||||
<dimen name="rsc_feature_title_long_margin">-192dp</dimen>
|
<dimen name="rsc_feature_title_long_margin">-192dp</dimen>
|
||||||
|
|
||||||
<string name="rsc_section_rsc_header">SPEED AND CADENCE</string>
|
<string name="rsc_section_rsc_header">SPEED AND CADENCE</string>
|
||||||
<string name="rsc_speed">SPEED</string>
|
<string name="rsc_speed">SPEED</string>
|
||||||
<string name="rsc_speed_unit">km/h</string>
|
<string name="rsc_speed_unit_m_s">km/h</string>
|
||||||
|
<string name="rsc_speed_unit_km_h">km/h</string>
|
||||||
|
<string name="rsc_speed_unit_mph">mph</string>
|
||||||
<string name="rsc_cadence">CADENCE</string>
|
<string name="rsc_cadence">CADENCE</string>
|
||||||
<string name="rsc_cadence_unit">SPM</string>
|
<string name="rsc_cadence_unit">SPM</string>
|
||||||
<string name="rsc_distance">DISTANCE</string>
|
<string name="rsc_distance">DISTANCE</string>
|
||||||
<string name="rsc_distance_unit_m">m</string>
|
<string name="rsc_distance_unit_m">m</string>
|
||||||
<string name="rsc_distance_unit_km">km</string>
|
<string name="rsc_distance_unit_km">km</string>
|
||||||
|
<string name="rsc_distance_unit_yd">yd</string>
|
||||||
|
<string name="rsc_distance_unit_mile">mile</string>
|
||||||
<string name="rsc_section_strides_header"></string>
|
<string name="rsc_section_strides_header"></string>
|
||||||
<string name="rsc_total_distance">TOTAL DISTANCE</string>
|
<string name="rsc_total_distance">TOTAL DISTANCE</string>
|
||||||
<string name="rsc_total_distance_unit">km</string>
|
<string name="rsc_total_distance_unit_km">km</string>
|
||||||
|
<string name="rsc_total_distance_unit_mile">mile</string>
|
||||||
<string name="rsc_strides">STEPS</string>
|
<string name="rsc_strides">STEPS</string>
|
||||||
|
|
||||||
<string name="rsc_section_activity_header">ACTIVITY</string>
|
<string name="rsc_section_activity_header">ACTIVITY</string>
|
||||||
@@ -46,6 +52,19 @@
|
|||||||
<string name="rsc_default_name">DEFAULT RSC</string>
|
<string name="rsc_default_name">DEFAULT RSC</string>
|
||||||
<string name="rsc_notification_action_disconnect">Disconnect</string>
|
<string name="rsc_notification_action_disconnect">Disconnect</string>
|
||||||
<string name="rsc_notification_connected_message">%s is connected.</string>
|
<string name="rsc_notification_connected_message">%s is connected.</string>
|
||||||
|
|
||||||
|
<string name="rsc_settings_units_title">Units</string>
|
||||||
|
<string name="rsc_settings_units_summary">%s</string>
|
||||||
|
<string-array name="rsc_settings_units">
|
||||||
|
<item>m/s</item>
|
||||||
|
<item>km/h</item>
|
||||||
|
<item>mph</item>
|
||||||
|
</string-array>
|
||||||
|
<string-array name="rsc_settings_units_values">
|
||||||
|
<item>0</item>
|
||||||
|
<item>1</item>
|
||||||
|
<item>2</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<string name="rsc_about_text">RSC (Running Speed and Cadence) profile allows you to connect to your activity sensor.
|
<string name="rsc_about_text">RSC (Running Speed and Cadence) profile allows you to connect to your activity sensor.
|
||||||
\nIt reads speed and cadence values from the sensor and calculates trip distance if stride length is supported. Strides count is calculated basing on the cadence and the time.
|
\nIt reads speed and cadence values from the sensor and calculates trip distance if stride length is supported. Strides count is calculated basing on the cadence and the time.
|
||||||
|
|||||||
@@ -23,13 +23,19 @@
|
|||||||
|
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/csc_settings_wheel_diameter" >
|
<ListPreference
|
||||||
<ListPreference
|
android:title="@string/csc_settings_units_title"
|
||||||
android:title="@string/csc_settings_wheel_diameter_title"
|
android:summary="@string/csc_settings_units_summary"
|
||||||
android:defaultValue="2340"
|
android:defaultValue="1"
|
||||||
android:entries="@array/csc_settings_wheel_diameters"
|
android:entries="@array/csc_settings_units"
|
||||||
android:entryValues="@array/csc_settings_wheel_diameter_values"
|
android:entryValues="@array/csc_settings_units_values"
|
||||||
android:key="settings_wheel_size" />
|
android:key="settings_csc_unit" />
|
||||||
</PreferenceCategory>
|
|
||||||
|
<ListPreference
|
||||||
|
android:title="@string/csc_settings_wheel_diameter_title"
|
||||||
|
android:defaultValue="2340"
|
||||||
|
android:entries="@array/csc_settings_wheel_diameters"
|
||||||
|
android:entryValues="@array/csc_settings_wheel_diameter_values"
|
||||||
|
android:key="settings_wheel_size" />
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
34
app/src/main/res/xml/settings_hts.xml
Normal file
34
app/src/main/res/xml/settings_hts.xml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
android:title="@string/csc_settings_units_title"
|
||||||
|
android:summary="@string/csc_settings_units_summary"
|
||||||
|
android:defaultValue="0"
|
||||||
|
android:entries="@array/hts_settings_units"
|
||||||
|
android:entryValues="@array/hts_settings_units_values"
|
||||||
|
android:key="settings_hts_unit" />
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
||||||
34
app/src/main/res/xml/settings_rsc.xml
Normal file
34
app/src/main/res/xml/settings_rsc.xml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
android:title="@string/csc_settings_units_title"
|
||||||
|
android:summary="@string/csc_settings_units_summary"
|
||||||
|
android:defaultValue="1"
|
||||||
|
android:entries="@array/rsc_settings_units"
|
||||||
|
android:entryValues="@array/rsc_settings_units_values"
|
||||||
|
android:key="settings_rsc_unit" />
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
||||||
Reference in New Issue
Block a user