From c11d57de2ea373159604c9e59ae246e0716c52f8 Mon Sep 17 00:00:00 2001 From: wiecktobi Date: Tue, 2 Jun 2020 22:04:38 +0200 Subject: [PATCH 1/6] Update version and fix issue to show only accounts belonging to the user --- android/.idea/jarRepositories.xml | 25 +++++++ .../hft/geotracker/activities/MainActivity.kt | 71 +++++++++++++++++-- .../geotracker/retrofit/GeofenceService.kt | 9 +-- android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- 5 files changed, 96 insertions(+), 15 deletions(-) create mode 100644 android/.idea/jarRepositories.xml diff --git a/android/.idea/jarRepositories.xml b/android/.idea/jarRepositories.xml new file mode 100644 index 0000000..a5f05cd --- /dev/null +++ b/android/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/java/de/hft/geotracker/activities/MainActivity.kt b/android/app/src/main/java/de/hft/geotracker/activities/MainActivity.kt index ccaf3bf..49c8a58 100644 --- a/android/app/src/main/java/de/hft/geotracker/activities/MainActivity.kt +++ b/android/app/src/main/java/de/hft/geotracker/activities/MainActivity.kt @@ -1,5 +1,7 @@ package de.hft.geotracker.activities +import android.Manifest +import android.Manifest.permission.ACCESS_COARSE_LOCATION import android.Manifest.permission.ACCESS_FINE_LOCATION import android.app.PendingIntent import android.content.Context @@ -34,6 +36,7 @@ class MainActivity : AppCompatActivity() { lateinit var actionButton: TextView var running = false var accName: String? = null + var username: String? = null lateinit var accounts: ValuesTimetrackAccounts lateinit var service: GeofenceService lateinit var locationRequest: LocationRequest @@ -104,9 +107,9 @@ class MainActivity : AppCompatActivity() { showUsername() //Get Timetrack Accounts - val accountNames = mutableListOf() + /*val accountNames = mutableListOf() // accountNames.add("None") - val call = service.getAccounts() + val call = service.getAccounts(username!!) call.enqueue(object: Callback { override fun onResponse( call: Call, @@ -126,7 +129,7 @@ class MainActivity : AppCompatActivity() { Toast.makeText(this@MainActivity, "You dont have any Timetrack Accounts ", Toast.LENGTH_LONG) .show() } - }) + })*/ actionButton = findViewById(R.id.button_start_stop) actionButton.setOnClickListener { @@ -170,9 +173,10 @@ class MainActivity : AppCompatActivity() { println("Problem at start tracking: " + t.message) } }) + } else { + println("Accounts list is emty") } println("StartStop pressed: $running") - //ToDO call /track Endpoint } private fun showUsername() { @@ -182,13 +186,22 @@ class MainActivity : AppCompatActivity() { if (response.isSuccessful) { val firstname = response.body()?.firstname val location = response.body()?.location + username = response.body()?.username + getTimetrackAccounts(username!!) +/* println("Username response: " + response.body()?.username) + if (!username.equals(null)) { + getTimetrackAccounts(username!!) + println("Your name: $username") + } else { + Toast.makeText(this@MainActivity, "Not able to read your username", Toast.LENGTH_LONG) + .show() + }*/ lbl_username.text = "Hello " + firstname - println("Body: " + firstname) if (location?.latitude == null) { Toast.makeText(this@MainActivity, "No geofence set for you", Toast.LENGTH_LONG) .show() } else { - initializeGeofence(location?.latitude, location?.longitude, location?.radius) + initializeGeofence(location.latitude, location.longitude, location.radius) } } else { println("Response not successful: ${response.code()}") @@ -199,6 +212,35 @@ class MainActivity : AppCompatActivity() { println("Response 'whoami' failed. " + t.message) } }) + + + + } + private fun getTimetrackAccounts(user: String) { + val accountNames = mutableListOf() +// accountNames.add("None") + val call = service.getAccounts(username!!) + call.enqueue(object: Callback { + override fun onResponse( + call: Call, + response: Response + ) { + if (response.isSuccessful) { + accounts = response.body()!!.accounts + accounts.entries.forEach { + accountNames.add(it.name + "") + } + initializeDropdown(accountNames) + println("Dropdown initialized") + } + } + override fun onFailure(call: Call, t: Throwable) { + accountNames.add("None") + initializeDropdown(accountNames) + Toast.makeText(this@MainActivity, "You dont have any Timetrack Accounts ", Toast.LENGTH_LONG) + .show() + } + }) } private fun initializeDropdown(accountNames: MutableList) { val spinner: Spinner = findViewById(R.id.account_spinner) @@ -237,6 +279,13 @@ class MainActivity : AppCompatActivity() { .setExpirationDuration(Geofence.NEVER_EXPIRE) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER or Geofence.GEOFENCE_TRANSITION_EXIT) .build() + if (ActivityCompat.checkSelfPermission( + this, + ACCESS_FINE_LOCATION + ) != PackageManager.PERMISSION_GRANTED + ) { + requestPermissions(this, arrayOf(ACCESS_FINE_LOCATION), 1000) + } geofencingClient.addGeofences(getGeofencingRequest(), geofencePendingIntent)?.run { addOnSuccessListener { println("Geofence added with: latitude: $lat longitude: $long radius: $rad") @@ -266,6 +315,16 @@ class MainActivity : AppCompatActivity() { startLocationUpdates() } private fun startLocationUpdates() { + if (ActivityCompat.checkSelfPermission( + this, + ACCESS_FINE_LOCATION + ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( + this, + Manifest.permission.ACCESS_COARSE_LOCATION + ) != PackageManager.PERMISSION_GRANTED + ) { + requestPermissions(this, arrayOf(ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION), 1000) + } fusedLocationClient.requestLocationUpdates( locationRequest, locationCallback, diff --git a/android/app/src/main/java/de/hft/geotracker/retrofit/GeofenceService.kt b/android/app/src/main/java/de/hft/geotracker/retrofit/GeofenceService.kt index d437f99..5a6bfb3 100644 --- a/android/app/src/main/java/de/hft/geotracker/retrofit/GeofenceService.kt +++ b/android/app/src/main/java/de/hft/geotracker/retrofit/GeofenceService.kt @@ -1,10 +1,7 @@ package de.hft.geotracker.retrofit import retrofit2.Call -import retrofit2.http.Body -import retrofit2.http.GET -import retrofit2.http.POST -import retrofit2.http.Query +import retrofit2.http.* interface GeofenceService { @POST("/login") @@ -13,8 +10,8 @@ interface GeofenceService { @GET("whoami") fun getUser(): Call - @GET("accounts") - fun getAccounts(): Call + @GET("accounts/search/findByUsername") + fun getAccounts(@Query("username") username : String): Call @GET("track") fun triggerTracking(@Query("account") account: String): Call diff --git a/android/build.gradle b/android/build.gradle index 84b783e..2eac75d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.6.3' + classpath 'com.android.tools.build:gradle:4.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 2a990dc..e8f1aee 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Apr 05 19:25:41 CEST 2020 +#Tue Jun 02 21:02:45 CEST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip From 20ab2931f2234360c174b507ae3b2c774a80c73d Mon Sep 17 00:00:00 2001 From: wiecktobi Date: Tue, 2 Jun 2020 22:47:23 +0200 Subject: [PATCH 2/6] Change button text --- .../de/hft/geotracker/activities/Login.kt | 2 +- .../hft/geotracker/activities/MainActivity.kt | 55 ++++--------------- .../de/hft/geotracker/activities/Register.kt | 2 +- .../app/src/main/res/layout/activity_home.xml | 9 +-- .../src/main/res/layout/activity_login.xml | 6 +- .../src/main/res/layout/activity_register.xml | 4 +- android/app/src/main/res/values/strings.xml | 2 + 7 files changed, 24 insertions(+), 56 deletions(-) diff --git a/android/app/src/main/java/de/hft/geotracker/activities/Login.kt b/android/app/src/main/java/de/hft/geotracker/activities/Login.kt index e1e02a0..895ce8f 100644 --- a/android/app/src/main/java/de/hft/geotracker/activities/Login.kt +++ b/android/app/src/main/java/de/hft/geotracker/activities/Login.kt @@ -54,7 +54,7 @@ class Login : AppCompatActivity() { .build() service = retrofit.create(GeofenceService::class.java) - login = findViewById(R.id.button_create_account) + login = findViewById(R.id.button_login) login.setOnClickListener { intent = Intent(this, MainActivity::class.java) login() diff --git a/android/app/src/main/java/de/hft/geotracker/activities/MainActivity.kt b/android/app/src/main/java/de/hft/geotracker/activities/MainActivity.kt index 49c8a58..67dc6d6 100644 --- a/android/app/src/main/java/de/hft/geotracker/activities/MainActivity.kt +++ b/android/app/src/main/java/de/hft/geotracker/activities/MainActivity.kt @@ -19,7 +19,6 @@ import de.hft.geotracker.GeofenceBroadcastReceiver import de.hft.geotracker.R import de.hft.geotracker.retrofit.* import kotlinx.android.synthetic.main.activity_home.* -import kotlinx.android.synthetic.main.dropdown_menu.* import okhttp3.OkHttpClient import retrofit2.Call import retrofit2.Callback @@ -36,7 +35,6 @@ class MainActivity : AppCompatActivity() { lateinit var actionButton: TextView var running = false var accName: String? = null - var username: String? = null lateinit var accounts: ValuesTimetrackAccounts lateinit var service: GeofenceService lateinit var locationRequest: LocationRequest @@ -68,19 +66,20 @@ class MainActivity : AppCompatActivity() { ?.apply() getSharedPreferences("LOCATION", Context.MODE_PRIVATE) .registerOnSharedPreferenceChangeListener { sharedPreferences, key -> - val btnState = sharedPreferences.getBoolean("ENABLED", false) + val isInside = sharedPreferences.getBoolean("ENABLED", false) - println("Buttonstate: $btnState") - if (btnState) { + println("Is inside? -> $isInside") + if (isInside) { + button_start_stop?.text = getString(R.string.start) button_start_stop?.setBackgroundColor(resources.getColor(R.color.logo_blue)) - } else { + } else { button_start_stop?.setBackgroundColor(resources.getColor(R.color.colorPrimaryDark)) if (running) { - button_start_stop.toggle() callStartStop() } + button_start_stop?.text = getString(R.string.outside_place) } - button_start_stop.isEnabled = btnState + button_start_stop.isEnabled = isInside } //JWToken lesen @@ -106,31 +105,6 @@ class MainActivity : AppCompatActivity() { service = retrofit.create(GeofenceService::class.java) showUsername() - //Get Timetrack Accounts - /*val accountNames = mutableListOf() -// accountNames.add("None") - val call = service.getAccounts(username!!) - call.enqueue(object: Callback { - override fun onResponse( - call: Call, - response: Response - ) { - if (response.isSuccessful) { - accounts = response.body()!!.accounts - accounts.entries.forEach { - accountNames.add(it.name + "") - } - initializeDropdown(accountNames) - } - } - override fun onFailure(call: Call, t: Throwable) { - accountNames.add("None") - initializeDropdown(accountNames) - Toast.makeText(this@MainActivity, "You dont have any Timetrack Accounts ", Toast.LENGTH_LONG) - .show() - } - })*/ - actionButton = findViewById(R.id.button_start_stop) actionButton.setOnClickListener { callStartStop() @@ -158,8 +132,10 @@ class MainActivity : AppCompatActivity() { running = !running if (running) { account_spinner.visibility = View.GONE + button_start_stop?.text = getString(R.string.stop) } else { account_spinner.visibility = View.VISIBLE + button_start_stop?.text = getString(R.string.start) } if (!accName.isNullOrEmpty()) { val call = service.triggerTracking(accName!!) @@ -186,16 +162,8 @@ class MainActivity : AppCompatActivity() { if (response.isSuccessful) { val firstname = response.body()?.firstname val location = response.body()?.location - username = response.body()?.username + val username = response.body()?.username getTimetrackAccounts(username!!) -/* println("Username response: " + response.body()?.username) - if (!username.equals(null)) { - getTimetrackAccounts(username!!) - println("Your name: $username") - } else { - Toast.makeText(this@MainActivity, "Not able to read your username", Toast.LENGTH_LONG) - .show() - }*/ lbl_username.text = "Hello " + firstname if (location?.latitude == null) { Toast.makeText(this@MainActivity, "No geofence set for you", Toast.LENGTH_LONG) @@ -219,7 +187,7 @@ class MainActivity : AppCompatActivity() { private fun getTimetrackAccounts(user: String) { val accountNames = mutableListOf() // accountNames.add("None") - val call = service.getAccounts(username!!) + val call = service.getAccounts(user) call.enqueue(object: Callback { override fun onResponse( call: Call, @@ -237,6 +205,7 @@ class MainActivity : AppCompatActivity() { override fun onFailure(call: Call, t: Throwable) { accountNames.add("None") initializeDropdown(accountNames) + button_start_stop?.text = "No Timetrack Accounts" Toast.makeText(this@MainActivity, "You dont have any Timetrack Accounts ", Toast.LENGTH_LONG) .show() } diff --git a/android/app/src/main/java/de/hft/geotracker/activities/Register.kt b/android/app/src/main/java/de/hft/geotracker/activities/Register.kt index faa0ffd..7645b88 100644 --- a/android/app/src/main/java/de/hft/geotracker/activities/Register.kt +++ b/android/app/src/main/java/de/hft/geotracker/activities/Register.kt @@ -11,7 +11,7 @@ class Register : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_register) - reg = findViewById(R.id.button_create_account) + reg = findViewById(R.id.button_login) reg.setOnClickListener { createAccount() } diff --git a/android/app/src/main/res/layout/activity_home.xml b/android/app/src/main/res/layout/activity_home.xml index f267e14..4f42092 100644 --- a/android/app/src/main/res/layout/activity_home.xml +++ b/android/app/src/main/res/layout/activity_home.xml @@ -68,23 +68,20 @@ app:layout_constraintTop_toBottomOf="@+id/divider2" app:layout_constraintVertical_bias="0.0" /> - diff --git a/android/app/src/main/res/layout/activity_login.xml b/android/app/src/main/res/layout/activity_login.xml index d496f1a..ca2e95f 100644 --- a/android/app/src/main/res/layout/activity_login.xml +++ b/android/app/src/main/res/layout/activity_login.xml @@ -63,7 +63,7 @@ android:textColorHint="@color/logo_white" app:boxBackgroundColor="@color/common_google_signin_btn_text_dark_disabled" app:boxBackgroundMode="outline" - app:layout_constraintBottom_toTopOf="@+id/button_create_account" + app:layout_constraintBottom_toTopOf="@+id/button_login" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" @@ -81,7 +81,7 @@