From 7d115bd5b3f09762aa4b014930bd7b4b3e22ff31 Mon Sep 17 00:00:00 2001 From: Alan M Varghese Date: Sun, 1 Jan 2023 20:13:14 +0530 Subject: [PATCH] Verified working in API Level 21 - Newer (than 2.13.x) versions of jackson does not work on API level < 26 in android https://github.com/FasterXML/jackson-databind/issues/3702 - Unlinked LettersTabViewModel and Transliterator instantiation Transliterator instantiation now uses fragment context instead of application context - Removed unused references to previously tested progress bar --- app/build.gradle | 8 ++++--- .../main/letters/LettersTabFragment.kt | 21 +++++++++---------- .../main/letters/LettersTabViewModel.kt | 10 +++------ .../main/practice/InputTextChangedListener.kt | 2 +- .../digistorm/aksharam/util/Transliterator.kt | 1 - 5 files changed, 19 insertions(+), 23 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a61e68c..92a1132 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,14 +61,16 @@ dependencies { implementation 'com.google.android.material:material:1.7.0' implementation 'androidx.preference:preference:1.2.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.fragment:fragment:1.5.4' + implementation 'androidx.fragment:fragment:1.5.5' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'androidx.window:window:1.0.0' implementation 'androidx.annotation:annotation:1.5.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.0' - implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.14.0' + // Newer (than 2.13.x) versions of jackson does not work on API level < 26 in android + // https://github.com/FasterXML/jackson-databind/issues/3702 + implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.4' + implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.13.4' implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3' implementation 'androidx.navigation:navigation-ui-ktx:2.5.3' implementation 'androidx.core:core-ktx:1.9.0' diff --git a/app/src/main/kotlin/in/digistorm/aksharam/activities/main/letters/LettersTabFragment.kt b/app/src/main/kotlin/in/digistorm/aksharam/activities/main/letters/LettersTabFragment.kt index c396c5c..cc9c1c8 100644 --- a/app/src/main/kotlin/in/digistorm/aksharam/activities/main/letters/LettersTabFragment.kt +++ b/app/src/main/kotlin/in/digistorm/aksharam/activities/main/letters/LettersTabFragment.kt @@ -29,7 +29,6 @@ import android.widget.* import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.recyclerview.widget.RecyclerView -import com.google.android.material.progressindicator.LinearProgressIndicator import com.google.android.material.textfield.MaterialAutoCompleteTextView import com.google.android.material.textfield.TextInputLayout import kotlin.collections.ArrayList @@ -68,7 +67,9 @@ class LettersTabFragment: Fragment() { super.onViewCreated(view, savedInstanceState) logDebug(logTag, "onViewCreated") - logDebug(logTag, "Letters category wise: ${viewModel.transliterator.languageData.lettersCategoryWise}") + // Initialise the transliterator + viewModel.transliterator = Transliterator(requireContext()) + logDebug(logTag, "Letters category wise: ${viewModel.transliterator!!.languageData.lettersCategoryWise}") letterCategoryListView = view.findViewById(R.id.letter_categories)!! languageSelector = view.findViewById(R.id.language_selector) convertToSelector = view.findViewById(R.id.convert_to_selector) @@ -80,8 +81,9 @@ class LettersTabFragment: Fragment() { view.findViewById(R.id.lettersTabInfoButton).setOnClickListener { v: View? -> logDebug(logTag, "Info button clicked!") logDebug(logTag, - "Fetching info for transliterating ${viewModel.transliterator.languageData.language} to ${viewModel.targetLanguage}") - val info: HashMap> = viewModel.transliterator.languageData.info + "Fetching info for transliterating ${viewModel.transliterator!!.languageData.language} " + + "to ${viewModel.targetLanguage}") + val info: HashMap> = viewModel.transliterator!!.languageData.info logDebug(logTag, "Data for info: $info") val lif = LanguageInfoFragment.newInstance( info["general"]?.get("en") + info[viewModel.targetLanguage.lowercase()]?.get("en")) @@ -90,15 +92,14 @@ class LettersTabFragment: Fragment() { val categoryListViewAdapter = LetterCategoryAdapter( viewModel.getLanguageData().lettersCategoryWise, - viewModel.transliterator, + viewModel.transliterator!!, viewModel.targetLanguage, ) letterCategoryListView.adapter = categoryListViewAdapter - categoryListViewAdapter.submitList(viewModel.transliterator.languageData.categories) + categoryListViewAdapter.submitList(viewModel.transliterator!!.languageData.categories) logDebug(logTag, "Setting up observers for view model data") initObservers(view) - view.findViewById(R.id.progress_indicator).visibility = View.GONE } // Return an empty array list if we could not find any @@ -123,7 +124,7 @@ class LettersTabFragment: Fragment() { languageListAdapter.setNotifyOnChange(true) languageTextView?.setAdapter(languageListAdapter) - val upperCasedLanguage = viewModel.transliterator.getLanguage().replaceFirstChar { + val upperCasedLanguage = viewModel.transliterator!!.getLanguage().replaceFirstChar { if (it.isLowerCase()) it.titlecase() else @@ -215,7 +216,7 @@ class LettersTabFragment: Fragment() { (letterCategoryListView.adapter as LetterCategoryAdapter).apply { setLettersCategoryWise(viewModel.getLanguageData().lettersCategoryWise) updateTargetLanguage(viewModel.targetLanguage) - updateTransliterator(viewModel.transliterator) + updateTransliterator(viewModel.transliterator!!) logDebug(logTag, "LetterCategoryAdapter Inspection: \n" + "Item count: ${itemCount} \n" + "Current List: ${currentList}") @@ -240,7 +241,5 @@ class LettersTabFragment: Fragment() { adapter.updateLetterGrids(letterCategoryListView) } } - - } } diff --git a/app/src/main/kotlin/in/digistorm/aksharam/activities/main/letters/LettersTabViewModel.kt b/app/src/main/kotlin/in/digistorm/aksharam/activities/main/letters/LettersTabViewModel.kt index 8671ab0..507311f 100644 --- a/app/src/main/kotlin/in/digistorm/aksharam/activities/main/letters/LettersTabViewModel.kt +++ b/app/src/main/kotlin/in/digistorm/aksharam/activities/main/letters/LettersTabViewModel.kt @@ -31,7 +31,7 @@ import androidx.lifecycle.MutableLiveData class LettersTabViewModel(application: Application): AndroidViewModel(application) { private val logTag = javaClass.simpleName - var transliterator: Transliterator = Transliterator(application) + var transliterator: Transliterator? = null // The current language displayed in letters tab var languageLiveData: MutableLiveData = MutableLiveData() @@ -54,18 +54,14 @@ class LettersTabViewModel(application: Application): AndroidViewModel(applicatio targetLanguageLiveData.value = value } - init { - // language = transliterator.getLanguage() - } - // Set the transliterator based on a specific language fun setTransliterator(language: String, context: Context) { - if (transliterator.getLanguage().lowercase() != language.lowercase()) + if (transliterator!!.getLanguage().lowercase() != language.lowercase()) transliterator = Transliterator(language, context) } // A convenience method to obtain language data fun getLanguageData(): Language { - return transliterator.languageData + return transliterator!!.languageData } } diff --git a/app/src/main/kotlin/in/digistorm/aksharam/activities/main/practice/InputTextChangedListener.kt b/app/src/main/kotlin/in/digistorm/aksharam/activities/main/practice/InputTextChangedListener.kt index 006d8f2..a0cb072 100644 --- a/app/src/main/kotlin/in/digistorm/aksharam/activities/main/practice/InputTextChangedListener.kt +++ b/app/src/main/kotlin/in/digistorm/aksharam/activities/main/practice/InputTextChangedListener.kt @@ -17,7 +17,7 @@ class InputTextChangedListener( private val viewModel: PracticeTabViewModel by practiceTabFragment.viewModels() private val practiceTextTV: TextView = practiceTabFragment.requireView() - .requireViewById(R.id.PracticeTabPracticeTextTV) + .findViewById(R.id.PracticeTabPracticeTextTV)!! override fun afterTextChanged(s: Editable) {} override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {} diff --git a/app/src/main/kotlin/in/digistorm/aksharam/util/Transliterator.kt b/app/src/main/kotlin/in/digistorm/aksharam/util/Transliterator.kt index 342fe79..2ac2d99 100644 --- a/app/src/main/kotlin/in/digistorm/aksharam/util/Transliterator.kt +++ b/app/src/main/kotlin/in/digistorm/aksharam/util/Transliterator.kt @@ -23,7 +23,6 @@ import android.content.Context import android.content.Intent import java.lang.StringBuilder import `in`.digistorm.aksharam.activities.initialise.InitialiseAppActivity -import kotlin.math.log // This class is responsible for the actual transliteration class Transliterator {