From aa22482b4487579f0a00fd6b1399b2443442f9c2 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Thu, 29 Jun 2023 14:54:47 +0200
Subject: [PATCH 01/23] Preliminary Working Version of PlaceDetailsActivity
---
app/build.gradle | 5 ++
app/src/main/AndroidManifest.xml | 6 ++
.../nlinterface/activities/MainActivity.kt | 9 ++-
.../activities/PlaceDetailsActivity.kt | 67 +++++++++++++++++
.../viewmodels/PlaceDetailsViewModel.kt | 72 +++++++++++++++++++
.../res/layout/activity_place_details.xml | 68 ++++++++++++++++++
.../layout/fragment_autocomplete_support.xml | 14 ++++
app/src/main/res/values/strings.xml | 2 +
build.gradle | 6 ++
9 files changed, 248 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
create mode 100644 app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
create mode 100644 app/src/main/res/layout/activity_place_details.xml
create mode 100644 app/src/main/res/layout/fragment_autocomplete_support.xml
diff --git a/app/build.gradle b/app/build.gradle
index 02f9bb5..4619553 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,6 +2,8 @@ plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'kotlin-parcelize'
+ id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
+
}
android {
@@ -53,4 +55,7 @@ dependencies {
// GSON dependency
implementation 'com.google.code.gson:gson:2.8.5'
+
+ // Places API
+ implementation 'com.google.android.libraries.places:places:3.1.0'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 34eea70..02c2b64 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -18,6 +18,10 @@
android:theme="@style/Theme.NLInterface"
tools:targetApi="31">
+
+
+
diff --git a/app/src/main/java/com/nlinterface/activities/MainActivity.kt b/app/src/main/java/com/nlinterface/activities/MainActivity.kt
index 3d2e33c..7e53fcc 100644
--- a/app/src/main/java/com/nlinterface/activities/MainActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/MainActivity.kt
@@ -14,6 +14,13 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.view.WindowCompat
+import com.google.android.gms.common.api.ApiException
+import com.google.android.gms.common.api.internal.ApiKey
+import com.google.android.libraries.places.api.Places
+import com.google.android.libraries.places.api.model.Place
+import com.google.android.libraries.places.api.net.FetchPlaceRequest
+import com.google.android.libraries.places.api.net.FetchPlaceResponse
+import com.nlinterface.BuildConfig
import com.nlinterface.R
import com.nlinterface.databinding.ActivityMainBinding
import com.nlinterface.utility.*
@@ -49,7 +56,7 @@ class MainActivity : AppCompatActivity() {
val navigationActivityButton: Button = findViewById(R.id.navigation_bt) as Button
navigationActivityButton.setOnClickListener { view ->
- val intent = Intent(view.context, NavigationActivity::class.java)
+ val intent = Intent(view.context, PlaceDetailsActivity::class.java)
view.context.startActivity(intent)
}
diff --git a/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt b/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
new file mode 100644
index 0000000..bcaa009
--- /dev/null
+++ b/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
@@ -0,0 +1,67 @@
+package com.nlinterface.activities
+
+import android.os.Bundle
+import android.util.Log
+import android.view.View
+import android.widget.ImageButton
+import android.widget.TextView
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+import com.google.android.gms.common.api.Status
+import com.google.android.libraries.places.api.model.Place
+import com.google.android.libraries.places.widget.AutocompleteSupportFragment
+import com.google.android.libraries.places.widget.listener.PlaceSelectionListener
+import com.google.android.material.button.MaterialButton
+import com.nlinterface.R
+import com.nlinterface.databinding.ActivityPlaceDetailsBinding
+import com.nlinterface.utility.setViewRelativeSize
+import com.nlinterface.viewmodels.GroceryListViewModel
+import com.nlinterface.viewmodels.PlaceDetailsViewModel
+
+class PlaceDetailsActivity: AppCompatActivity() {
+
+ private lateinit var binding: ActivityPlaceDetailsBinding
+ private lateinit var viewModel: PlaceDetailsViewModel
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ viewModel = ViewModelProvider(this)[PlaceDetailsViewModel::class.java]
+ viewModel.initPlaceClient(this)
+
+ binding = ActivityPlaceDetailsBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ val voiceActivationButton = findViewById(R.id.voice_activation_bt) as ImageButton
+ setViewRelativeSize(voiceActivationButton, 1.0, 0.33)
+
+ voiceActivationButton.setOnClickListener {} // TODO
+
+ // Initialize the AutocompleteSupportFragment.
+ val autocompleteFragment =
+ supportFragmentManager.findFragmentById(R.id.autocomplete_fragment)
+ as AutocompleteSupportFragment
+
+ // Specify the types of place data to return.
+ autocompleteFragment.setPlaceFields(listOf(Place.Field.ID))
+
+ // Set up a PlaceSelectionListener to handle the response.
+ autocompleteFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener {
+ override fun onError(status: Status) {
+ viewModel.onError(status)
+ }
+ override fun onPlaceSelected(place: Place) {
+ viewModel.onPlaceSelected(place) { if (it) loadInformation() }
+ }
+ })
+ }
+
+ private fun loadInformation() {
+ val nameField = findViewById(R.id.place_details_name_tv) as TextView
+ val openingHoursField = findViewById(R.id.place_details_opening_hours_tv) as TextView
+
+ nameField.text = viewModel.getPlaceName()
+ openingHoursField.text = viewModel.getPlaceOpeningHours().toString()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt b/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
new file mode 100644
index 0000000..4103794
--- /dev/null
+++ b/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
@@ -0,0 +1,72 @@
+package com.nlinterface.viewmodels
+
+import android.app.Application
+import android.content.Context
+import android.util.Log
+import androidx.lifecycle.AndroidViewModel
+import com.google.android.gms.common.api.ApiException
+import com.google.android.gms.common.api.Status
+import com.google.android.libraries.places.api.Places
+import com.google.android.libraries.places.api.model.Place
+import com.google.android.libraries.places.api.net.FetchPlaceRequest
+import com.google.android.libraries.places.api.net.FetchPlaceResponse
+import com.google.android.libraries.places.api.net.PlacesClient
+import com.nlinterface.BuildConfig
+import com.nlinterface.dataclasses.PlaceItem
+import kotlinx.coroutines.CompletionHandler
+
+class PlaceDetailsViewModel(application: Application) : AndroidViewModel(application) {
+
+ private val context = application
+ private lateinit var placesClient: PlacesClient
+ private lateinit var place: Place
+
+ fun initPlaceClient(context: Context) {
+ Places.initialize(context, BuildConfig.MAPS_API_KEY)
+ placesClient = Places.createClient(context)
+ }
+
+ fun onPlaceSelected(place: Place, completion: (success: Boolean) -> Unit) {
+ val placeID = place.id
+ fetchPlaceDetails(placeID) {
+ completion(it)
+ }
+ }
+
+ private fun fetchPlaceDetails(placeID: String?, completion: (success: Boolean) -> Unit) {
+
+ // Specify the fields to return.
+ val placeFields = listOf(
+ Place.Field.NAME, Place.Field.OPENING_HOURS, Place.Field.ADDRESS
+ )
+
+ // Construct a request object, passing the place ID and fields array.
+ val request = placeID?.let { FetchPlaceRequest.newInstance(it, placeFields) }
+
+ if (request != null) {
+ placesClient.fetchPlace(request)
+ .addOnSuccessListener { response: FetchPlaceResponse ->
+ place = response.place
+ completion(true)
+ }.addOnFailureListener { exception: Exception ->
+ if (exception is ApiException) {
+ Log.println(Log.DEBUG, "MAPSAPI", "failed")
+ }
+ completion(false)
+ }
+ }
+ }
+
+ fun getPlaceName(): String {
+ return place.name.toString()
+ }
+
+ fun getPlaceOpeningHours(): MutableList {
+ return place.openingHours.weekdayText
+ }
+
+ fun onError(status: Status) {
+ // TODO
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_place_details.xml b/app/src/main/res/layout/activity_place_details.xml
new file mode 100644
index 0000000..67b3a41
--- /dev/null
+++ b/app/src/main/res/layout/activity_place_details.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_autocomplete_support.xml b/app/src/main/res/layout/fragment_autocomplete_support.xml
new file mode 100644
index 0000000..10eae0c
--- /dev/null
+++ b/app/src/main/res/layout/fragment_autocomplete_support.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5f6780e..0ea4f73 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -14,4 +14,6 @@
...
Tap to speak
Recognized speech will be written here
+
+ Hello blank fragment
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index c518bc1..da56258 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,4 +1,10 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ dependencies {
+ classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1"
+ }
+}
+
plugins {
id 'com.android.application' version '7.3.0' apply false
id 'com.android.library' version '7.3.0' apply false
From 5948263f164631c17bac8be2f4d8ca85fc28c6d8 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Thu, 29 Jun 2023 14:57:15 +0200
Subject: [PATCH 02/23] Fixed faulty import
---
.../java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt | 1 -
1 file changed, 1 deletion(-)
diff --git a/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt b/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
index 4103794..690310c 100644
--- a/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
+++ b/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
@@ -12,7 +12,6 @@ import com.google.android.libraries.places.api.net.FetchPlaceRequest
import com.google.android.libraries.places.api.net.FetchPlaceResponse
import com.google.android.libraries.places.api.net.PlacesClient
import com.nlinterface.BuildConfig
-import com.nlinterface.dataclasses.PlaceItem
import kotlinx.coroutines.CompletionHandler
class PlaceDetailsViewModel(application: Application) : AndroidViewModel(application) {
From 74685a258229331db2db11483d09b7b11ccd9bea Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Thu, 29 Jun 2023 17:24:04 +0200
Subject: [PATCH 03/23] GroceryList: new functionalities
- LongClick to Place in Cart
- Swipe to Delete
---
.../activities/GroceryListActivity.kt | 50 +++++++++++++++++--
.../adapters/GroceryListAdapter.kt | 22 ++++++--
.../viewmodels/GroceryListViewModel.kt | 4 ++
.../main/res/layout/activity_grocery_list.xml | 5 +-
app/src/main/res/layout/grocery_item.xml | 3 +-
app/src/main/res/values/colors.xml | 1 +
app/src/main/res/values/strings.xml | 3 +-
7 files changed, 77 insertions(+), 11 deletions(-)
diff --git a/app/src/main/java/com/nlinterface/activities/GroceryListActivity.kt b/app/src/main/java/com/nlinterface/activities/GroceryListActivity.kt
index a65f33d..cd45d20 100644
--- a/app/src/main/java/com/nlinterface/activities/GroceryListActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/GroceryListActivity.kt
@@ -11,6 +11,7 @@ import android.widget.ImageButton
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.nlinterface.R
@@ -20,6 +21,7 @@ import com.nlinterface.dataclasses.GroceryItem
import com.nlinterface.interfaces.GroceryListCallback
import com.nlinterface.utility.setViewRelativeHeight
import com.nlinterface.utility.setViewRelativeSize
+import com.nlinterface.utility.setViewRelativeWidth
import com.nlinterface.viewmodels.GroceryListViewModel
@@ -61,6 +63,48 @@ class GroceryListActivity : AppCompatActivity(), GroceryListCallback {
voiceActivationButton.setOnClickListener {
onAddVoiceActivationButtonClick()
}
+
+ ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(
+ 0, ItemTouchHelper.LEFT
+ ) {
+ override fun onMove(
+ recyclerView: RecyclerView,
+ viewHolder: RecyclerView.ViewHolder,
+ target: RecyclerView.ViewHolder
+ ): Boolean {return false}
+
+ override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
+ val groceryItem: GroceryItem =
+ groceryItemList[viewHolder.adapterPosition]
+
+ val index = viewHolder.adapterPosition
+
+ viewModel.deleteGroceryItem(groceryItem)
+
+ adapter.notifyItemRemoved(index)
+ }
+ }).attachToRecyclerView(rvGroceryList)
+
+ ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(
+ 0, ItemTouchHelper.RIGHT
+ ) {
+ override fun onMove(
+ recyclerView: RecyclerView,
+ viewHolder: RecyclerView.ViewHolder,
+ target: RecyclerView.ViewHolder
+ ): Boolean {return false}
+
+ override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
+ val groceryItem: GroceryItem =
+ groceryItemList[viewHolder.adapterPosition]
+
+ val index = viewHolder.adapterPosition
+
+ viewModel.deleteGroceryItem(groceryItem)
+
+ adapter.notifyItemRemoved(index)
+ }
+ }).attachToRecyclerView(rvGroceryList)
}
override fun onDestroy() {
@@ -97,11 +141,11 @@ class GroceryListActivity : AppCompatActivity(), GroceryListCallback {
}
alertDialog?.show()
}
-
+
override fun onLongClick(item: GroceryItem) {
val index = groceryItemList.indexOf(item)
- viewModel.deleteGroceryItem(item)
- adapter?.notifyItemRemoved(index)
+ viewModel.placeGroceryItemInCart(item)
+ adapter.notifyItemChanged(index)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt b/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt
index 510fd86..1acfbcf 100644
--- a/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt
+++ b/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt
@@ -1,9 +1,13 @@
package com.nlinterface.adapters
+import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
+import androidx.cardview.widget.CardView
+import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams
+import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.nlinterface.R
import com.nlinterface.dataclasses.GroceryItem
@@ -16,7 +20,8 @@ class GroceryListAdapter(
class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
- val groceryItemView: TextView = itemView.findViewById(R.id.grocery_item_tv)
+ val groceryItemTextView: TextView = itemView.findViewById(R.id.grocery_item_tv)
+ val groceryItemCardView: CardView = itemView.findViewById(R.id.grocery_item_cv)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
@@ -31,10 +36,21 @@ class GroceryListAdapter(
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val groceryItem: GroceryItem = data[position]
// Set item views based on your views and data model
- val textView = holder.groceryItemView
+ val textView = holder.groceryItemTextView
+ val cardView = holder.groceryItemCardView
+ val res = holder.itemView.resources
textView.text = groceryItem.itemName
- textView.setOnLongClickListener {
+ if (groceryItem.inCart) {
+ cardView.background.setTint(ContextCompat.getColor(holder.itemView.context, R.color.grey))
+ } else {
+ cardView.background.setTint(ContextCompat.getColor(holder.itemView.context, R.color.black))
+ }
+
+ textView.layoutParams.width = LayoutParams.WRAP_CONTENT
+ cardView.layoutParams.width = LayoutParams.WRAP_CONTENT
+
+ cardView.setOnLongClickListener {
groceryListCallback.onLongClick(data[position])
true
}
diff --git a/app/src/main/java/com/nlinterface/viewmodels/GroceryListViewModel.kt b/app/src/main/java/com/nlinterface/viewmodels/GroceryListViewModel.kt
index f565865..72936d3 100644
--- a/app/src/main/java/com/nlinterface/viewmodels/GroceryListViewModel.kt
+++ b/app/src/main/java/com/nlinterface/viewmodels/GroceryListViewModel.kt
@@ -47,6 +47,10 @@ class GroceryListViewModel (
groceryList.remove(groceryItem)
}
+ fun placeGroceryItemInCart(groceryItem: GroceryItem) {
+ groceryItem.inCart = !groceryItem.inCart
+ }
+
fun storeGroceryList() {
val jsonString : String = gson.toJson(groceryList)
groceryListFile.writeText(jsonString)
diff --git a/app/src/main/res/layout/activity_grocery_list.xml b/app/src/main/res/layout/activity_grocery_list.xml
index 66ee25f..9b831bc 100644
--- a/app/src/main/res/layout/activity_grocery_list.xml
+++ b/app/src/main/res/layout/activity_grocery_list.xml
@@ -30,12 +30,13 @@
android:insetBottom="0dp"
android:insetTop="0dp"
android:textSize="35dp"
- android:text="@string/add_item"
+ android:text="@string/add"
app:cornerRadius="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="1" />
+ app:layout_constraintVertical_bias="1"
+ app:layout_constraintHorizontal_bias="1"/>
\ No newline at end of file
diff --git a/app/src/main/res/layout/grocery_item.xml b/app/src/main/res/layout/grocery_item.xml
index f6165c0..8aef91c 100644
--- a/app/src/main/res/layout/grocery_item.xml
+++ b/app/src/main/res/layout/grocery_item.xml
@@ -7,11 +7,12 @@
xmlns:card_view="http://schemas.android.com/apk/res-auto">
#FFFFFFFF
#FF0000
#00FF00
+ #bcbcbc
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0ea4f73..66128ff 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -14,6 +14,5 @@
...
Tap to speak
Recognized speech will be written here
-
- Hello blank fragment
+
\ No newline at end of file
From 72a671cab5acf705710496120cf4422394194ca8 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Thu, 21 Sep 2023 13:22:04 +0200
Subject: [PATCH 04/23] MainActivity: Added Settings Button
resized buttons, enabled Activity switching to settings
---
app/build.gradle | 2 +-
.../nlinterface/activities/MainActivity.kt | 13 ++------
app/src/main/res/layout/activity_main.xml | 33 ++++++++++++++-----
3 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 4619553..08e36af 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -57,5 +57,5 @@ dependencies {
implementation 'com.google.code.gson:gson:2.8.5'
// Places API
- implementation 'com.google.android.libraries.places:places:3.1.0'
+ implementation 'com.google.android.libraries.places:places:3.2.0'
}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/activities/MainActivity.kt b/app/src/main/java/com/nlinterface/activities/MainActivity.kt
index 8bc545a..fa22f59 100644
--- a/app/src/main/java/com/nlinterface/activities/MainActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/MainActivity.kt
@@ -13,14 +13,6 @@ import android.widget.ImageButton
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
-import androidx.core.view.WindowCompat
-import com.google.android.gms.common.api.ApiException
-import com.google.android.gms.common.api.internal.ApiKey
-import com.google.android.libraries.places.api.Places
-import com.google.android.libraries.places.api.model.Place
-import com.google.android.libraries.places.api.net.FetchPlaceRequest
-import com.google.android.libraries.places.api.net.FetchPlaceResponse
-import com.nlinterface.BuildConfig
import com.nlinterface.R
import com.nlinterface.databinding.ActivityMainBinding
import com.nlinterface.utility.*
@@ -71,12 +63,11 @@ class MainActivity : AppCompatActivity() {
onAddVoiceActivationButtonClick()
}
- //TODO: main activity layout needs to be adjusted to show more buttons
- /*val settingsActivityButton: Button = findViewById(R.id.settings_bt) as Button
+ val settingsActivityButton: Button = findViewById(R.id.settings_bt) as Button
settingsActivityButton.setOnClickListener { view ->
val intent = Intent(view.context, SettingsActivity::class.java)
view.context.startActivity(intent)
- }*/
+ }
verifyAudioPermissions()
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index dc20b1e..00c2370 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -12,21 +12,21 @@
+ app:layout_constraintVertical_bias="1.0">
+
+
From adbe257734719b4870c1547a5c4f370c5bbec4d9 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Thu, 21 Sep 2023 13:47:04 +0200
Subject: [PATCH 05/23] adaptive text sizes
---
.../nlinterface/activities/MainActivity.kt | 4 +--
app/src/main/res/layout/activity_main.xml | 25 ++++++++++++++-----
app/src/main/res/layout/grocery_item.xml | 9 +++++--
app/src/main/res/values-de/strings.xml | 1 +
app/src/main/res/values/strings.xml | 1 +
5 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/com/nlinterface/activities/MainActivity.kt b/app/src/main/java/com/nlinterface/activities/MainActivity.kt
index fa22f59..1829b8f 100644
--- a/app/src/main/java/com/nlinterface/activities/MainActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/MainActivity.kt
@@ -44,8 +44,8 @@ class MainActivity : AppCompatActivity() {
view.context.startActivity(intent)
}
- val navigationActivityButton: Button = findViewById(R.id.navigation_bt) as Button
- navigationActivityButton.setOnClickListener { view ->
+ val placeDetailsButton: Button = findViewById(R.id.place_details_bt) as Button
+ placeDetailsButton.setOnClickListener { view ->
val intent = Intent(view.context, PlaceDetailsActivity::class.java)
view.context.startActivity(intent)
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 00c2370..3e61182 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -3,7 +3,8 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="match_parent"
+ tools:ignore="NamespaceTypo">
+ android:textSize="35sp"
+ android:gravity="center"
+ app:autoSizeTextType="uniform"
+ app:autoSizeMinTextSize="12sp"
+ app:autoSizeMaxTextSize="100sp"
+ app:autoSizeStepGranularity="2sp"/>
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 2ebf23d..3d533be 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -4,6 +4,7 @@
Einkaufsliste
Navigation
Ortung
+ Ort Details
Artikel hinzufügen
Hinzufügen
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9c04c0b..1784da9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -6,6 +6,7 @@
Motor Module
Navigation
Location
+ Place Details
Add Item
Add
Cancel
From 2375f5e967c74d3f455f4ea70388c62ffbe4c2f0 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sat, 14 Oct 2023 21:15:04 +0200
Subject: [PATCH 06/23] Implemented Recyclerview for Place Details
- Displays list of recent store search results with store name, today's opening hours and possibility to mark favorites
TODO:
- sort according to recent searches/favorites
- check if opening times correct
- display whether currently open or not
- delete (manually and after a certain duration)
- request more info on store (address, etc.)
---
.../activities/PlaceDetailsActivity.kt | 34 ++++++--
.../adapters/PlaceDetailsAdapter.kt | 69 +++++++++++++++++
.../dataclasses/PlaceDetailsItem.kt | 17 ++++
.../interfaces/PlaceDetailsItemCallback.kt | 6 ++
.../viewmodels/PlaceDetailsViewModel.kt | 51 ++++++++++--
.../main/res/drawable/ic_baseline_star_24.xml | 5 ++
.../drawable/ic_baseline_star_border_24.xml | 5 ++
.../res/layout/activity_place_details.xml | 77 +++++++++++--------
app/src/main/res/layout/place_detail_item.xml | 70 +++++++++++++++++
9 files changed, 288 insertions(+), 46 deletions(-)
create mode 100644 app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
create mode 100644 app/src/main/java/com/nlinterface/dataclasses/PlaceDetailsItem.kt
create mode 100644 app/src/main/java/com/nlinterface/interfaces/PlaceDetailsItemCallback.kt
create mode 100644 app/src/main/res/drawable/ic_baseline_star_24.xml
create mode 100644 app/src/main/res/drawable/ic_baseline_star_border_24.xml
create mode 100644 app/src/main/res/layout/place_detail_item.xml
diff --git a/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt b/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
index bcaa009..a1816f4 100644
--- a/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
@@ -8,31 +8,47 @@ import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
import com.google.android.gms.common.api.Status
import com.google.android.libraries.places.api.model.Place
import com.google.android.libraries.places.widget.AutocompleteSupportFragment
import com.google.android.libraries.places.widget.listener.PlaceSelectionListener
import com.google.android.material.button.MaterialButton
import com.nlinterface.R
+import com.nlinterface.adapters.GroceryListAdapter
+import com.nlinterface.adapters.PlaceDetailsAdapter
import com.nlinterface.databinding.ActivityPlaceDetailsBinding
+import com.nlinterface.dataclasses.PlaceDetailsItem
+import com.nlinterface.interfaces.PlaceDetailsItemCallback
import com.nlinterface.utility.setViewRelativeSize
import com.nlinterface.viewmodels.GroceryListViewModel
import com.nlinterface.viewmodels.PlaceDetailsViewModel
-class PlaceDetailsActivity: AppCompatActivity() {
+class PlaceDetailsActivity: AppCompatActivity(), PlaceDetailsItemCallback {
private lateinit var binding: ActivityPlaceDetailsBinding
private lateinit var viewModel: PlaceDetailsViewModel
+ private lateinit var placeDetailsItemList: ArrayList
+ private lateinit var adapter: PlaceDetailsAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this)[PlaceDetailsViewModel::class.java]
viewModel.initPlaceClient(this)
+ viewModel.fetchPlaceDetailsItemList()
binding = ActivityPlaceDetailsBinding.inflate(layoutInflater)
setContentView(binding.root)
+ val rvPlaceDetails = findViewById(R.id.place_details_rv) as RecyclerView
+ placeDetailsItemList = viewModel.placeDetailsItemList
+
+ adapter = PlaceDetailsAdapter(placeDetailsItemList, this)
+ rvPlaceDetails.adapter = adapter
+ rvPlaceDetails.layoutManager = LinearLayoutManager(this)
+
val voiceActivationButton = findViewById(R.id.voice_activation_bt) as ImageButton
setViewRelativeSize(voiceActivationButton, 1.0, 0.33)
@@ -45,6 +61,7 @@ class PlaceDetailsActivity: AppCompatActivity() {
// Specify the types of place data to return.
autocompleteFragment.setPlaceFields(listOf(Place.Field.ID))
+ autocompleteFragment.setTypesFilter(listOf("supermarket"))
// Set up a PlaceSelectionListener to handle the response.
autocompleteFragment.setOnPlaceSelectedListener(object : PlaceSelectionListener {
@@ -58,10 +75,17 @@ class PlaceDetailsActivity: AppCompatActivity() {
}
private fun loadInformation() {
- val nameField = findViewById(R.id.place_details_name_tv) as TextView
- val openingHoursField = findViewById(R.id.place_details_opening_hours_tv) as TextView
+ adapter.notifyItemInserted(placeDetailsItemList.size - 1)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ viewModel.storePlaceDetailsItemList()
+ }
- nameField.text = viewModel.getPlaceName()
- openingHoursField.text = viewModel.getPlaceOpeningHours().toString()
+ override fun onClick(item: PlaceDetailsItem) {
+ val index = placeDetailsItemList.indexOf(item)
+ viewModel.changeFavorite(item)
+ adapter.notifyItemChanged(index)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt b/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
new file mode 100644
index 0000000..37d5a44
--- /dev/null
+++ b/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
@@ -0,0 +1,69 @@
+package com.nlinterface.adapters
+
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.nlinterface.R
+import com.nlinterface.dataclasses.PlaceDetailsItem
+import com.nlinterface.interfaces.PlaceDetailsItemCallback
+import com.nlinterface.utility.setViewRelativeSize
+import com.nlinterface.utility.setViewRelativeWidth
+import java.text.SimpleDateFormat
+import java.time.LocalDateTime
+import java.util.Calendar
+
+class PlaceDetailsAdapter (
+ private val data: ArrayList,
+ private val placeDetailsItemCallback: PlaceDetailsItemCallback
+) : RecyclerView.Adapter() {
+
+ class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
+
+ val placeDetailsItemStoreNameTextView: TextView = itemView.findViewById(R.id.place_details_store_name_tv)
+ val placeDetailsItemOpeningHoursTextView: TextView = itemView.findViewById(R.id.place_details_opening_hours_tv)
+ val placeDetailsItemFavoriteImageView: ImageView = itemView.findViewById(R.id.place_details_favorite_iv)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val context = parent.context
+ val inflater = LayoutInflater.from(context)
+ val placeDetailsView = inflater.inflate(R.layout.place_detail_item, parent, false)
+
+ return ViewHolder(placeDetailsView)
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val placeDetailsItem: PlaceDetailsItem = data[position]
+
+ val storeNameTextView = holder.placeDetailsItemStoreNameTextView
+ val openingHoursTextView = holder.placeDetailsItemOpeningHoursTextView
+ val favoriteImageView = holder.placeDetailsItemFavoriteImageView
+
+ val res = holder.itemView.resources
+
+ storeNameTextView.text = placeDetailsItem.storeName
+
+ val dayOfWeek = (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 2) % 7
+ val regex = "\\ .+\\ ".toRegex()
+ val openingHoursText = regex.find(placeDetailsItem.openingHours[dayOfWeek])?.value
+ openingHoursTextView.text = openingHoursText
+
+ if (placeDetailsItem.favorite) {
+ favoriteImageView.setImageResource(R.drawable.ic_baseline_star_24)
+ }
+
+ favoriteImageView.setOnClickListener {
+ placeDetailsItemCallback.onClick(data[position])
+ true
+ }
+ }
+
+ override fun getItemCount(): Int {
+ return data.size
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/dataclasses/PlaceDetailsItem.kt b/app/src/main/java/com/nlinterface/dataclasses/PlaceDetailsItem.kt
new file mode 100644
index 0000000..ae1d3a3
--- /dev/null
+++ b/app/src/main/java/com/nlinterface/dataclasses/PlaceDetailsItem.kt
@@ -0,0 +1,17 @@
+package com.nlinterface.dataclasses
+
+import android.os.Parcelable
+import com.google.android.libraries.places.api.model.OpeningHours
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
+data class PlaceDetailsItem(
+
+ val placeID: String,
+ val storeName: String,
+ val openingHours: List,
+ var favorite: Boolean
+
+): Parcelable {
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/interfaces/PlaceDetailsItemCallback.kt b/app/src/main/java/com/nlinterface/interfaces/PlaceDetailsItemCallback.kt
new file mode 100644
index 0000000..c4e70d8
--- /dev/null
+++ b/app/src/main/java/com/nlinterface/interfaces/PlaceDetailsItemCallback.kt
@@ -0,0 +1,6 @@
+package com.nlinterface.interfaces
+import com.nlinterface.dataclasses.PlaceDetailsItem
+
+interface PlaceDetailsItemCallback {
+ fun onClick(item: PlaceDetailsItem)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt b/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
index 690310c..35d33ef 100644
--- a/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
+++ b/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
@@ -7,18 +7,52 @@ import androidx.lifecycle.AndroidViewModel
import com.google.android.gms.common.api.ApiException
import com.google.android.gms.common.api.Status
import com.google.android.libraries.places.api.Places
+import com.google.android.libraries.places.api.model.OpeningHours
import com.google.android.libraries.places.api.model.Place
import com.google.android.libraries.places.api.net.FetchPlaceRequest
import com.google.android.libraries.places.api.net.FetchPlaceResponse
import com.google.android.libraries.places.api.net.PlacesClient
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
import com.nlinterface.BuildConfig
+import com.nlinterface.dataclasses.GroceryItem
+import com.nlinterface.dataclasses.PlaceDetailsItem
import kotlinx.coroutines.CompletionHandler
+import java.io.BufferedReader
+import java.io.File
class PlaceDetailsViewModel(application: Application) : AndroidViewModel(application) {
private val context = application
private lateinit var placesClient: PlacesClient
- private lateinit var place: Place
+
+ private val placeDetailsItemListFileName = "PlaceDetailsItemList.json"
+ private val placeDetailsItemListFile: File = File(context.filesDir, placeDetailsItemListFileName)
+ var placeDetailsItemList: ArrayList = ArrayList ()
+ var gson = Gson()
+
+ fun fetchPlaceDetailsItemList() {
+
+ if (!placeDetailsItemListFile.exists()) {
+ placeDetailsItemListFile.createNewFile()
+ }
+
+ if (placeDetailsItemListFile.length() > 0) {
+ val bufferedReader: BufferedReader = placeDetailsItemListFile.bufferedReader()
+ val inputString = bufferedReader.use { it.readText() }
+ placeDetailsItemList = gson.fromJson(
+ inputString,
+ object : TypeToken?>() {}.type
+ ) as ArrayList
+ }
+
+ Log.println(Log.DEBUG, "1", placeDetailsItemList.toString())
+ }
+
+ private fun addPlaceDetailsItem(placeID: String, storeName: String, openingHours: List): ArrayList {
+ placeDetailsItemList.add(PlaceDetailsItem(placeID, storeName, openingHours, favorite = false))
+ return placeDetailsItemList
+ }
fun initPlaceClient(context: Context) {
Places.initialize(context, BuildConfig.MAPS_API_KEY)
@@ -45,7 +79,7 @@ class PlaceDetailsViewModel(application: Application) : AndroidViewModel(applica
if (request != null) {
placesClient.fetchPlace(request)
.addOnSuccessListener { response: FetchPlaceResponse ->
- place = response.place
+ addPlaceDetailsItem(placeID, response.place.name, response.place.openingHours.weekdayText)
completion(true)
}.addOnFailureListener { exception: Exception ->
if (exception is ApiException) {
@@ -56,16 +90,17 @@ class PlaceDetailsViewModel(application: Application) : AndroidViewModel(applica
}
}
- fun getPlaceName(): String {
- return place.name.toString()
+ fun onError(status: Status) {
+ // TODO
}
- fun getPlaceOpeningHours(): MutableList {
- return place.openingHours.weekdayText
+ fun storePlaceDetailsItemList() {
+ val jsonString : String = gson.toJson(placeDetailsItemList)
+ placeDetailsItemListFile.writeText(jsonString)
}
- fun onError(status: Status) {
- // TODO
+ fun changeFavorite(item: PlaceDetailsItem) {
+ item.favorite = !item.favorite
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_baseline_star_24.xml b/app/src/main/res/drawable/ic_baseline_star_24.xml
new file mode 100644
index 0000000..09a5c51
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_star_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_baseline_star_border_24.xml b/app/src/main/res/drawable/ic_baseline_star_border_24.xml
new file mode 100644
index 0000000..26107f5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_star_border_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_place_details.xml b/app/src/main/res/layout/activity_place_details.xml
index 67b3a41..7e83ac1 100644
--- a/app/src/main/res/layout/activity_place_details.xml
+++ b/app/src/main/res/layout/activity_place_details.xml
@@ -21,48 +21,59 @@
app:layout_constraintVertical_bias="0.0"
tools:layout="@layout/places_autocomplete_fragment" />
-
+ app:layout_constraintTop_toBottomOf="@+id/autocomplete_fragment"
+ app:layout_constraintVertical_bias="0.0" />
-
-
+
-
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/place_detail_item.xml b/app/src/main/res/layout/place_detail_item.xml
new file mode 100644
index 0000000..8dc424f
--- /dev/null
+++ b/app/src/main/res/layout/place_detail_item.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From 3f789210f209926819c0253e380935725168d12a Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 15 Oct 2023 17:59:51 +0200
Subject: [PATCH 07/23] Made Layout of MainActivity relative to Display Size
---
app/src/main/res/layout/activity_main.xml | 176 +++++++++++++---------
1 file changed, 107 insertions(+), 69 deletions(-)
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 3e61182..ca4d855 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -10,79 +10,117 @@
android:id="@+id/voice_activation_lo"
layout="@layout/voice_activation_button" />
-
+ android:backgroundTint="@color/black"
+ android:paddingVertical="10dp"
+ android:text="@string/grocery_list"
+ android:textSize="45sp"
+ app:autoSizeTextType="uniform"
+ app:autoSizeMinTextSize="12sp"
+ app:autoSizeMaxTextSize="100sp"
+ app:autoSizeStepGranularity="2sp"
+ app:cornerRadius="13dp"
+ app:layout_constraintEnd_toEndOf="@id/v_guide2"
+ app:layout_constraintStart_toStartOf="@id/v_guide1"
+ app:layout_constraintTop_toTopOf="@id/h_guide1"
+ app:layout_constraintBottom_toBottomOf="@id/h_guide2"
+ app:strokeWidth="0dp" />
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
\ No newline at end of file
From e0caade1e653f46467c0b153f58fc30d5598b345 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 15 Oct 2023 18:00:22 +0200
Subject: [PATCH 08/23] Made Layout of GroceryListActivity relative to Display
size
---
.../main/res/layout/activity_grocery_list.xml | 21 +++++++--
app/src/main/res/layout/grocery_item.xml | 45 ++++++++++++-------
2 files changed, 46 insertions(+), 20 deletions(-)
diff --git a/app/src/main/res/layout/activity_grocery_list.xml b/app/src/main/res/layout/activity_grocery_list.xml
index 9b831bc..c24d7e9 100644
--- a/app/src/main/res/layout/activity_grocery_list.xml
+++ b/app/src/main/res/layout/activity_grocery_list.xml
@@ -12,14 +12,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/grocery_item.xml b/app/src/main/res/layout/grocery_item.xml
index 5f586d6..924062f 100644
--- a/app/src/main/res/layout/grocery_item.xml
+++ b/app/src/main/res/layout/grocery_item.xml
@@ -1,40 +1,53 @@
+ android:layout_height="wrap_content">
+ app:layout_constraintTop_toTopOf="@id/h_guide1"
+ app:strokeWidth="0dp"
+ card_view:cardCornerRadius="13dp">
+
+
+
+
+
From 998bc631659fe5eb2a5aa26298f641adca12ff3b Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 15 Oct 2023 18:00:58 +0200
Subject: [PATCH 09/23] Made layout of PlaceDetailsActivity relative to display
size
---
.../res/layout/activity_place_details.xml | 48 +------------------
app/src/main/res/layout/place_detail_item.xml | 47 ++++++++++++++----
2 files changed, 38 insertions(+), 57 deletions(-)
diff --git a/app/src/main/res/layout/activity_place_details.xml b/app/src/main/res/layout/activity_place_details.xml
index 7e83ac1..ebf7188 100644
--- a/app/src/main/res/layout/activity_place_details.xml
+++ b/app/src/main/res/layout/activity_place_details.xml
@@ -28,52 +28,6 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/autocomplete_fragment"
- app:layout_constraintVertical_bias="0.0" />
-
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/autocomplete_fragment" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/place_detail_item.xml b/app/src/main/res/layout/place_detail_item.xml
index 8dc424f..e0fac68 100644
--- a/app/src/main/res/layout/place_detail_item.xml
+++ b/app/src/main/res/layout/place_detail_item.xml
@@ -4,19 +4,17 @@
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginHorizontal="10dp">
+ android:layout_height="wrap_content">
@@ -24,7 +22,7 @@
android:id="@+id/cv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:padding="30dp">
+ android:padding="20dp">
+ app:layout_constraintStart_toEndOf="@id/guideline4"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.5" />
+
+
+
+
+
+
+
\ No newline at end of file
From f8855786d5f4d7fae4d7351dcbb77b65c19b6281 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 15 Oct 2023 18:01:33 +0200
Subject: [PATCH 10/23] Fixed Bug
language specific opening hours
---
.../com/nlinterface/adapters/PlaceDetailsAdapter.kt | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt b/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
index 37d5a44..d412f53 100644
--- a/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
+++ b/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
@@ -41,15 +41,21 @@ class PlaceDetailsAdapter (
val storeNameTextView = holder.placeDetailsItemStoreNameTextView
val openingHoursTextView = holder.placeDetailsItemOpeningHoursTextView
+
+ Log.println(Log.DEBUG, "openinghours", placeDetailsItem.openingHours.toString())
val favoriteImageView = holder.placeDetailsItemFavoriteImageView
val res = holder.itemView.resources
storeNameTextView.text = placeDetailsItem.storeName
- val dayOfWeek = (Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 2) % 7
- val regex = "\\ .+\\ ".toRegex()
+ val dayOfWeek = Math.floorMod(Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 2, 7)
+
+ val regex = "(?<=: \\[?)(\\w:?–? ?ö?)+( ?–?\\d?:?)+".toRegex()
+ //val regex = "(?<=:\\s\\[)[\\d:– ]*(?=.*\\])|(?<=:\\s)[^\\[\\n]*".toRegex()
+ Log.println(Log.DEBUG, "regex", regex.toString())
val openingHoursText = regex.find(placeDetailsItem.openingHours[dayOfWeek])?.value
+ Log.println(Log.DEBUG, "openinghourstext", openingHoursText.toString())
openingHoursTextView.text = openingHoursText
if (placeDetailsItem.favorite) {
@@ -58,8 +64,8 @@ class PlaceDetailsAdapter (
favoriteImageView.setOnClickListener {
placeDetailsItemCallback.onClick(data[position])
- true
}
+
}
override fun getItemCount(): Int {
From f29d16b499e052ebe719acd92fe364b2d0e3c03c Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 15 Oct 2023 19:43:42 +0200
Subject: [PATCH 11/23] Reworked SettingsActivity Layout and made adaptable to
all display sizes
---
.../activities/SettingsActivity.kt | 6 +-
app/src/main/res/layout/activity_settings.xml | 113 ++++++++++++------
app/src/main/res/values-de/strings.xml | 12 +-
app/src/main/res/values/strings.xml | 12 +-
4 files changed, 96 insertions(+), 47 deletions(-)
diff --git a/app/src/main/java/com/nlinterface/activities/SettingsActivity.kt b/app/src/main/java/com/nlinterface/activities/SettingsActivity.kt
index a6d2fb7..4f5851e 100644
--- a/app/src/main/java/com/nlinterface/activities/SettingsActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/SettingsActivity.kt
@@ -3,14 +3,17 @@ package com.nlinterface.activities
import android.content.Context
import android.os.Bundle
import android.provider.Settings.Global
+import android.view.View
import android.view.WindowManager
import android.widget.Button
+import android.widget.ImageButton
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.nlinterface.R
import com.nlinterface.databinding.ActivitySettingsBinding
import com.nlinterface.utility.GlobalParameters
+import com.nlinterface.utility.setViewRelativeSize
class SettingsActivity : AppCompatActivity() {
@@ -49,7 +52,8 @@ class SettingsActivity : AppCompatActivity() {
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
- header = findViewById(R.id.header)
+ val voiceActivationButton = findViewById(R.id.voice_activation_bt) as ImageButton
+ setViewRelativeSize(voiceActivationButton, 1.0, 0.33)
/*impairmentOptions = mutableListOf()
resources.getStringArray(R.array.impairment_options).forEach { option ->
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index 4715038..efc80df 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -5,45 +5,86 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
-
-
+
+
+ app:cornerRadius="13dp"
+ app:autoSizeTextType="uniform"
+ app:autoSizeMinTextSize="12sp"
+ app:autoSizeMaxTextSize="100sp"
+ app:autoSizeStepGranularity="2sp"
+ app:layout_constraintBottom_toTopOf="@+id/h_guide2"
+ app:layout_constraintEnd_toStartOf="@+id/v_guide2"
+ app:layout_constraintStart_toStartOf="@+id/v_guide1"
+ app:layout_constraintTop_toTopOf="@+id/h_guide1" />
-
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ app:cornerRadius="13dp"
+ app:autoSizeTextType="uniform"
+ app:autoSizeMinTextSize="12sp"
+ app:autoSizeMaxTextSize="100sp"
+ app:autoSizeStepGranularity="2sp"
+ app:layout_constraintBottom_toTopOf="@+id/h_guide4"
+ app:layout_constraintEnd_toStartOf="@+id/v_guide2"
+ app:layout_constraintStart_toStartOf="@+id/v_guide1"
+ app:layout_constraintTop_toTopOf="@+id/h_guide3" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 3d533be..e6d751b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -51,12 +51,16 @@
- Button
- Sprachbefehl
- Bildschirm anlassen
+ Bilderschirm Anlassen
+
+ - Bildschirm Immer Anlasssen
+ - Bildschirm Nicht Immer Anlassen
+
Design
- - Standard
- - hell
- - dunkel
+ - Standard Design
+ - Helles Design
+ - Dunkeles Design
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1784da9..a87c620 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -65,17 +65,17 @@
- hands-free voice command
- Keep screen on
+ Keep Screen On
- - keep screen always on
- - do not keep screen always on
+ - Keep Screen Always On
+ - Do Not Keep Screen Always On
Theme
- - system default theme
- - light theme
- - dark theme
+ - System Default Theme
+ - Light Theme
+ - Dark Theme
Enter angle
Calculate
From ef23cceb28b6cea9dc62a00595ea6b33e2f92b26 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 15 Oct 2023 21:26:45 +0200
Subject: [PATCH 12/23] Fixed onLongClick after deleting an item
---
.../main/java/com/nlinterface/adapters/GroceryListAdapter.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt b/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt
index 1acfbcf..acb666e 100644
--- a/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt
+++ b/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt
@@ -51,7 +51,7 @@ class GroceryListAdapter(
cardView.layoutParams.width = LayoutParams.WRAP_CONTENT
cardView.setOnLongClickListener {
- groceryListCallback.onLongClick(data[position])
+ groceryListCallback.onLongClick(data[holder.adapterPosition])
true
}
}
From f9c0596123d692e9c2db30ebe59af3681aa47e7e Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 15 Oct 2023 21:27:42 +0200
Subject: [PATCH 13/23] Added delete feature to PlaceDetails
---
.../activities/PlaceDetailsActivity.kt | 46 +++++++++++++++++--
.../viewmodels/PlaceDetailsViewModel.kt | 7 ++-
2 files changed, 48 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt b/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
index a1816f4..6ae3333 100644
--- a/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
@@ -8,6 +8,7 @@ import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
+import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.gms.common.api.Status
@@ -19,6 +20,7 @@ import com.nlinterface.R
import com.nlinterface.adapters.GroceryListAdapter
import com.nlinterface.adapters.PlaceDetailsAdapter
import com.nlinterface.databinding.ActivityPlaceDetailsBinding
+import com.nlinterface.dataclasses.GroceryItem
import com.nlinterface.dataclasses.PlaceDetailsItem
import com.nlinterface.interfaces.PlaceDetailsItemCallback
import com.nlinterface.utility.setViewRelativeSize
@@ -69,13 +71,49 @@ class PlaceDetailsActivity: AppCompatActivity(), PlaceDetailsItemCallback {
viewModel.onError(status)
}
override fun onPlaceSelected(place: Place) {
- viewModel.onPlaceSelected(place) { if (it) loadInformation() }
+ viewModel.onPlaceSelected(place) { if (it) adapter.notifyItemInserted(placeDetailsItemList.size - 1) }
}
})
- }
- private fun loadInformation() {
- adapter.notifyItemInserted(placeDetailsItemList.size - 1)
+ ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(
+ 0, ItemTouchHelper.LEFT
+ ) {
+ override fun onMove(
+ recyclerView: RecyclerView,
+ viewHolder: RecyclerView.ViewHolder,
+ target: RecyclerView.ViewHolder
+ ): Boolean {return false}
+
+ override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
+ val placeDetailsItem: PlaceDetailsItem =
+ placeDetailsItemList[viewHolder.adapterPosition]
+
+ val index = viewHolder.adapterPosition
+
+ viewModel.deletePlaceDetailsItem(placeDetailsItem)
+ adapter.notifyItemRemoved(index)
+ }
+ }).attachToRecyclerView(rvPlaceDetails)
+
+ ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(
+ 0, ItemTouchHelper.RIGHT
+ ) {
+ override fun onMove(
+ recyclerView: RecyclerView,
+ viewHolder: RecyclerView.ViewHolder,
+ target: RecyclerView.ViewHolder
+ ): Boolean {return false}
+
+ override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
+ val placeDetailsItem: PlaceDetailsItem =
+ placeDetailsItemList[viewHolder.adapterPosition]
+
+ val index = viewHolder.adapterPosition
+
+ viewModel.deletePlaceDetailsItem(placeDetailsItem)
+ adapter.notifyItemRemoved(index)
+ }
+ }).attachToRecyclerView(rvPlaceDetails)
}
override fun onDestroy() {
diff --git a/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt b/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
index 35d33ef..31d1a48 100644
--- a/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
+++ b/app/src/main/java/com/nlinterface/viewmodels/PlaceDetailsViewModel.kt
@@ -50,7 +50,7 @@ class PlaceDetailsViewModel(application: Application) : AndroidViewModel(applica
}
private fun addPlaceDetailsItem(placeID: String, storeName: String, openingHours: List): ArrayList {
- placeDetailsItemList.add(PlaceDetailsItem(placeID, storeName, openingHours, favorite = false))
+ placeDetailsItemList.add(PlaceDetailsItem(placeID, storeName, openingHours, false))
return placeDetailsItemList
}
@@ -103,4 +103,9 @@ class PlaceDetailsViewModel(application: Application) : AndroidViewModel(applica
item.favorite = !item.favorite
}
+ fun deletePlaceDetailsItem(placeDetailsItem: PlaceDetailsItem): ArrayList {
+ placeDetailsItemList.remove(placeDetailsItem)
+ return placeDetailsItemList
+ }
+
}
\ No newline at end of file
From e7bb46f337588edd3c14d7e60ac90eb365719419 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Mon, 16 Oct 2023 11:12:52 +0200
Subject: [PATCH 14/23] minor fixes
---
.../main/java/com/nlinterface/activities/MainActivity.kt | 6 ------
.../java/com/nlinterface/adapters/PlaceDetailsAdapter.kt | 3 ++-
2 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/app/src/main/java/com/nlinterface/activities/MainActivity.kt b/app/src/main/java/com/nlinterface/activities/MainActivity.kt
index 1829b8f..896934a 100644
--- a/app/src/main/java/com/nlinterface/activities/MainActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/MainActivity.kt
@@ -50,12 +50,6 @@ class MainActivity : AppCompatActivity() {
view.context.startActivity(intent)
}
- /*val MotorModuleButton: Button = findViewById(R.id.motor_module_bt) as Button
- navigationActivityButton.setOnClickListener { view ->
- val intent = Intent(view.context, NavigationActivity::class.java)
- view.context.startActivity(intent)
- }*/
-
val voiceActivationButton = findViewById(R.id.voice_activation_bt) as ImageButton
setViewRelativeSize(voiceActivationButton, 1.0, 0.33)
diff --git a/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt b/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
index d412f53..38223c3 100644
--- a/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
+++ b/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
@@ -63,7 +63,8 @@ class PlaceDetailsAdapter (
}
favoriteImageView.setOnClickListener {
- placeDetailsItemCallback.onClick(data[position])
+ placeDetailsItemCallback.onClick(data[holder.adapterPosition])
+ true
}
}
From 020f9509bfefaf9cabf9ed0048fcc23cd543ef2a Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sat, 28 Oct 2023 18:04:45 +0200
Subject: [PATCH 15/23] tidied up
---
app/src/main/AndroidManifest.xml | 6 -
.../activities/GroceryListActivity.kt | 8 +-
.../activities/LocationActivity.kt | 114 ------------------
.../activities/NextActivityExample.kt | 32 -----
.../activities/SavedLocationsDataSource.kt | 5 -
.../{activities => utility}/MotorModule.kt | 2 +-
.../java/com/nlinterface/utility/utils.kt | 7 ++
app/src/main/res/layout/activity_location.xml | 65 ----------
.../main/res/layout/activity_motor_module.xml | 2 +-
...d_item_dialog.xml => edit_text_dialog.xml} | 4 +-
app/src/main/res/values-de/strings.xml | 3 +
app/src/main/res/values/strings.xml | 3 +
12 files changed, 19 insertions(+), 232 deletions(-)
delete mode 100644 app/src/main/java/com/nlinterface/activities/LocationActivity.kt
delete mode 100644 app/src/main/java/com/nlinterface/activities/NextActivityExample.kt
delete mode 100644 app/src/main/java/com/nlinterface/activities/SavedLocationsDataSource.kt
rename app/src/main/java/com/nlinterface/{activities => utility}/MotorModule.kt (97%)
delete mode 100644 app/src/main/res/layout/activity_location.xml
rename app/src/main/res/layout/{add_item_dialog.xml => edit_text_dialog.xml} (89%)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02d3a34..40322fd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -39,12 +39,6 @@
-
-
-
- val addItemEt = view.findViewById(R.id.add_item_et)
+ val addItemEt = view.findViewById(R.id.et)
val newItemName = addItemEt.text.toString()
viewModel.addGroceryItem(newItemName)
diff --git a/app/src/main/java/com/nlinterface/activities/LocationActivity.kt b/app/src/main/java/com/nlinterface/activities/LocationActivity.kt
deleted file mode 100644
index 2bdd2ec..0000000
--- a/app/src/main/java/com/nlinterface/activities/LocationActivity.kt
+++ /dev/null
@@ -1,114 +0,0 @@
-package com.nlinterface.activities
-
-import android.Manifest
-import android.annotation.SuppressLint
-import android.content.ActivityNotFoundException
-import android.content.Context
-import android.content.Intent
-import android.content.pm.PackageManager
-import android.location.Location
-import android.location.LocationListener
-import android.location.LocationManager
-import android.net.Uri
-import android.os.Bundle
-import android.view.WindowManager
-import android.widget.Button
-import android.widget.TextView
-import android.widget.Toast
-import androidx.appcompat.app.AppCompatActivity
-import androidx.core.app.ActivityCompat
-import androidx.core.content.ContextCompat
-import com.nlinterface.R
-import com.nlinterface.utility.GlobalParameters
-
-
-class LocationActivity : AppCompatActivity(), LocationListener {
-
- private lateinit var locationManager: LocationManager
- private lateinit var tvGpsLocation: TextView
- private val locationPermissionCode = 2
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
-
- // process keep screen on settings
- if (GlobalParameters.instance!!.keepScreenOnSwitch == GlobalParameters.KeepScreenOn.YES) {
- window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- } else {
- window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- }
-
- setContentView(R.layout.activity_location)
- title = "Location App"
-
- // If Get Location button is click, run getLocation()
- val getLocationButton: Button = findViewById(R.id.getLocation)
- getLocationButton.setOnClickListener {
- getLocation()
- }
- }
-
- private fun getLocation() {
-
- // Get the location manager
- locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
-
- // If location tracking permission is not granted yet, ask for permission
- if ((ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) {
- ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), locationPermissionCode)
- }
-
- // Requests location
- // Can be updated after 5s and if the distance to the previous locations is more than 5m?
- locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5f, this)
- }
-
- // Display the coordinates in the app
- @SuppressLint("SetTextI18n")
- override fun onLocationChanged(location: Location) {
- tvGpsLocation = findViewById(R.id.textView)
- tvGpsLocation.text = "Latitude: " + location.latitude + "\nLongitude: " + location.longitude
-
- // When the Google Maps button is clicked, the current location data will be
- // opened in Google Maps
- val googleMapsBtn: Button = findViewById(R.id.googleMapsLocationBtn)
- googleMapsBtn.setOnClickListener {
-
- // Open Google Maps with specific location data
- val uri = "http://maps.google.com/maps?daddr=" + location.latitude + ", " + location.longitude
-
- val intent = Intent(Intent.ACTION_VIEW, Uri.parse(uri))
- intent.setPackage("com.google.android.apps.maps")
-
- // try to open Google maps, if not installed, show please install message
- try {
- startActivity(intent)
- } catch (ex: ActivityNotFoundException) {
- try {
- val unrestrictedIntent = Intent(Intent.ACTION_VIEW, Uri.parse(uri))
- startActivity(unrestrictedIntent)
- } catch (innerEx: ActivityNotFoundException) {
- Toast.makeText(this, "Please install a maps application", Toast.LENGTH_LONG).show()
- }
- }
- }
-
- }
-
- // TO DO understand code and describe it
- override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
-
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
-
- if (requestCode == locationPermissionCode) {
-
- if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show()
- }
-
- else {
- Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show()
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/activities/NextActivityExample.kt b/app/src/main/java/com/nlinterface/activities/NextActivityExample.kt
deleted file mode 100644
index 8cc29d3..0000000
--- a/app/src/main/java/com/nlinterface/activities/NextActivityExample.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.nlinterface.activities
-
-import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import android.view.WindowManager
-import android.widget.Button
-import androidx.appcompat.app.AppCompatActivity
-import androidx.core.view.WindowCompat
-import com.nlinterface.databinding.ActivityMainBinding
-import com.nlinterface.databinding.ActivityNextActivityExampleBinding
-import com.nlinterface.utility.GlobalParameters
-
-class NextActivityExample : AppCompatActivity() {
-
- private lateinit var binding: ActivityNextActivityExampleBinding
-
- override fun onCreate(savedInstanceState: Bundle?) {
- WindowCompat.setDecorFitsSystemWindows(window, false)
- super.onCreate(savedInstanceState)
-
- binding = ActivityNextActivityExampleBinding.inflate(layoutInflater)
- setContentView(binding.root)
-
- // process keep screen on settings
- if (GlobalParameters.instance!!.keepScreenOnSwitch == GlobalParameters.KeepScreenOn.YES) {
- window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- } else {
- window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/activities/SavedLocationsDataSource.kt b/app/src/main/java/com/nlinterface/activities/SavedLocationsDataSource.kt
deleted file mode 100644
index 23249ab..0000000
--- a/app/src/main/java/com/nlinterface/activities/SavedLocationsDataSource.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.nlinterface.activities
-
-class SavedLocationsDataSource {
- val savedLocations: MutableList = mutableListOf()
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/activities/MotorModule.kt b/app/src/main/java/com/nlinterface/utility/MotorModule.kt
similarity index 97%
rename from app/src/main/java/com/nlinterface/activities/MotorModule.kt
rename to app/src/main/java/com/nlinterface/utility/MotorModule.kt
index 044e9e9..b007827 100644
--- a/app/src/main/java/com/nlinterface/activities/MotorModule.kt
+++ b/app/src/main/java/com/nlinterface/utility/MotorModule.kt
@@ -1,4 +1,4 @@
-package com.nlinterface.activities
+package com.nlinterface.utility
import android.os.Bundle
import android.widget.Button
diff --git a/app/src/main/java/com/nlinterface/utility/utils.kt b/app/src/main/java/com/nlinterface/utility/utils.kt
index 4ba55d6..f637142 100644
--- a/app/src/main/java/com/nlinterface/utility/utils.kt
+++ b/app/src/main/java/com/nlinterface/utility/utils.kt
@@ -1,8 +1,15 @@
package com.nlinterface.utility
import android.content.res.Resources
+import android.os.Parcelable
+import android.util.Log
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
+import com.google.gson.Gson
+import com.google.gson.reflect.TypeToken
+import com.nlinterface.dataclasses.GroceryItem
+import java.io.BufferedReader
+import java.io.File
fun setViewRelativeWidth(view: View, relWidth: Double) {
val width: Int = (Resources.getSystem().displayMetrics.widthPixels * relWidth).toInt()
diff --git a/app/src/main/res/layout/activity_location.xml b/app/src/main/res/layout/activity_location.xml
deleted file mode 100644
index f5d8d19..0000000
--- a/app/src/main/res/layout/activity_location.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_motor_module.xml b/app/src/main/res/layout/activity_motor_module.xml
index 9cfed5d..ad92191 100644
--- a/app/src/main/res/layout/activity_motor_module.xml
+++ b/app/src/main/res/layout/activity_motor_module.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context="activities.MotorModule">
+ tools:context=".utility.MotorModule">
+ android:id="@+id/edit_text_dialog">
...
+ Suche
+ Suche nach Supermarkt
+
Tippe zum Sprechen
Erkannte Sprache wird hier zu sehen sein
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index a87c620..7ca352f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -13,6 +13,9 @@
Add a New Grocery Item
This is an example of another activity.
+ Search
+ Search for Grocery Store
+
Next Activity (Example)
...
From aebe6fd56af51e4d2199842da92c08690ca3ce0d Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 29 Oct 2023 14:19:07 +0100
Subject: [PATCH 16/23] Fully working light/dark modes
---
.../activities/GroceryListActivity.kt | 17 +++++--
.../adapters/GroceryListAdapter.kt | 22 +++++++--
.../java/com/nlinterface/utility/utils.kt | 5 +-
.../main/res/drawable/ic_baseline_star_24.xml | 2 +-
.../drawable/ic_baseline_star_border_24.xml | 2 +-
.../main/res/layout/activity_grocery_list.xml | 3 +-
app/src/main/res/layout/activity_main.xml | 9 ++--
app/src/main/res/layout/activity_settings.xml | 5 ++
app/src/main/res/layout/edit_text_dialog.xml | 10 +++-
app/src/main/res/layout/grocery_item.xml | 5 +-
app/src/main/res/layout/place_detail_item.xml | 7 +--
app/src/main/res/values-night/themes.xml | 17 ++++++-
app/src/main/res/values/colors.xml | 4 +-
app/src/main/res/values/themes.xml | 47 ++++++++++++++++++-
14 files changed, 128 insertions(+), 27 deletions(-)
diff --git a/app/src/main/java/com/nlinterface/activities/GroceryListActivity.kt b/app/src/main/java/com/nlinterface/activities/GroceryListActivity.kt
index 2a40ed6..c44f724 100644
--- a/app/src/main/java/com/nlinterface/activities/GroceryListActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/GroceryListActivity.kt
@@ -1,6 +1,5 @@
package com.nlinterface.activities
-import android.app.AlertDialog
import android.os.Bundle
import android.util.Log
import android.view.View
@@ -8,12 +7,15 @@ import android.view.WindowManager
import android.widget.Button
import android.widget.EditText
import android.widget.ImageButton
+import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import com.google.android.material.dialog.MaterialDialogs
import com.nlinterface.R
import com.nlinterface.adapters.GroceryListAdapter
import com.nlinterface.databinding.ActivityGroceryListBinding
@@ -126,9 +128,11 @@ class GroceryListActivity : AppCompatActivity(), GroceryListCallback {
private fun onAddItemButtonClick() {
- val alertDialog: AlertDialog? = this?.let {
- val builder = AlertDialog.Builder(it)
+ val alertDialog: AlertDialog = this.let {
+ val builder = MaterialAlertDialogBuilder(it, R.style.ThemeOverlay_MaterialComponents_MaterialAlertDialog_Background)
+
val view = layoutInflater.inflate(R.layout.edit_text_dialog, null)
+
builder.setView(view)
builder.apply {
setPositiveButton(R.string.add) { _, _ ->
@@ -143,12 +147,15 @@ class GroceryListActivity : AppCompatActivity(), GroceryListCallback {
setNegativeButton(R.string.cancel) { _, _ -> }
}
// Set other dialog properties
- builder.setMessage(R.string.add_new_grocery_item)
+ builder.setTitle(R.string.add_new_grocery_item)
// Create the AlertDialog
builder.create()
}
- alertDialog?.show()
+ alertDialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
+ alertDialog.show()
}
+
+
override fun onLongClick(item: GroceryItem) {
val index = groceryItemList.indexOf(item)
diff --git a/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt b/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt
index acb666e..87304d4 100644
--- a/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt
+++ b/app/src/main/java/com/nlinterface/adapters/GroceryListAdapter.kt
@@ -1,6 +1,6 @@
package com.nlinterface.adapters
-import android.graphics.Color
+import android.content.res.TypedArray
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@@ -13,11 +13,14 @@ import com.nlinterface.R
import com.nlinterface.dataclasses.GroceryItem
import com.nlinterface.interfaces.GroceryListCallback
+
class GroceryListAdapter(
private val data: ArrayList,
- private val groceryListCallback: GroceryListCallback
+ private val groceryListCallback: GroceryListCallback,
) : RecyclerView.Adapter() {
+ private lateinit var parent: ViewGroup
+
class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
val groceryItemTextView: TextView = itemView.findViewById(R.id.grocery_item_tv)
@@ -26,7 +29,8 @@ class GroceryListAdapter(
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
- val context = parent.context
+ this.parent = parent
+ val context = this.parent.context
val inflater = LayoutInflater.from(context)
val groceryItemView = inflater.inflate(R.layout.grocery_item, parent, false)
@@ -42,9 +46,17 @@ class GroceryListAdapter(
textView.text = groceryItem.itemName
if (groceryItem.inCart) {
- cardView.background.setTint(ContextCompat.getColor(holder.itemView.context, R.color.grey))
+ val attrs = intArrayOf(androidx.appcompat.R.attr.colorAccent)
+ val ta: TypedArray = parent.context.obtainStyledAttributes(attrs)
+ val color = ta.getResourceId(0, android.R.color.white)
+ ta.recycle()
+ cardView.background.setTint(ContextCompat.getColor(holder.itemView.context, color))
} else {
- cardView.background.setTint(ContextCompat.getColor(holder.itemView.context, R.color.black))
+ val attrs = intArrayOf(androidx.appcompat.R.attr.colorPrimary)
+ val ta: TypedArray = parent.context.obtainStyledAttributes(attrs)
+ val color = ta.getResourceId(0, android.R.color.white)
+ ta.recycle()
+ cardView.background.setTint(ContextCompat.getColor(holder.itemView.context, color))
}
textView.layoutParams.width = LayoutParams.WRAP_CONTENT
diff --git a/app/src/main/java/com/nlinterface/utility/utils.kt b/app/src/main/java/com/nlinterface/utility/utils.kt
index f637142..4d1fd53 100644
--- a/app/src/main/java/com/nlinterface/utility/utils.kt
+++ b/app/src/main/java/com/nlinterface/utility/utils.kt
@@ -1,9 +1,12 @@
package com.nlinterface.utility
+import android.content.Context
import android.content.res.Resources
import android.os.Parcelable
import android.util.Log
import android.view.View
+import androidx.annotation.AttrRes
+import androidx.annotation.ColorInt
import androidx.constraintlayout.widget.ConstraintLayout
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
@@ -25,4 +28,4 @@ fun setViewRelativeSize(view: View, relWidth:Double, relHeight: Double) {
val height = (Resources.getSystem().displayMetrics.heightPixels * relHeight).toInt()
val width = (Resources.getSystem().displayMetrics.widthPixels * relWidth).toInt()
view.layoutParams = ConstraintLayout.LayoutParams(width, height)
-}
\ No newline at end of file
+}
diff --git a/app/src/main/res/drawable/ic_baseline_star_24.xml b/app/src/main/res/drawable/ic_baseline_star_24.xml
index 09a5c51..1a8a340 100644
--- a/app/src/main/res/drawable/ic_baseline_star_24.xml
+++ b/app/src/main/res/drawable/ic_baseline_star_24.xml
@@ -1,4 +1,4 @@
-
diff --git a/app/src/main/res/drawable/ic_baseline_star_border_24.xml b/app/src/main/res/drawable/ic_baseline_star_border_24.xml
index 26107f5..d4b713b 100644
--- a/app/src/main/res/drawable/ic_baseline_star_border_24.xml
+++ b/app/src/main/res/drawable/ic_baseline_star_border_24.xml
@@ -1,4 +1,4 @@
-
diff --git a/app/src/main/res/layout/activity_grocery_list.xml b/app/src/main/res/layout/activity_grocery_list.xml
index c24d7e9..95cfb7e 100644
--- a/app/src/main/res/layout/activity_grocery_list.xml
+++ b/app/src/main/res/layout/activity_grocery_list.xml
@@ -25,11 +25,12 @@
android:id="@+id/add_item_bt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:backgroundTint="@color/red"
+ android:backgroundTint="?colorTertiary"
android:insetBottom="0dp"
android:insetTop="0dp"
android:textSize="35dp"
android:text="@string/add"
+ android:textColor="?android:textColorSecondary"
app:cornerRadius="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index ca4d855..22113b3 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -14,10 +14,11 @@
android:id="@+id/grocery_list_bt"
android:layout_width="0dp"
android:layout_height="0dp"
- android:backgroundTint="@color/black"
+ android:backgroundTint="?colorPrimary"
android:paddingVertical="10dp"
android:text="@string/grocery_list"
android:textSize="45sp"
+ android:textColor="?android:textColorPrimary"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
@@ -33,10 +34,11 @@
android:id="@+id/place_details_bt"
android:layout_width="0dp"
android:layout_height="0dp"
- android:backgroundTint="@color/black"
+ android:backgroundTint="?colorPrimary"
android:paddingVertical="10dp"
android:text="@string/place_details"
android:textSize="45sp"
+ android:textColor="?android:textColorPrimary"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
@@ -52,10 +54,11 @@
android:id="@+id/settings_bt"
android:layout_width="0dp"
android:layout_height="0dp"
- android:backgroundTint="@color/black"
+ android:backgroundTint="?colorPrimary"
android:paddingVertical="10dp"
android:text="@string/settings"
android:textSize="45sp"
+ android:textColor="?android:textColorPrimary"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index efc80df..5f248e0 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -14,6 +14,8 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@string/settings_keep_screen_on"
+ android:textColor="?android:textColorPrimary"
+ android:backgroundTint="?colorPrimary"
app:cornerRadius="13dp"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
@@ -28,6 +30,9 @@
android:id="@+id/settings_theme"
android:layout_width="0dp"
android:layout_height="0dp"
+ android:text="@string/settings_theme"
+ android:textColor="?android:textColorPrimary"
+ android:backgroundTint="?colorPrimary"
app:cornerRadius="13dp"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
diff --git a/app/src/main/res/layout/edit_text_dialog.xml b/app/src/main/res/layout/edit_text_dialog.xml
index 67379b1..16fbd13 100644
--- a/app/src/main/res/layout/edit_text_dialog.xml
+++ b/app/src/main/res/layout/edit_text_dialog.xml
@@ -7,11 +7,17 @@
+ app:layout_constraintTop_toTopOf="parent">
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/grocery_item.xml b/app/src/main/res/layout/grocery_item.xml
index 924062f..0f2719b 100644
--- a/app/src/main/res/layout/grocery_item.xml
+++ b/app/src/main/res/layout/grocery_item.xml
@@ -10,7 +10,8 @@
android:id="@+id/grocery_item_cv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- app:cardBackgroundColor="@color/black"
+ android:backgroundTint="@null"
+ app:cardBackgroundColor="?colorPrimary"
app:layout_constraintBottom_toBottomOf="@id/h_guide2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
@@ -26,7 +27,7 @@
android:paddingHorizontal="25dp"
android:paddingVertical="5dp"
android:text="Item"
- android:textColor="@color/white"
+ android:textColor="?android:textColorPrimary"
android:textSize="35sp" />
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index e8e14a0..2d17b5f 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -4,5 +4,7 @@
#FFFFFFFF
#FF0000
#00FF00
- #bcbcbc
+ #878787
+ #C1C1C1
+ #686868
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 3993a47..f2b8a75 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,9 +1,54 @@
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From 9a0300f0a19d6c217698b08c5fd7f1033c20592a Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 29 Oct 2023 14:40:55 +0100
Subject: [PATCH 17/23] deleted everything currently not in use/not working
will reuse parts later (of course!), we just want to have a completely working version without any overhead right now
---
app/src/main/AndroidManifest.xml | 2 -
.../activities/ItemSavedLocation.kt | 116 ------------------
.../activities/NavigationActivity.kt | 99 ---------------
.../activities/SharedPreferencesHelper.kt | 19 ---
.../com/nlinterface/utility/MotorModule.kt | 43 -------
.../main/res/layout/activity_motor_module.xml | 42 -------
.../layout/activity_next_activity_example.xml | 16 ---
.../res/layout/activity_saved_locations.xml | 22 ----
app/src/main/res/layout/edit_text_dialog.xml | 1 +
.../layout/fragment_autocomplete_support.xml | 14 ---
.../main/res/layout/item_saved_location.xml | 22 ----
.../main/res/layout/navigation_activity.xml | 33 -----
app/src/main/res/layout/stt_button.xml | 33 -----
app/src/main/res/menu/menu_main.xml | 10 --
app/src/main/res/values/ids.xml | 4 -
app/src/main/res/values/strings.xml | 16 ---
16 files changed, 1 insertion(+), 491 deletions(-)
delete mode 100644 app/src/main/java/com/nlinterface/activities/ItemSavedLocation.kt
delete mode 100644 app/src/main/java/com/nlinterface/activities/NavigationActivity.kt
delete mode 100644 app/src/main/java/com/nlinterface/activities/SharedPreferencesHelper.kt
delete mode 100644 app/src/main/java/com/nlinterface/utility/MotorModule.kt
delete mode 100644 app/src/main/res/layout/activity_motor_module.xml
delete mode 100644 app/src/main/res/layout/activity_next_activity_example.xml
delete mode 100644 app/src/main/res/layout/activity_saved_locations.xml
delete mode 100644 app/src/main/res/layout/fragment_autocomplete_support.xml
delete mode 100644 app/src/main/res/layout/item_saved_location.xml
delete mode 100644 app/src/main/res/layout/navigation_activity.xml
delete mode 100644 app/src/main/res/layout/stt_button.xml
delete mode 100644 app/src/main/res/menu/menu_main.xml
delete mode 100644 app/src/main/res/values/ids.xml
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b47f4b4..40322fd 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -43,8 +43,6 @@
android:name=".activities.PlaceDetailsActivity" />
-
diff --git a/app/src/main/java/com/nlinterface/activities/ItemSavedLocation.kt b/app/src/main/java/com/nlinterface/activities/ItemSavedLocation.kt
deleted file mode 100644
index 64c57a9..0000000
--- a/app/src/main/java/com/nlinterface/activities/ItemSavedLocation.kt
+++ /dev/null
@@ -1,116 +0,0 @@
-package com.nlinterface.activities
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.view.View
-import android.view.ViewGroup
-import android.widget.Button
-import android.widget.TextView
-import android.widget.Toast
-import androidx.appcompat.app.AppCompatActivity
-import androidx.recyclerview.widget.LinearLayoutManager
-import androidx.recyclerview.widget.RecyclerView
-import com.nlinterface.R
-
-class SavedLocationsActivity : AppCompatActivity() {
-
- private lateinit var savedLocationsRecyclerView: RecyclerView
- private lateinit var savedLocationsAdapter: SavedLocationsAdapter
- private lateinit var emptyTextView: TextView
-
- private var savedLocations: MutableList = mutableListOf()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_saved_locations)
-
- savedLocationsRecyclerView = findViewById(R.id.savedLocationsRecyclerView)
- emptyTextView = findViewById(R.id.emptyTextView)
-
- // Retrieve the saved locations from the intent
- val intentLocations = intent.getStringArrayListExtra("savedLocations")
- savedLocations = intentLocations?.toMutableList() ?: mutableListOf()
-
- savedLocationsAdapter = SavedLocationsAdapter(savedLocations,
- onItemClick = { selectedLocation ->
- openMaps(selectedLocation)
- },
- onDeleteClick = { locationToDelete ->
- deleteLocation(locationToDelete)
- }
- )
-
- savedLocationsRecyclerView.adapter = savedLocationsAdapter
- savedLocationsRecyclerView.layoutManager = LinearLayoutManager(this)
-
- updateEmptyTextViewVisibility()
- }
-
- private fun openMaps(address: String) {
- val gmmIntentUri = Uri.parse("geo:0,0?q=${Uri.encode(address)}")
- val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
- mapIntent.setPackage("com.google.android.apps.maps")
-
- if (mapIntent.resolveActivity(packageManager) != null) {
- startActivity(mapIntent)
- } else {
- Toast.makeText(
- this,
- "Google Maps is not installed on your device",
- Toast.LENGTH_SHORT
- ).show()
- }
- }
-
- private fun deleteLocation(location: String) {
- savedLocations.remove(location)
- savedLocationsAdapter.notifyDataSetChanged()
-
- // Update the saved locations in SharedPreferences after deleting
- SharedPreferencesHelper.saveLocations(this, savedLocations)
-
- updateEmptyTextViewVisibility()
- }
-
- private fun updateEmptyTextViewVisibility() {
- if (savedLocations.isEmpty()) {
- emptyTextView.visibility = View.VISIBLE
- } else {
- emptyTextView.visibility = View.GONE
- }
- }
-
- inner class SavedLocationsAdapter(
- private val locations: MutableList,
- private val onItemClick: (String) -> Unit,
- private val onDeleteClick: (String) -> Unit
- ) : RecyclerView.Adapter() {
-
- inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- val locationButton: Button = itemView.findViewById(R.id.locationButton)
- val deleteButton: Button = itemView.findViewById(R.id.deleteButton)
- }
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
- val itemView = layoutInflater.inflate(R.layout.item_saved_location, parent, false)
- return ViewHolder(itemView)
- }
-
- override fun onBindViewHolder(holder: ViewHolder, position: Int) {
- val location = locations[position]
- holder.locationButton.text = location
- holder.locationButton.setOnClickListener {
- onItemClick(location)
- }
-
- holder.deleteButton.setOnClickListener {
- onDeleteClick(location)
- }
- }
-
- override fun getItemCount(): Int {
- return locations.size
- }
- }
-}
diff --git a/app/src/main/java/com/nlinterface/activities/NavigationActivity.kt b/app/src/main/java/com/nlinterface/activities/NavigationActivity.kt
deleted file mode 100644
index 6302dc8..0000000
--- a/app/src/main/java/com/nlinterface/activities/NavigationActivity.kt
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.nlinterface.activities
-
-import android.annotation.SuppressLint
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.view.WindowManager
-import android.widget.Button
-import android.widget.EditText
-import android.widget.Toast
-import androidx.appcompat.app.AppCompatActivity
-import com.nlinterface.R
-import com.nlinterface.R.*
-import com.nlinterface.utility.GlobalParameters
-
-
-class NavigationActivity : AppCompatActivity() {
-
- private lateinit var addressEditText: EditText
- private lateinit var openMapsButton: Button
- private lateinit var saveLocationButton: Button
- private lateinit var openSavedLocationsButton: Button
-
- object SavedLocationsDataSource {
- val savedLocations: MutableList = mutableListOf()
- }
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.navigation_activity)
-
- // process keep screen on settings
- if (GlobalParameters.instance!!.keepScreenOnSwitch == GlobalParameters.KeepScreenOn.YES) {
- window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- } else {
- window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
- }
-
- addressEditText = findViewById(R.id.addressEditText)
- openMapsButton = findViewById(R.id.openMapsButton)
- saveLocationButton = findViewById(R.id.saveLocationButton)
- openSavedLocationsButton = findViewById(R.id.openSavedLocationsButton)
-
- openMapsButton.setOnClickListener {
- val address = addressEditText.text.toString()
- openMaps(address)
- }
-
- saveLocationButton.setOnClickListener {
- val address = addressEditText.text.toString()
- saveLocation(address)
- }
-
- openSavedLocationsButton.setOnClickListener {
- openSavedLocations()
- }
-
- // Retrieve the saved locations from SharedPreferences on app launch
- SavedLocationsDataSource.savedLocations.clear()
- SavedLocationsDataSource.savedLocations.addAll(SharedPreferencesHelper.getSavedLocations(this))
- }
-
- private fun openMaps(address: String) {
- val gmmIntentUri = Uri.parse("geo:0,0?q=${Uri.encode(address)}")
- val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
- mapIntent.setPackage("com.google.android.apps.maps")
-
- if (mapIntent.resolveActivity(packageManager) != null) {
- startActivity(mapIntent)
- } else {
- Toast.makeText(
- this,
- "Google Maps is not installed on your device",
- Toast.LENGTH_SHORT
- ).show()
- }
- }
- private fun saveLocation(address: String) {
- SavedLocationsDataSource.savedLocations.add(address)
- Toast.makeText(
- this,
- "Location saved: $address",
- Toast.LENGTH_SHORT
- ).show()
-
- // Save the updated list of locations to SharedPreferences
- SharedPreferencesHelper.saveLocations(this, SavedLocationsDataSource.savedLocations)
-
- val intent = Intent(this, SavedLocationsActivity::class.java)
- intent.putStringArrayListExtra("savedLocations", ArrayList(SavedLocationsDataSource.savedLocations))
- startActivity(intent)
- }
-
- private fun openSavedLocations() {
- val intent = Intent(this, SavedLocationsActivity::class.java)
- intent.putStringArrayListExtra("savedLocations", ArrayList(SavedLocationsDataSource.savedLocations))
- startActivity(intent)
- }
-}
diff --git a/app/src/main/java/com/nlinterface/activities/SharedPreferencesHelper.kt b/app/src/main/java/com/nlinterface/activities/SharedPreferencesHelper.kt
deleted file mode 100644
index 07a16b4..0000000
--- a/app/src/main/java/com/nlinterface/activities/SharedPreferencesHelper.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.nlinterface.activities
-
-import android.content.Context
-
-object SharedPreferencesHelper {
- private const val SHARED_PREF_NAME = "SavedLocations"
-
- fun saveLocations(context: Context, locations: List) {
- val sharedPreferences = context.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE)
- val editor = sharedPreferences.edit()
- editor.putStringSet("locations", locations.toSet())
- editor.apply()
- }
-
- fun getSavedLocations(context: Context): List {
- val sharedPreferences = context.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE)
- return sharedPreferences.getStringSet("locations", emptySet())?.toList() ?: emptyList()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/nlinterface/utility/MotorModule.kt b/app/src/main/java/com/nlinterface/utility/MotorModule.kt
deleted file mode 100644
index d8104cd..0000000
--- a/app/src/main/java/com/nlinterface/utility/MotorModule.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.nlinterface.utility
-
-import android.os.Bundle
-import android.view.View
-import android.widget.Button
-import android.widget.EditText
-import android.widget.TextView
-import androidx.appcompat.app.AppCompatActivity
-import com.nlinterface.R
-
-class MotorModule: AppCompatActivity() {
- private lateinit var angleInput: EditText
- private lateinit var calculateButton: Button
- private lateinit var directionText: TextView
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_motor_module)
-
- angleInput = findViewById(R.id.angleInput)
- calculateButton = findViewById(R.id.calculateButton)
- directionText = findViewById(R.id.directionText)
-
- calculateButton.setOnClickListener {
- val angleString = angleInput.text.toString()
- if (angleString.isNotEmpty()) {
- val angle = angleString.toDouble()
- val direction = calculateDirection(angle)
- directionText.text = direction
- }
- }
- }
-
- private fun calculateDirection(angle: Double): String {
- return when {
- angle >= 0 && angle < 90 -> "Right"
- angle >= 90 && angle < 180 -> "Left"
- angle >= 180 && angle < 270 -> "Up"
- angle >= 270 && angle < 360 -> "Right"
- else -> "Invalid angle"
- }
- }
-}
diff --git a/app/src/main/res/layout/activity_motor_module.xml b/app/src/main/res/layout/activity_motor_module.xml
deleted file mode 100644
index ad92191..0000000
--- a/app/src/main/res/layout/activity_motor_module.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/activity_next_activity_example.xml b/app/src/main/res/layout/activity_next_activity_example.xml
deleted file mode 100644
index 18259ca..0000000
--- a/app/src/main/res/layout/activity_next_activity_example.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_saved_locations.xml b/app/src/main/res/layout/activity_saved_locations.xml
deleted file mode 100644
index 8088347..0000000
--- a/app/src/main/res/layout/activity_saved_locations.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/edit_text_dialog.xml b/app/src/main/res/layout/edit_text_dialog.xml
index 16fbd13..580d2f1 100644
--- a/app/src/main/res/layout/edit_text_dialog.xml
+++ b/app/src/main/res/layout/edit_text_dialog.xml
@@ -12,6 +12,7 @@
android:layout_marginTop="15dp"
android:layout_marginBottom="5dp"
android:backgroundTint="@color/grey_light"
+ android:textColor="@color/black"
android:cursorVisible="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
diff --git a/app/src/main/res/layout/fragment_autocomplete_support.xml b/app/src/main/res/layout/fragment_autocomplete_support.xml
deleted file mode 100644
index 10eae0c..0000000
--- a/app/src/main/res/layout/fragment_autocomplete_support.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_saved_location.xml b/app/src/main/res/layout/item_saved_location.xml
deleted file mode 100644
index 291150f..0000000
--- a/app/src/main/res/layout/item_saved_location.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/navigation_activity.xml b/app/src/main/res/layout/navigation_activity.xml
deleted file mode 100644
index 65daf94..0000000
--- a/app/src/main/res/layout/navigation_activity.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/stt_button.xml b/app/src/main/res/layout/stt_button.xml
deleted file mode 100644
index 2fb10da..0000000
--- a/app/src/main/res/layout/stt_button.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
deleted file mode 100644
index 6f99218..0000000
--- a/app/src/main/res/menu/menu_main.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
\ No newline at end of file
diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml
deleted file mode 100644
index 6ee87f8..0000000
--- a/app/src/main/res/values/ids.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 83f2ceb..80b001f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,11 +1,7 @@
NL Interface
- Settings
Grocery List
- Motor Module
- Navigation
- Location
Place Details
Add Item
Add
@@ -18,8 +14,6 @@
Next Activity (Example)
- ...
-
SETTINGS_KEY
IMPAIRMENT_KEY
COLOR_KEY
@@ -31,7 +25,6 @@
Tap to speak
Recognized speech will be written here
-
Permission granted for using voice commands!
Please provide microphone permission to use voice commands.
@@ -80,13 +73,4 @@
- Light Theme
- Dark Theme
- Enter angle
- Calculate
-
-
- Open Maps
- Save Location
- Open Saved Locations
- Delete
- Click Me
\ No newline at end of file
From c4d92591896359f444c1a361899cc48039df6d62 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 29 Oct 2023 18:33:34 +0100
Subject: [PATCH 18/23] fixed placeDetails favoriteIcon bug
---
.../com/nlinterface/activities/PlaceDetailsActivity.kt | 8 +-------
.../java/com/nlinterface/adapters/PlaceDetailsAdapter.kt | 6 +++---
2 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt b/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
index 6ae3333..fa92278 100644
--- a/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
@@ -1,12 +1,9 @@
package com.nlinterface.activities
import android.os.Bundle
-import android.util.Log
import android.view.View
import android.widget.ImageButton
-import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
-import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.LinearLayoutManager
@@ -15,18 +12,15 @@ import com.google.android.gms.common.api.Status
import com.google.android.libraries.places.api.model.Place
import com.google.android.libraries.places.widget.AutocompleteSupportFragment
import com.google.android.libraries.places.widget.listener.PlaceSelectionListener
-import com.google.android.material.button.MaterialButton
import com.nlinterface.R
-import com.nlinterface.adapters.GroceryListAdapter
import com.nlinterface.adapters.PlaceDetailsAdapter
import com.nlinterface.databinding.ActivityPlaceDetailsBinding
-import com.nlinterface.dataclasses.GroceryItem
import com.nlinterface.dataclasses.PlaceDetailsItem
import com.nlinterface.interfaces.PlaceDetailsItemCallback
import com.nlinterface.utility.setViewRelativeSize
-import com.nlinterface.viewmodels.GroceryListViewModel
import com.nlinterface.viewmodels.PlaceDetailsViewModel
+
class PlaceDetailsActivity: AppCompatActivity(), PlaceDetailsItemCallback {
private lateinit var binding: ActivityPlaceDetailsBinding
diff --git a/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt b/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
index 38223c3..8d5f640 100644
--- a/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
+++ b/app/src/main/java/com/nlinterface/adapters/PlaceDetailsAdapter.kt
@@ -59,14 +59,14 @@ class PlaceDetailsAdapter (
openingHoursTextView.text = openingHoursText
if (placeDetailsItem.favorite) {
- favoriteImageView.setImageResource(R.drawable.ic_baseline_star_24)
+ holder.placeDetailsItemFavoriteImageView.setImageResource(R.drawable.ic_baseline_star_24)
+ } else {
+ holder.placeDetailsItemFavoriteImageView.setImageResource(R.drawable.ic_baseline_star_border_24)
}
favoriteImageView.setOnClickListener {
placeDetailsItemCallback.onClick(data[holder.adapterPosition])
- true
}
-
}
override fun getItemCount(): Int {
From cf5f932dd135bdce8e00a2e3fd36d4e041c0bf76 Mon Sep 17 00:00:00 2001
From: laramcd <61915160+laramcd@users.noreply.github.com>
Date: Sun, 29 Oct 2023 18:43:40 +0100
Subject: [PATCH 19/23] fixed glitchy animation in PlaceDetailsActivity
---
.../java/com/nlinterface/activities/PlaceDetailsActivity.kt | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt b/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
index fa92278..292b80b 100644
--- a/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
+++ b/app/src/main/java/com/nlinterface/activities/PlaceDetailsActivity.kt
@@ -45,6 +45,8 @@ class PlaceDetailsActivity: AppCompatActivity(), PlaceDetailsItemCallback {
rvPlaceDetails.adapter = adapter
rvPlaceDetails.layoutManager = LinearLayoutManager(this)
+ rvPlaceDetails.itemAnimator?.changeDuration = 0
+
val voiceActivationButton = findViewById(R.id.voice_activation_bt) as ImageButton
setViewRelativeSize(voiceActivationButton, 1.0, 0.33)
From 9208e45fa22230f978472529316859edcb18ecac Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maximilian=20H=C3=A4ming?=
Date: Sun, 29 Oct 2023 20:18:22 +0100
Subject: [PATCH 20/23] ci: generate debug apk
---
.github/workflows/main.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index c0afb7e..18cd011 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -19,8 +19,8 @@ jobs:
java-version: '11'
distribution: 'temurin'
cache: gradle
- - name: Build with Gradle
- run: ./gradlew build
+ - name: Build debug APK
+ run: ./gradlew assembleDebug
- name: Upload APK
uses: actions/upload-artifact@v3.1.3
with:
From 5eff49b24c28b33c864387de016f5b69e7fe3d56 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maximilian=20H=C3=A4ming?=
Date: Sun, 29 Oct 2023 20:30:34 +0100
Subject: [PATCH 21/23] ci: clean Gradle before build
---
.github/workflows/main.yml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 18cd011..d81cfbd 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -19,6 +19,8 @@ jobs:
java-version: '11'
distribution: 'temurin'
cache: gradle
+ - name: Clean Gradle
+ run: ./gradlew clean
- name: Build debug APK
run: ./gradlew assembleDebug
- name: Upload APK
From 752a46fd35f4300b1d85cdb18a7e2270c7ea3af1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maximilian=20H=C3=A4ming?=
Date: Sun, 29 Oct 2023 22:14:04 +0100
Subject: [PATCH 22/23] ci: maps api key
---
.github/workflows/main.yml | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index d81cfbd..adc8080 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -19,10 +19,12 @@ jobs:
java-version: '11'
distribution: 'temurin'
cache: gradle
- - name: Clean Gradle
- run: ./gradlew clean
+ - name: Create local gradle properties files
+ run: touch local.properties
+ - name: Add Google Maps API Key
+ run: echo "MAPS_API_KEY=${{secrets.MAPS_API_KEY}}" >> local.properties
- name: Build debug APK
- run: ./gradlew assembleDebug
+ run: ./gradlew build
- name: Upload APK
uses: actions/upload-artifact@v3.1.3
with:
From bbe6f6d18e99721376b53c79584b1cea127548ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maximilian=20H=C3=A4ming?=
Date: Sun, 29 Oct 2023 22:29:34 +0100
Subject: [PATCH 23/23] ci: ignore linting for now
---
.github/workflows/main.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index adc8080..4f021b5 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -24,7 +24,7 @@ jobs:
- name: Add Google Maps API Key
run: echo "MAPS_API_KEY=${{secrets.MAPS_API_KEY}}" >> local.properties
- name: Build debug APK
- run: ./gradlew build
+ run: ./gradlew build -x lint -x lintVitalRelease
- name: Upload APK
uses: actions/upload-artifact@v3.1.3
with: