From e525017f98fbfcfb6e83a22c222d2e3eacbbadce Mon Sep 17 00:00:00 2001 From: Eugene Date: Fri, 18 Sep 2020 19:46:54 +0300 Subject: [PATCH 1/5] Updated code dependencies; --- app/build.gradle | 25 +++++++---------- .../dataart/btle_android/BTLEApplication.java | 8 ++---- .../dataart/btle_android/MainActivity.java | 9 +++---- .../btle_gateway/BluetoothLeService.java | 4 +-- .../btle_android/helpers/LocationHelper.java | 7 ++--- app/src/main/res/layout/activity_settings.xml | 4 +-- app/src/main/res/values/styles.xml | 2 +- build.gradle | 2 +- gradle.properties | 27 ++++++++++++++++--- gradle/wrapper/gradle-wrapper.properties | 4 +-- 10 files changed, 47 insertions(+), 45 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d359e0d..01e75ef 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,11 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 - buildToolsVersion "27.0.3" - + compileSdkVersion 29 defaultConfig { applicationId "com.dataart.btle_android" minSdkVersion 19 - targetSdkVersion 27 + targetSdkVersion 29 versionCode 3 versionName "3.0" multiDexEnabled true @@ -27,21 +25,19 @@ android { ext { devicehive = "3.1.2" commons = "1.11" - rxandroid = "2.0.1" - rxjava = "2.1.7" - guava = "23.6-android" - gson = "2.8.2" - timber = "4.6.0" + rxandroid = "2.1.1" + rxjava = "2.2.19" + guava = "24.1-jre" + gson = "2.8.6" + timber = "4.7.1" support = "27.0.2" - gms = "11.8.0" - multidex = "1.0.2" + gms = "17.0.0" + materialVersion = '1.3.0-alpha02' } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation "com.android.support:appcompat-v7:${support}" - implementation "com.android.support:design:${support}" - + implementation "com.google.android.material:material:$materialVersion" implementation "com.google.code.gson:gson:${gson}" implementation "com.jakewharton.timber:timber:${timber}" @@ -58,5 +54,4 @@ dependencies { implementation "com.google.guava:guava:${guava}" implementation "com.github.devicehive:devicehive-java:${devicehive}" - implementation "com.android.support:multidex:${multidex}" } diff --git a/app/src/main/java/com/dataart/btle_android/BTLEApplication.java b/app/src/main/java/com/dataart/btle_android/BTLEApplication.java index 0e63f57..68be216 100644 --- a/app/src/main/java/com/dataart/btle_android/BTLEApplication.java +++ b/app/src/main/java/com/dataart/btle_android/BTLEApplication.java @@ -1,17 +1,14 @@ package com.dataart.btle_android; -import android.support.multidex.MultiDex; -import android.support.multidex.MultiDexApplication; - +import android.app.Application; import com.dataart.btle_android.devicehive.BTLEDevicePreferences; - import timber.log.Timber; /** * Created by alrybakov */ -public class BTLEApplication extends MultiDexApplication { +public class BTLEApplication extends Application { private static BTLEApplication application; @@ -23,7 +20,6 @@ public static BTLEApplication getApplication() { public void onCreate() { super.onCreate(); application = this; - MultiDex.install(this); BTLEDevicePreferences.getInstance().init(this); if (BuildConfig.DEBUG){ Timber.plant(new Timber.DebugTree()); diff --git a/app/src/main/java/com/dataart/btle_android/MainActivity.java b/app/src/main/java/com/dataart/btle_android/MainActivity.java index 6511d29..074199d 100644 --- a/app/src/main/java/com/dataart/btle_android/MainActivity.java +++ b/app/src/main/java/com/dataart/btle_android/MainActivity.java @@ -8,9 +8,6 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -19,15 +16,15 @@ import android.widget.Button; import android.widget.EditText; import android.widget.TextView; - +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import com.dataart.btle_android.btle_gateway.BluetoothLeService; import com.dataart.btle_android.devicehive.BTLEDevicePreferences; import com.dataart.btle_android.helpers.BleHelpersFactory; import com.dataart.btle_android.helpers.ble.base.BleInitializer; - import java.util.Objects; import java.util.UUID; - import timber.log.Timber; diff --git a/app/src/main/java/com/dataart/btle_android/btle_gateway/BluetoothLeService.java b/app/src/main/java/com/dataart/btle_android/btle_gateway/BluetoothLeService.java index f5ac9ee..f2501e5 100644 --- a/app/src/main/java/com/dataart/btle_android/btle_gateway/BluetoothLeService.java +++ b/app/src/main/java/com/dataart/btle_android/btle_gateway/BluetoothLeService.java @@ -11,15 +11,13 @@ import android.content.Intent; import android.content.IntentFilter; import android.os.IBinder; -import android.support.v4.app.NotificationCompat; import android.widget.Toast; - +import androidx.core.app.NotificationCompat; import com.dataart.btle_android.MainActivity; import com.dataart.btle_android.R; import com.dataart.btle_android.btle_gateway.server.BluetoothServer; import com.dataart.btle_android.devicehive.BTLEDeviceHive; import com.github.devicehive.client.service.DeviceCommand; - import timber.log.Timber; /** diff --git a/app/src/main/java/com/dataart/btle_android/helpers/LocationHelper.java b/app/src/main/java/com/dataart/btle_android/helpers/LocationHelper.java index 61481bf..e7052f3 100644 --- a/app/src/main/java/com/dataart/btle_android/helpers/LocationHelper.java +++ b/app/src/main/java/com/dataart/btle_android/helpers/LocationHelper.java @@ -1,6 +1,5 @@ package com.dataart.btle_android.helpers; - import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -9,9 +8,8 @@ import android.location.LocationManager; import android.os.Bundle; import android.provider.Settings; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import com.dataart.btle_android.R; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GoogleApiAvailability; @@ -26,7 +24,6 @@ import com.google.android.gms.location.LocationSettingsStatusCodes; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; - import timber.log.Timber; /** diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 0f52517..2842937 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - \ No newline at end of file + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 6f4afe3..a50daff 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,7 +1,7 @@ - diff --git a/build.gradle b/build.gradle index 7bf22ca..f36a6a8 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:4.0.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } diff --git a/gradle.properties b/gradle.properties index a9dabe1..091f0be 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,11 +6,30 @@ # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx10248m -XX:MaxPermSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +org.gradle.jvmargs=-Xmx4G -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +#android.enableAapt2=false # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects org.gradle.parallel=true -#Fixes error default or static interface method used without --min-sdk-version >= 24 -android.enableD8=true \ No newline at end of file +#Enable daemon +org.gradle.daemon=true +#The build cache stores certain outputs that the Android plugin for Gradle generates +# when building your project (such as unpackaged AARs and pre-dexed remote dependencies). +# Your clean builds are much faster while using the cache because +# the build system can simply reuse those cached files during subsequent builds, +# instead of recreating them. +# The build cache also works on continuous integration servers +# and when running multiple build processes on a single local machine. +org.gradle.caching=true +# Enables new incubating mode that makes Gradle selective when configuring projects. +# Only relevant projects are configured which results in faster builds for large multi-projects. +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand +org.gradle.configureondemand=true +# Set to true or false to enable or disable the build cache. +# If this parameter is not set, the build cache is disabled by default. +# http://tools.android.com/tech-docs/build-cache +android.enableBuildCache=true + +android.useAndroidX=true +android.enableJetifier=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bace488..2388ec4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Dec 14 15:13:57 EET 2017 +#Fri Sep 18 19:19:58 EEST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip From d26293b3c03ee2e86a83d9b3f7d7465ee7f7a52c Mon Sep 17 00:00:00 2001 From: Nikolay Khabarov Date: Sun, 20 Sep 2020 03:34:39 +0300 Subject: [PATCH 2/5] Use foreground service for newer android versions --- app/build.gradle | 4 +-- app/src/main/AndroidManifest.xml | 1 + .../btle_gateway/BluetoothLeService.java | 36 ++++++++++++++++--- .../btle_gateway/server/BluetoothServer.java | 7 +++- .../devicehive/DeviceHiveConfig.java | 2 +- app/src/main/res/values/strings.xml | 2 +- 6 files changed, 42 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 01e75ef..41d5e21 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "com.dataart.btle_android" minSdkVersion 19 targetSdkVersion 29 - versionCode 3 - versionName "3.0" + versionCode 4 + versionName "4.0" multiDexEnabled true } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 65318a6..f47f990 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + diff --git a/app/src/main/java/com/dataart/btle_android/btle_gateway/BluetoothLeService.java b/app/src/main/java/com/dataart/btle_android/btle_gateway/BluetoothLeService.java index f2501e5..9f5470e 100644 --- a/app/src/main/java/com/dataart/btle_android/btle_gateway/BluetoothLeService.java +++ b/app/src/main/java/com/dataart/btle_android/btle_gateway/BluetoothLeService.java @@ -1,5 +1,7 @@ package com.dataart.btle_android.btle_gateway; +import android.app.Notification; +import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; @@ -10,6 +12,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.os.Build; import android.os.IBinder; import android.widget.Toast; import androidx.core.app.NotificationCompat; @@ -31,6 +34,8 @@ public class BluetoothLeService extends Service { .concat("ACTION_BT_PERMISSION_REQUEST"); private final static int LE_NOTIFICATION_ID = 1; + private final static String LE_NOTIFICATION_NAME = "DeviceHive"; + private final static String LE_NOTIFICATION_CHANNEL_ID = "devicehive"; private NotificationManager mNotificationManager; private NotificationCompat.Builder mBuilder; @@ -47,7 +52,11 @@ public BluetoothLeService() { } public static void start(final Context context) { - context.startService(new Intent(context, BluetoothLeService.class)); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + context.startForegroundService(new Intent(context, BluetoothLeService.class)); + } else { + context.startService(new Intent(context, BluetoothLeService.class)); + } } public static void stop(final Context context) { @@ -84,7 +93,13 @@ public int onStartCommand(Intent intent, int flags, int startId) { mDeviceHive.registerDevice(); - setNotification(); + Notification notification = prepareNotification(); + + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + startForeground(LE_NOTIFICATION_ID, notification); + } else { + mNotificationManager.notify(LE_NOTIFICATION_ID, mBuilder.build()); + } return START_NOT_STICKY; } @@ -154,13 +169,20 @@ private void send(final String action) { sendBroadcast(intent); } - private void setNotification() { + private Notification prepareNotification() { final Intent resultIntent = new Intent(this, MainActivity.class); final TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); stackBuilder.addParentStack(MainActivity.class); stackBuilder.addNextIntent(resultIntent); final PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); - mBuilder = new NotificationCompat.Builder(this, "channel_id_1") + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + NotificationChannel channel = new NotificationChannel(LE_NOTIFICATION_CHANNEL_ID, LE_NOTIFICATION_NAME, NotificationManager.IMPORTANCE_HIGH); + channel.enableVibration(false); + channel.setShowBadge(true); + mNotificationManager.createNotificationChannel(channel); + } + + mBuilder = new NotificationCompat.Builder(this, LE_NOTIFICATION_CHANNEL_ID) .setContentText(getString(R.string.notification_bt_on)) .setContentTitle(getString(R.string.device_hive)) .setSmallIcon(R.drawable.ic_le_service) @@ -168,7 +190,11 @@ private void setNotification() { .setOngoing(true) .setContentIntent(resultPendingIntent); - mNotificationManager.notify(LE_NOTIFICATION_ID, mBuilder.build()); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + mBuilder.setChannelId(LE_NOTIFICATION_CHANNEL_ID); + } + + return mBuilder.build(); } } diff --git a/app/src/main/java/com/dataart/btle_android/btle_gateway/server/BluetoothServer.java b/app/src/main/java/com/dataart/btle_android/btle_gateway/server/BluetoothServer.java index b67e271..5956fd0 100644 --- a/app/src/main/java/com/dataart/btle_android/btle_gateway/server/BluetoothServer.java +++ b/app/src/main/java/com/dataart/btle_android/btle_gateway/server/BluetoothServer.java @@ -241,7 +241,12 @@ DeviceConnection connectAndSave(String address, BluetoothDevice device, Interact private DeviceConnection connectAndSave(String address, BluetoothDevice device, InteractiveGattCallback.DisconnectListener disconnectListener, InteractiveGattCallback.StatusListener statusListener, InteractiveGattCallback.OnConnectedListener connectedListener) { final InteractiveGattCallback callback = new InteractiveGattCallback(address, statusListener, context, disconnectListener, connectedListener); - BluetoothGatt gatt = device.connectGatt(context, false, callback); + BluetoothGatt gatt = null; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + gatt = device.connectGatt(context, false, callback, BluetoothDevice.TRANSPORT_LE); + } else { + gatt = device.connectGatt(context, false, callback); + } DeviceConnection connection = new DeviceConnection(address, gatt, callback); activeConnections.put(address, connection); return connection; diff --git a/app/src/main/java/com/dataart/btle_android/devicehive/DeviceHiveConfig.java b/app/src/main/java/com/dataart/btle_android/devicehive/DeviceHiveConfig.java index a826b42..80d04a3 100644 --- a/app/src/main/java/com/dataart/btle_android/devicehive/DeviceHiveConfig.java +++ b/app/src/main/java/com/dataart/btle_android/devicehive/DeviceHiveConfig.java @@ -2,6 +2,6 @@ public final class DeviceHiveConfig { - public static final String API_ENDPOINT = "http://playground.devicehive.com/api/rest"; + public static final String API_ENDPOINT = "https://playground.devicehive.com/api/rest"; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0fbc2f4..ac0a52b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -11,7 +11,7 @@ Start service Stop service - http://playground.devicehive.com/api/rest + https://playground.devicehive.com/api/rest devicehive-ble-android Bluetooth LE is not supported.\nApplication will close itself From 0d6788e1280db849e6f7857b26bb07ce63b0d749 Mon Sep 17 00:00:00 2001 From: Eugene Date: Mon, 21 Sep 2020 03:56:05 +0300 Subject: [PATCH 3/5] Updated UI; --- app/build.gradle | 5 +- .../dataart/btle_android/MainActivity.java | 51 ++-- app/src/main/res/drawable/ic_play_arrow.xml | 9 + app/src/main/res/drawable/ic_repeat.xml | 9 + app/src/main/res/layout/activity_settings.xml | 220 ++++++++++-------- app/src/main/res/values-v21/styles.xml | 8 - app/src/main/res/values/colors.xml | 9 +- app/src/main/res/values/dimens.xml | 4 + app/src/main/res/values/styles.xml | 4 + 9 files changed, 184 insertions(+), 135 deletions(-) create mode 100644 app/src/main/res/drawable/ic_play_arrow.xml create mode 100644 app/src/main/res/drawable/ic_repeat.xml delete mode 100644 app/src/main/res/values-v21/styles.xml diff --git a/app/build.gradle b/app/build.gradle index 01e75ef..b4ebf42 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion 29 defaultConfig { applicationId "com.dataart.btle_android" - minSdkVersion 19 + minSdkVersion 21 targetSdkVersion 29 versionCode 3 versionName "3.0" @@ -33,6 +33,7 @@ ext { support = "27.0.2" gms = "17.0.0" materialVersion = '1.3.0-alpha02' + constraintLayoutVersion = '2.0.1' } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) @@ -40,6 +41,8 @@ dependencies { implementation "com.google.android.material:material:$materialVersion" implementation "com.google.code.gson:gson:${gson}" + implementation "androidx.constraintlayout:constraintlayout:$constraintLayoutVersion" + implementation "com.jakewharton.timber:timber:${timber}" implementation "commons-codec:commons-codec:${commons}" diff --git a/app/src/main/java/com/dataart/btle_android/MainActivity.java b/app/src/main/java/com/dataart/btle_android/MainActivity.java index 074199d..0ed91c8 100644 --- a/app/src/main/java/com/dataart/btle_android/MainActivity.java +++ b/app/src/main/java/com/dataart/btle_android/MainActivity.java @@ -13,18 +13,24 @@ import android.text.TextWatcher; import android.view.View; import android.view.inputmethod.EditorInfo; -import android.widget.Button; -import android.widget.EditText; import android.widget.TextView; + import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; +import androidx.core.content.ContextCompat; + import com.dataart.btle_android.btle_gateway.BluetoothLeService; import com.dataart.btle_android.devicehive.BTLEDevicePreferences; import com.dataart.btle_android.helpers.BleHelpersFactory; import com.dataart.btle_android.helpers.ble.base.BleInitializer; +import com.google.android.material.button.MaterialButton; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; + import java.util.Objects; import java.util.UUID; + import timber.log.Timber; @@ -33,12 +39,15 @@ public class MainActivity extends AppCompatActivity { private BleInitializer bleInitializer; private BluetoothManager mBluetoothManager; - private EditText serverUrlEditText; - private EditText gatewayIdEditText; - private EditText refreshTokenEditText; + private TextInputEditText serverUrlEditText; + private TextInputLayout serverUrlEditTextParent; + private TextInputEditText gatewayIdEditText; + private TextInputLayout gatewayIdEditTextParent; + private TextInputEditText refreshTokenEditText; + private TextInputLayout refreshTokenEditTextParent; private TextView hintText; - private Button serviceButton; - private Button restartServiceButton; + private FloatingActionButton serviceButton; + private MaterialButton restartServiceButton; private BTLEDevicePreferences prefs; private boolean isServiceStarted; private final View.OnClickListener restartClickListener = new View.OnClickListener() { @@ -80,11 +89,6 @@ public void afterTextChanged(Editable editable) { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_settings); - Toolbar myToolbar = findViewById(R.id.toolbar); - setSupportActionBar(myToolbar); - if (getSupportActionBar() != null) { - getSupportActionBar().setTitle(R.string.app_name); - } // BleInitializer will start service on initialization success bleInitializer = BleHelpersFactory.getInitializer(this, bluetoothAdapter -> startService()); init(); @@ -111,8 +115,11 @@ private void init() { prefs = BTLEDevicePreferences.getInstance(); serverUrlEditText = findViewById(R.id.server_url_edit); + serverUrlEditTextParent = findViewById(R.id.server_url_parent); gatewayIdEditText = findViewById(R.id.settings_gateway_id); + gatewayIdEditTextParent = findViewById(R.id.settings_gateway_id_parent); refreshTokenEditText = findViewById(R.id.refresh_token_edit); + refreshTokenEditTextParent = findViewById(R.id.refresh_token_parent); hintText = findViewById(R.id.hintText); resetValues(); @@ -209,12 +216,12 @@ private void startService() { private void onServiceRunning() { isServiceStarted = true; - serviceButton.setText(R.string.button_stop); + serviceButton.setImageDrawable(ContextCompat.getDrawable(this, android.R.drawable.ic_media_pause)); } private void onServiceStopped() { isServiceStarted = false; - serviceButton.setText(R.string.button_start); + serviceButton.setImageDrawable(ContextCompat.getDrawable(this, android.R.drawable.ic_media_play)); } private boolean isRestartRequired() { @@ -251,7 +258,7 @@ private void resetValues() { gatewayIdEditText.setText( TextUtils.isEmpty(gatewayId) ? getString(R.string.default_gateway_id) + "-" + - UUID.randomUUID().toString().substring(0, 4) + UUID.randomUUID().toString().substring(0, 4) : gatewayId ); @@ -264,9 +271,9 @@ private void resetValues() { } private void resetErrors() { - serverUrlEditText.setError(null); - gatewayIdEditText.setError(null); - refreshTokenEditText.setError(null); + serverUrlEditTextParent.setError(null); + gatewayIdEditTextParent.setError(null); + refreshTokenEditTextParent.setError(null); } private boolean validateValues() { @@ -277,13 +284,13 @@ private boolean validateValues() { final String refreshToken = refreshTokenEditText.getText().toString(); if (TextUtils.isEmpty(serverUrl)) { - serverUrlEditText.setError(getString(R.string.error_message_empty_server_url)); + serverUrlEditTextParent.setError(getString(R.string.error_message_empty_server_url)); serverUrlEditText.requestFocus(); } else if (TextUtils.isEmpty(gatewayId)) { - gatewayIdEditText.setError(getString(R.string.error_message_empty_gateway_id)); + gatewayIdEditTextParent.setError(getString(R.string.error_message_empty_gateway_id)); gatewayIdEditText.requestFocus(); } else if (TextUtils.isEmpty(refreshToken)) { - refreshTokenEditText.setError(getString(R.string.error_message_empty_refresh_token)); + refreshTokenEditTextParent.setError(getString(R.string.error_message_empty_refresh_token)); refreshTokenEditText.requestFocus(); } else { return true; diff --git a/app/src/main/res/drawable/ic_play_arrow.xml b/app/src/main/res/drawable/ic_play_arrow.xml new file mode 100644 index 0000000..a92dd19 --- /dev/null +++ b/app/src/main/res/drawable/ic_play_arrow.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_repeat.xml b/app/src/main/res/drawable/ic_repeat.xml new file mode 100644 index 0000000..ca56235 --- /dev/null +++ b/app/src/main/res/drawable/ic_repeat.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index 2842937..d3d32d5 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -1,132 +1,150 @@ - - - - + android:fillViewport="true" + android:scrollbars="none" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - - - - - - - - + android:layout_height="match_parent" + android:padding="@dimen/padding"> + + + + - - - - - - - - + android:hint="@string/settings_server_url" + android:lines="1" /> + + + - - - - + - - - - - - - - - - - -