From f32b19e4f500f90f1a1c194c1f913ff7c214df72 Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Sun, 27 Nov 2022 20:28:39 +0100 Subject: [PATCH] Changed for newer Android version --- app/build.gradle | 34 ++++---- .../twomartens/troubleshooting/ListAdapter.kt | 84 ++++++++++++++++--- .../troubleshooting/MainActivity.kt | 6 +- .../troubleshooting/MessageListActivity.kt | 27 +++--- app/src/main/res/layout/message.xml | 30 +++++++ app/src/main/res/layout/message_sent.xml | 3 +- app/src/main/res/values/dimen.xml | 4 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/styles.xml | 11 +++ build.gradle | 11 ++- gradle/wrapper/gradle-wrapper.properties | 4 +- 11 files changed, 162 insertions(+), 54 deletions(-) create mode 100644 app/src/main/res/layout/message.xml create mode 100644 app/src/main/res/values/dimen.xml diff --git a/app/build.gradle b/app/build.gradle index c540330..ae7d34c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,8 +2,6 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' - // Create a variable called keystorePropertiesFile, and initialize it to your // keystore.properties file, in the rootProject folder. def keystorePropertiesFile = rootProject.file("keystore.properties") @@ -24,12 +22,11 @@ android { storePassword keystoreProperties['storePassword'] } } - compileSdkVersion 29 - buildToolsVersion "29.0.1" + compileSdk 32 defaultConfig { applicationId "de.twomartens.troubleshooting" - minSdkVersion 19 - targetSdkVersion 29 + minSdk 29 + targetSdk 29 versionCode 2 versionName "0.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -49,25 +46,28 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + buildFeatures { + viewBinding true + } } dependencies { - def lifecycle_version = "2.1.0-rc01" - def work_version = "2.1.0" + def lifecycle_version = '2.2.0' + def work_version = '2.7.1' apply plugin: "org.jetbrains.kotlin.kapt" implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation 'androidx.core:core-ktx:1.0.2' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - implementation 'androidx.recyclerview:recyclerview:1.0.0' - implementation 'com.google.android.material:material:1.1.0-alpha08' + implementation 'androidx.appcompat:appcompat:1.5.1' + implementation 'androidx.core:core-ktx:1.8.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test:runner:1.5.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' + implementation 'androidx.recyclerview:recyclerview:1.2.1' + implementation 'com.google.android.material:material:1.8.0-alpha03' implementation 'com.github.uDevel:widgetlab:0.9.7' implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" - kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" + kapt "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" implementation "androidx.work:work-runtime-ktx:$work_version" } diff --git a/app/src/main/java/de/twomartens/troubleshooting/ListAdapter.kt b/app/src/main/java/de/twomartens/troubleshooting/ListAdapter.kt index 21df7ce..a529663 100644 --- a/app/src/main/java/de/twomartens/troubleshooting/ListAdapter.kt +++ b/app/src/main/java/de/twomartens/troubleshooting/ListAdapter.kt @@ -1,9 +1,13 @@ package de.twomartens.troubleshooting -import android.view.View +import android.view.LayoutInflater import android.view.ViewGroup +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams.UNSET +import androidx.core.view.setPadding +import androidx.core.view.updateLayoutParams import androidx.recyclerview.widget.RecyclerView -import kotlinx.android.synthetic.main.message_sent.view.* +import de.twomartens.troubleshooting.databinding.MessageBinding import java.text.DateFormat const val VIEW_TYPE_MESSAGE_RECEIVED: Int = 1 @@ -13,13 +17,14 @@ class MessageListAdapter : RecyclerView.Adapter = ArrayList() val dateFormat: DateFormat = DateFormat.getTimeInstance(DateFormat.SHORT) - inner class MessageHolder(private val view: View) : RecyclerView.ViewHolder(view) { + inner class MessageHolder(private val binding: MessageBinding) + : RecyclerView.ViewHolder(binding.root) { private var message: Message? = null fun bind(message: Message) { this.message = message - view.text_message_body.text = message.message - view.text_message_time.text = dateFormat.format(message.createdAt) + binding.textMessageBody.text = message.message + binding.textMessageTime.text = dateFormat.format(message.createdAt) } } @@ -27,19 +32,74 @@ class MessageListAdapter : RecyclerView.Adapter { - val view = parent.inflate(R.layout.message_reveived, false) - MessageHolder(view) + val binding = MessageBinding.inflate(LayoutInflater.from(parent.context), parent, false) + binding.textMessageBody.setBackgroundResource(R.drawable.rounded_rectangle_secondary_color) + binding.textMessageBody.setTextColor(parent.context.resources.getColor(R.color.color_on_secondary, null)) + + binding.textMessageTime.updateLayoutParams { + this.marginStart = 4 + this.marginEnd = UNSET + } + + binding.textMessageTime.updateLayoutParams { + this.startToEnd = binding.textMessageBody.id + this.endToStart = UNSET + } + + binding.textMessageBody.updateLayoutParams { + this.startToStart = parent.id + this.topToTop = parent.id + this.endToEnd = UNSET + } + + MessageHolder(binding) } VIEW_TYPE_MESSAGE_SENT -> { - val view = parent.inflate(R.layout.message_sent, false) - MessageHolder(view) + val binding = MessageBinding.inflate(LayoutInflater.from(parent.context), parent, false) + binding.root.setPadding(parent.context.resources.getDimensionPixelSize(R.dimen.message_sent_padding)) + binding.textMessageBody.setBackgroundResource(R.drawable.rounded_rectangle_primary_color) + binding.textMessageBody.setTextColor(parent.context.resources.getColor(R.color.color_on_primary, null)) + + binding.textMessageTime.updateLayoutParams { + this.marginEnd = 4 + this.marginStart = UNSET + } + + binding.textMessageTime.updateLayoutParams { + this.endToStart = binding.textMessageBody.id + this.startToEnd = UNSET + } + + binding.textMessageBody.updateLayoutParams { + this.endToEnd = parent.id + this.startToStart = UNSET + } + + MessageHolder(binding) } else -> { - val view = parent.inflate(R.layout.message_reveived, false) - MessageHolder(view) + val binding = MessageBinding.inflate(LayoutInflater.from(parent.context), parent, false) + binding.textMessageBody.setBackgroundResource(R.drawable.rounded_rectangle_secondary_color) + binding.textMessageBody.setTextColor(parent.context.resources.getColor(R.color.color_on_secondary, null)) + + binding.textMessageTime.updateLayoutParams { + this.marginStart = 4 + this.marginEnd = UNSET + } + + binding.textMessageTime.updateLayoutParams { + this.startToEnd = binding.textMessageBody.id + this.endToStart = UNSET + } + + binding.textMessageBody.updateLayoutParams { + this.startToStart = parent.id + this.endToEnd = UNSET + } + + MessageHolder(binding) } } } diff --git a/app/src/main/java/de/twomartens/troubleshooting/MainActivity.kt b/app/src/main/java/de/twomartens/troubleshooting/MainActivity.kt index 84a9ea1..047afb7 100644 --- a/app/src/main/java/de/twomartens/troubleshooting/MainActivity.kt +++ b/app/src/main/java/de/twomartens/troubleshooting/MainActivity.kt @@ -1,15 +1,17 @@ package de.twomartens.troubleshooting import android.content.Intent -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View +import androidx.appcompat.app.AppCompatActivity +import de.twomartens.troubleshooting.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) + val binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) } fun startSession(view: View) { diff --git a/app/src/main/java/de/twomartens/troubleshooting/MessageListActivity.kt b/app/src/main/java/de/twomartens/troubleshooting/MessageListActivity.kt index 76af9f6..65b292e 100644 --- a/app/src/main/java/de/twomartens/troubleshooting/MessageListActivity.kt +++ b/app/src/main/java/de/twomartens/troubleshooting/MessageListActivity.kt @@ -1,23 +1,23 @@ package de.twomartens.troubleshooting -import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.ArrayAdapter import android.widget.Spinner +import androidx.appcompat.app.AppCompatActivity import androidx.constraintlayout.widget.ConstraintLayout import androidx.lifecycle.Observer -import androidx.lifecycle.ViewModelProviders +import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.udevel.widgetlab.TypingIndicatorView -import kotlinx.android.synthetic.main.activity_message_list.view.* +import de.twomartens.troubleshooting.databinding.ActivityMessageListBinding import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import kotlin.collections.ArrayList class MessageListActivity : AppCompatActivity() { private lateinit var recyclerView: RecyclerView + private lateinit var binding: ActivityMessageListBinding private val viewAdapter: MessageListAdapter = MessageListAdapter() private lateinit var spinner: Spinner private lateinit var horizontalLayout: ConstraintLayout @@ -31,12 +31,13 @@ class MessageListActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_message_list) + binding = ActivityMessageListBinding.inflate(layoutInflater) + setContentView(binding.root) initVariables() adapter = initSpinner(model, spinner) bindMessageObserver(viewAdapter, model) - initButton(horizontalLayout, ::step, spinner) + initButton(::step, spinner) val messages = initFirstChoice(adapter, model, horizontalLayout) receiveMessages(messages, model, typingIndicator, recyclerView, horizontalLayout) } @@ -46,15 +47,15 @@ class MessageListActivity : AppCompatActivity() { viewManager.stackFromEnd = true viewManager.reverseLayout = false - model = ViewModelProviders.of(this).get(MessageListViewModel::class.java) + model = ViewModelProvider(this)[MessageListViewModel::class.java] - horizontalLayout = findViewById(R.id.layout_chatbox) - typingIndicator = findViewById(R.id.indicator) + horizontalLayout = binding.layoutChatbox + typingIndicator = binding.indicator typingIndicator.visibility = View.GONE horizontalLayout.visibility = View.GONE - spinner = findViewById(R.id.spinner) + spinner = binding.spinner - recyclerView = findViewById(R.id.messageList).apply { + recyclerView = binding.messageList.apply { // use this setting to improve performance if you know that changes // in content do not change the layout size of the RecyclerView setHasFixedSize(true) @@ -91,8 +92,8 @@ class MessageListActivity : AppCompatActivity() { model.getMessages().observe(this, messageObserver) } - private fun initButton(horizontalLayout: ConstraintLayout, step: (SpinnerOption) -> Unit, spinner: Spinner) { - horizontalLayout.button_send.setOnClickListener { + private fun initButton(step: (SpinnerOption) -> Unit, spinner: Spinner) { + binding.buttonSend.setOnClickListener { val option = spinner.selectedItem if (option is SpinnerOption) { step(option) diff --git a/app/src/main/res/layout/message.xml b/app/src/main/res/layout/message.xml new file mode 100644 index 0000000..62aa64a --- /dev/null +++ b/app/src/main/res/layout/message.xml @@ -0,0 +1,30 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/message_sent.xml b/app/src/main/res/layout/message_sent.xml index fa6d4cb..d67625d 100644 --- a/app/src/main/res/layout/message_sent.xml +++ b/app/src/main/res/layout/message_sent.xml @@ -1,7 +1,6 @@ @@ -28,5 +27,5 @@ android:textSize="12sp" app:layout_constraintBottom_toBottomOf="@+id/text_message_body" app:layout_constraintEnd_toStartOf="@+id/text_message_body" - tools:textColor="@color/color_on_background" /> + android:textColor="@color/color_on_background" /> \ No newline at end of file diff --git a/app/src/main/res/values/dimen.xml b/app/src/main/res/values/dimen.xml new file mode 100644 index 0000000..6effac0 --- /dev/null +++ b/app/src/main/res/values/dimen.xml @@ -0,0 +1,4 @@ + + + 8dp + \ 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 6643bfa..61b2878 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,6 +21,8 @@ Please tell the support the following information. Who are you? I\'m Gardner Elliot from Mars. In my spare time I help people like you. + test + 11:40 yes diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index da6ff31..b916452 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -18,6 +18,17 @@ @color/color_on_background @color/color_on_surface @color/color_on_error + @style/ActionBar + + + + + diff --git a/build.gradle b/build.gradle index 7f9d2cc..d53f6ad 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.31' + ext.kotlin_version = '1.6.21' repositories { google() - jcenter() - + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:3.4.2' + classpath 'com.android.tools.build:gradle:7.1.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -16,13 +15,13 @@ buildscript { } plugins { - id("org.jetbrains.kotlin.kapt") version "1.3.41" + id("org.jetbrains.kotlin.kapt") version "1.7.21" } allprojects { repositories { google() - jcenter() + mavenCentral() maven { url 'https://jitpack.io' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c63fe01..6a24f46 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Jul 14 13:15:54 CEST 2019 +#Fri Mar 20 23:47:39 CET 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip