diff --git a/app/app.iml b/app/app.iml index a5482ec17..a4d4a813e 100644 --- a/app/app.iml +++ b/app/app.iml @@ -1,5 +1,5 @@ - + @@ -12,8 +12,9 @@ - - + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index cc59358c3..19fce4e29 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 2547c9ff1..e2de82acc 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 174eed8a7..ea5e299c3 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 static AppHelpFragment getInstance(final int aboutResId) { } @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 05cea846c..af608004e 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.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 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 @@ protected void onCreate(final Bundle savedInstanceState) { 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 @@ protected void onCreate(final Bundle savedInstanceState) { 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 boolean onOptionsItemSelected(final MenuItem item) { 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 aabd9fad7..1e80c4ed0 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 @@ 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 @@ * @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 void onGroupExpand(int groupPosition) { * @see Activity#onRestoreInstanceState(Bundle) */ @Override - protected void onRestoreInstanceState(Bundle state) { + protected void onRestoreInstanceState(@NonNull Bundle state) { ensureList(); super.onRestoreInstanceState(state); } @@ -190,10 +191,10 @@ protected void onRestoreInstanceState(Bundle state) { /** * 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 7070575b0..253d96f54 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 a88e50a01..b4e60d1d1 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 bb01dc25f..a60d85bd5 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 @@ 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.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 @@ * 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 @@ protected void onSaveInstanceState(final Bundle outState) { } private void setGUI() { - final ActionBar actionBar = getSupportActionBar(); - actionBar.setDisplayHomeAsUpEnabled(true); + final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); mDeviceNameView = (TextView) findViewById(R.id.device_name); mFileNameView = (TextView) findViewById(R.id.file_name); @@ -270,9 +270,8 @@ private void showBLEDialog() { } private void showDeviceScanningDialog() { - final FragmentManager fm = getFragmentManager(); final ScannerFragment dialog = ScannerFragment.getInstance(DfuActivity.this, null, false); // Device that is advertising directly does not have the GENERAL_DISCOVERABLE nor LIMITED_DISCOVERABLE flag set. - dialog.show(fm, "scan_fragment"); + dialog.show(getSupportFragmentManager(), "scan_fragment"); } private void ensureSamplesExist() { @@ -436,7 +435,7 @@ public boolean onOptionsItemSelected(final MenuItem item) { break; case R.id.action_about: final AppHelpFragment fragment = AppHelpFragment.getInstance(R.string.dfu_about_text); - fragment.show(getFragmentManager(), "help_fragment"); + fragment.show(getSupportFragmentManager(), "help_fragment"); break; case R.id.action_settings: final Intent intent = new Intent(this, SettingsActivity.class); @@ -676,7 +675,7 @@ public void onClick(final DialogInterface dialog, final int which) { @Override public void onClick(final DialogInterface dialog, final int which) { final ZipInfoFragment fragment = new ZipInfoFragment(); - fragment.show(getFragmentManager(), "help_fragment"); + fragment.show(getSupportFragmentManager(), "help_fragment"); } }).setNegativeButton(R.string.cancel, null).show(); } @@ -763,7 +762,7 @@ private void showUploadCancelDialog() { manager.sendBroadcast(pauseAction); final UploadCancelFragment fragment = UploadCancelFragment.getInstance(); - fragment.show(getFragmentManager(), TAG); + fragment.show(getSupportFragmentManager(), TAG); } /** diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/DfuInitiatorActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/DfuInitiatorActivity.java index 9d2798f1b..77c0fffef 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/DfuInitiatorActivity.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/DfuInitiatorActivity.java @@ -22,10 +22,10 @@ package no.nordicsemi.android.nrftoolbox.dfu; -import android.app.Activity; import android.bluetooth.BluetoothDevice; import android.content.Intent; import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; import no.nordicsemi.android.nrftoolbox.scanner.ScannerFragment; @@ -33,7 +33,7 @@ * The activity is started only by a remote connected computer using ADB. It shows a list of DFU-supported devices in range and allows user to select target device. The HEX file will be uploaded to * selected device using {@link DfuService}. */ -public class DfuInitiatorActivity extends Activity implements ScannerFragment.OnDeviceSelectedListener { +public class DfuInitiatorActivity extends AppCompatActivity implements ScannerFragment.OnDeviceSelectedListener { @Override protected void onCreate(final Bundle savedInstanceState) { @@ -46,7 +46,7 @@ protected void onCreate(final Bundle savedInstanceState) { if (savedInstanceState == null) { final ScannerFragment fragment = ScannerFragment.getInstance(this, null, false); // Device that is advertising directly does not have the GENERAL_DISCOVERABLE nor LIMITED_DISCOVERABLE flag set. - fragment.show(getFragmentManager(), null); + fragment.show(getSupportFragmentManager(), null); } } diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/fragment/UploadCancelFragment.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/fragment/UploadCancelFragment.java index a9df2d39f..098030ea6 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/fragment/UploadCancelFragment.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/fragment/UploadCancelFragment.java @@ -22,13 +22,14 @@ package no.nordicsemi.android.nrftoolbox.dfu.fragment; import android.app.Activity; -import android.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.DialogFragment; import android.support.v4.content.LocalBroadcastManager; +import android.support.v7.app.AlertDialog; import android.util.Log; import no.nordicsemi.android.nrftoolbox.R; @@ -61,7 +62,8 @@ public void onAttach(final Activity activity) { } } - @Override + @NonNull + @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { return new AlertDialog.Builder(getActivity()).setTitle(R.string.dfu_confirmation_dialog_title).setMessage(R.string.dfu_upload_dialog_cancel_message).setCancelable(false) .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/fragment/ZipInfoFragment.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/fragment/ZipInfoFragment.java index f3ccd93d8..c9979a3fa 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/fragment/ZipInfoFragment.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/fragment/ZipInfoFragment.java @@ -21,10 +21,11 @@ */ package no.nordicsemi.android.nrftoolbox.dfu.fragment; -import android.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.DialogFragment; +import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; @@ -33,6 +34,7 @@ public class ZipInfoFragment extends DialogFragment { @Override + @NonNull public Dialog onCreateDialog(final Bundle savedInstanceState) { final View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_zip_info, null); return new AlertDialog.Builder(getActivity()).setView(view).setTitle(R.string.dfu_file_info).setPositiveButton(R.string.ok, null).create(); diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/settings/SettingsActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/settings/SettingsActivity.java index e9614fc74..c9d9fc80b 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/settings/SettingsActivity.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/settings/SettingsActivity.java @@ -23,19 +23,25 @@ package no.nordicsemi.android.nrftoolbox.dfu.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/dfu/settings/SettingsFragment.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/settings/SettingsFragment.java index b939ce91c..c9aec8446 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/settings/SettingsFragment.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/dfu/settings/SettingsFragment.java @@ -21,11 +21,12 @@ */ package no.nordicsemi.android.nrftoolbox.dfu.settings; -import android.app.AlertDialog; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; +import android.support.v7.app.AlertDialog; +import android.text.TextUtils; import no.nordicsemi.android.dfu.DfuSettingsConstants; import no.nordicsemi.android.nrftoolbox.R; @@ -81,8 +82,13 @@ private void updateNumberOfPacketsSummary() { final PreferenceScreen screen = getPreferenceScreen(); final SharedPreferences preferences = getPreferenceManager().getSharedPreferences(); - final String value = preferences.getString(SETTINGS_NUMBER_OF_PACKETS, String.valueOf(SETTINGS_NUMBER_OF_PACKETS_DEFAULT)); - screen.findPreference(SETTINGS_NUMBER_OF_PACKETS).setSummary(value); + String value = preferences.getString(SETTINGS_NUMBER_OF_PACKETS, String.valueOf(SETTINGS_NUMBER_OF_PACKETS_DEFAULT)); + // Security check + if (TextUtils.isEmpty(value)) { + value = String.valueOf(SETTINGS_NUMBER_OF_PACKETS_DEFAULT); + preferences.edit().putString(SETTINGS_NUMBER_OF_PACKETS, value).apply(); + } + screen.findPreference(SETTINGS_NUMBER_OF_PACKETS).setSummary(value); final int valueInt = Integer.parseInt(value); if (valueInt > 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 d940b4c04..9f3e69254 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 void abort() { /** * 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 7817a32ae..9c229e287 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 @@ 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 @@ private void showGraph() { } @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 3c548fcec..77d0a20b8 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 df1361728..6d244353d 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 @@ 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 0f8de7361..c7b04289e 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.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.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 @@ protected final void onCreate(final Bundle savedInstanceState) { mBleManager = initializeManager(); onInitialize(savedInstanceState); onCreateView(savedInstanceState); + + final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); + setSupportActionBar(toolbar); + onViewCreated(savedInstanceState); } @@ -128,7 +134,7 @@ protected void onSaveInstanceState(final Bundle outState) { } @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 boolean onOptionsItemSelected(final MenuItem item) { 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 @@ private void showDeviceScanningDialog(final UUID filter, final boolean discovera @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 c9433866a..edddbeb2c 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.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 @@ protected final void onCreate(final Bundle savedInstanceState) { mBleManager = initializeManager(); onInitialize(savedInstanceState); onCreateView(savedInstanceState); + + final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); + setSupportActionBar(toolbar); + onViewCreated(savedInstanceState); } @@ -165,7 +170,7 @@ public boolean onOptionsItemSelected(final MenuItem item) { 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 @@ private void showDeviceScanningDialog(final UUID filter, final boolean discovera @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 7858eab05..d7121aa3c 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.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 @@ * 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 @@ protected final void onCreate(final Bundle savedInstanceState) { */ onInitialize(savedInstanceState); onCreateView(savedInstanceState); + + final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); + setSupportActionBar(toolbar); + onViewCreated(savedInstanceState); LocalBroadcastManager.getInstance(this).registerReceiver(mCommonBroadcastReceiver, makeIntentFilter()); @@ -343,7 +349,7 @@ protected void onSaveInstanceState(final Bundle outState) { } @Override - protected void onRestoreInstanceState(final Bundle savedInstanceState) { + protected void onRestoreInstanceState(@NonNull final Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mDeviceName = savedInstanceState.getString(DEVICE_NAME); } @@ -374,7 +380,7 @@ public boolean onOptionsItemSelected(final MenuItem item) { 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); @@ -643,7 +649,7 @@ protected boolean isDiscoverableRequired() { */ private void showDeviceScanningDialog(final UUID filter, final boolean discoverableRequired) { final ScannerFragment dialog = ScannerFragment.getInstance(BleProfileServiceReadyActivity.this, filter, discoverableRequired); - dialog.show(getFragmentManager(), "scan_fragment"); + dialog.show(getSupportFragmentManager(), "scan_fragment"); } /** diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/LinklossFragment.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/LinklossFragment.java index 78a52d878..15d4f3332 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/LinklossFragment.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/LinklossFragment.java @@ -21,10 +21,11 @@ */ package no.nordicsemi.android.nrftoolbox.proximity; -import android.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.DialogFragment; +import android.support.v7.app.AlertDialog; import no.nordicsemi.android.nrftoolbox.R; @@ -50,7 +51,8 @@ public void onCreate(Bundle savedInstanceState) { mName = getArguments().getString(ARG_NAME); } - @Override + @NonNull + @Override public Dialog onCreateDialog(Bundle savedInstanceState) { return new AlertDialog.Builder(getActivity()).setTitle(getString(R.string.app_name)).setMessage(getString(R.string.proximity_notification_linkloss_alert, mName)) .setPositiveButton(R.string.ok, null).create(); diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/ProximityActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/ProximityActivity.java index d87db8943..2f4933d1d 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/ProximityActivity.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/proximity/ProximityActivity.java @@ -21,7 +21,6 @@ */ package no.nordicsemi.android.nrftoolbox.proximity; -import android.app.FragmentManager; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; @@ -201,9 +200,8 @@ private void showClosedLock() { private void showLinklossDialog(final String name) { try { - FragmentManager fm = getFragmentManager(); - LinklossFragment dialog = LinklossFragment.getInstance(name); - dialog.show(fm, "scan_fragment"); + final LinklossFragment dialog = LinklossFragment.getInstance(name); + dialog.show(getSupportFragmentManager(), "scan_fragment"); } catch (final Exception e) { // the activity must have been destroyed } diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/rsc/RSCActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/rsc/RSCActivity.java index b298bc9b8..820f8d4aa 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/rsc/RSCActivity.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/rsc/RSCActivity.java @@ -105,19 +105,19 @@ private void setUnits() { 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); + mSpeedUnitView.setText(R.string.rsc_speed_unit_m_s); + mDistanceUnitView.setText(R.string.rsc_distance_unit_m); + mTotalDistanceUnitView.setText(R.string.rsc_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); + mSpeedUnitView.setText(R.string.rsc_speed_unit_km_h); + mDistanceUnitView.setText(R.string.rsc_distance_unit_m); + mTotalDistanceUnitView.setText(R.string.rsc_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); + mSpeedUnitView.setText(R.string.rsc_speed_unit_mph); + mDistanceUnitView.setText(R.string.rsc_distance_unit_yd); + mTotalDistanceUnitView.setText(R.string.rsc_total_distance_unit_mile); break; } } diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/rsc/settings/SettingsActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/rsc/settings/SettingsActivity.java index 53a001aae..1d27b4b55 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/rsc/settings/SettingsActivity.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/rsc/settings/SettingsActivity.java @@ -23,19 +23,25 @@ package no.nordicsemi.android.nrftoolbox.rsc.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/scanner/ScannerFragment.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/scanner/ScannerFragment.java index 318e4bea6..2b758fab0 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/scanner/ScannerFragment.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/scanner/ScannerFragment.java @@ -22,9 +22,7 @@ package no.nordicsemi.android.nrftoolbox.scanner; import android.app.Activity; -import android.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothManager; @@ -33,6 +31,9 @@ import android.os.Bundle; import android.os.Handler; import android.os.ParcelUuid; +import android.support.annotation.NonNull; +import android.support.v4.app.DialogFragment; +import android.support.v7.app.AlertDialog; import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; @@ -144,7 +145,8 @@ public void onDestroyView() { /** * When dialog is created then set AlertDialog with list and button views. */ - @Override + @NonNull + @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); final View dialogView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_device_selection, null); diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/template/settings/SettingsActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/template/settings/SettingsActivity.java index b64b1482c..e5b61daca 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/template/settings/SettingsActivity.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/template/settings/SettingsActivity.java @@ -23,19 +23,25 @@ package no.nordicsemi.android.nrftoolbox.template.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/uart/UARTActivity.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTActivity.java index ddca15a09..800b909b1 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTActivity.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTActivity.java @@ -32,6 +32,7 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.widget.SlidingPaneLayout; import android.view.View; @@ -76,7 +77,7 @@ protected void onCreateView(final Bundle savedInstanceState) { @Override public void onPanelClosed(final View panel) { // Close the keyboard - final UARTLogFragment logFragment = (UARTLogFragment) getFragmentManager().findFragmentById(R.id.fragment_log); + final UARTLogFragment logFragment = (UARTLogFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_log); logFragment.onFragmentHidden(); } }); @@ -84,7 +85,7 @@ public void onPanelClosed(final View panel) { } @Override - protected void onRestoreInstanceState(final Bundle savedInstanceState) { + protected void onRestoreInstanceState(final @NonNull Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mEditMode = savedInstanceState.getBoolean(SIS_EDIT_MODE); @@ -134,7 +135,7 @@ public void onDeviceSelected(final BluetoothDevice device, final String name) { super.onDeviceSelected(device, name); // Notify the log fragment about it - final UARTLogFragment logFragment = (UARTLogFragment) getFragmentManager().findFragmentById(R.id.fragment_log); + final UARTLogFragment logFragment = (UARTLogFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_log); logFragment.onServiceStarted(); } @@ -176,7 +177,7 @@ public void onBackPressed() { return; } if (mEditMode) { - final UARTControlFragment fragment = (UARTControlFragment) getFragmentManager().findFragmentById(R.id.fragment_control); + final UARTControlFragment fragment = (UARTControlFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_control); fragment.setEditMode(false); return; } diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTControlFragment.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTControlFragment.java index de0567194..ae89a990f 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTControlFragment.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTControlFragment.java @@ -23,10 +23,10 @@ package no.nordicsemi.android.nrftoolbox.uart; import android.app.Activity; -import android.app.Fragment; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTEditDialog.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTEditDialog.java index cd1fd2cbf..1ecb16290 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTEditDialog.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTEditDialog.java @@ -22,12 +22,13 @@ package no.nordicsemi.android.nrftoolbox.uart; -import android.app.AlertDialog; import android.app.Dialog; -import android.app.DialogFragment; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.annotation.NonNull; +import android.support.v4.app.DialogFragment; +import android.support.v7.app.AlertDialog; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -62,7 +63,8 @@ public static UARTEditDialog getInstance(final int index) { return fragment; } - @Override + @NonNull + @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); final LayoutInflater inflater = LayoutInflater.from(getActivity()); diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTLogFragment.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTLogFragment.java index 3fa8fccea..ce5e16c4e 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTLogFragment.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/uart/UARTLogFragment.java @@ -22,19 +22,19 @@ package no.nordicsemi.android.nrftoolbox.uart; -import android.app.ListFragment; -import android.app.LoaderManager.LoaderCallbacks; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; -import android.content.CursorLoader; import android.content.Intent; import android.content.IntentFilter; -import android.content.Loader; import android.content.ServiceConnection; import android.database.Cursor; import android.os.Bundle; import android.os.IBinder; +import android.support.v4.app.ListFragment; +import android.support.v4.app.LoaderManager; +import android.support.v4.content.CursorLoader; +import android.support.v4.content.Loader; import android.support.v4.content.LocalBroadcastManager; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -53,7 +53,7 @@ import no.nordicsemi.android.nrftoolbox.R; import no.nordicsemi.android.nrftoolbox.profile.BleProfileService; -public class UARTLogFragment extends ListFragment implements LoaderCallbacks { +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 623606988..65b9c25ff 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 void onCharacteristicNotified(final BluetoothGatt gatt, final BluetoothGa } }; + @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 c76f41b1b..eb5478088 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 void onReceive(final Context context, final Intent intent) { }; /** - * 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 000000000..42950e70f --- /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 000000000..a0e3ab6ca --- /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 b1d87923b..c6d777f2b 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 bb40b7230..000000000 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 c643fa54d..000000000 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 3e4580e05..000000000 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 e45ea1fd9..000000000 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 261078de2..000000000 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 0279e17a1..000000000 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 0f04c4972..000000000 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 e4be458dd..000000000 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 09b014834..000000000 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 95708234a..000000000 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 6009fd1bd..000000000 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 65061c0f4..000000000 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 80552bc98..000000000 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 000000000..89309efe3 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 000000000..c4e808346 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 867ad75d2..12e5413e4 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_marginLeft="@dimen/feature_horizontal_margin" + android:layout_marginRight="@dimen/feature_horizontal_margin" + 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_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" > + + + + + - - -