From 38db4ede4625129fb80e9dc512ce197459c81a53 Mon Sep 17 00:00:00 2001 From: Maria Panasetskaia Date: Fri, 25 Aug 2023 17:47:46 +0200 Subject: [PATCH] access realtime database --- .idea/deploymentTargetDropDown.xml | 17 ------- app/build.gradle | 9 ++++ app/google-services.json | 9 ++++ .../charactersudoku/data/remote/Jsoner.kt | 49 +++++++++++++++++++ .../CharacterSudokuRepositoryImpl.kt | 3 ++ .../domain/CharacterSudokuRepository.kt | 1 + .../presentation/game_screen/GameFragment.kt | 9 ++++ .../presentation/game_screen/GameViewModel.kt | 18 +++++++ 8 files changed, 98 insertions(+), 17 deletions(-) delete mode 100644 .idea/deploymentTargetDropDown.xml create mode 100644 app/src/main/java/com/panasetskaia/charactersudoku/data/remote/Jsoner.kt diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index 03a4643..0000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 1ec1e58..e3d755a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -108,6 +108,15 @@ dependencies { implementation 'com.google.firebase:firebase-inappmessaging-ktx' implementation 'com.google.firebase:firebase-inappmessaging-display-ktx' implementation 'com.google.android.gms:play-services-auth:20.6.0' + implementation 'com.google.firebase:firebase-database-ktx' + + //network + implementation 'com.squareup.retrofit2:retrofit:2.9.0' + implementation 'org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0' + implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0" + implementation "com.squareup.okhttp3:okhttp:4.7.2" + + diff --git a/app/google-services.json b/app/google-services.json index 57f0bad..b5fc0b2 100644 --- a/app/google-services.json +++ b/app/google-services.json @@ -1,6 +1,7 @@ { "project_info": { "project_number": "33541923009", + "firebase_url": "https://mandarindoku-default-rtdb.europe-west1.firebasedatabase.app", "project_id": "mandarindoku", "storage_bucket": "mandarindoku.appspot.com" }, @@ -21,6 +22,14 @@ "certificate_hash": "0d0af5af57aa5f50ae13eeb2018a0f83cb0ea97a" } }, + { + "client_id": "33541923009-3molm15640q17cqv5mka0mlccgqstmn7.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.panasetskaia.charactersudoku", + "certificate_hash": "d4e44327d4092b367ecf5ca39e190bd8ededa9cc" + } + }, { "client_id": "33541923009-bh0c1p63vauoq76mafi8aafbogsqnj39.apps.googleusercontent.com", "client_type": 3 diff --git a/app/src/main/java/com/panasetskaia/charactersudoku/data/remote/Jsoner.kt b/app/src/main/java/com/panasetskaia/charactersudoku/data/remote/Jsoner.kt new file mode 100644 index 0000000..a971777 --- /dev/null +++ b/app/src/main/java/com/panasetskaia/charactersudoku/data/remote/Jsoner.kt @@ -0,0 +1,49 @@ +package com.panasetskaia.charactersudoku.data.remote + +import com.panasetskaia.charactersudoku.domain.entities.ChineseCharacter +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json + +object Jsoner { +// val jsonString = """{ +// "0": { +// "character": "五", +// "pinyin": "wǔ", +// "translation": "five", +// "usages": "五星级 (five-star) hotel", +// "category": "new HSK1", +// "id": 0, +// "isChosen": false +// }, +// "1": { +// "character": "七", +// "pinyin": "qī", +// "translation": "seven", +// "usages": "七天 (seven days)", +// "category": "new HSK1", +// "id": 0, +// "isChosen": false +// }, +// "2": { +// "character": "开", +// "pinyin": "kāi", +// "translation": "to open", +// "usages": "开心 (happy), 开车 (drive a car)", +// "category": "new HSK1", +// "id": 0, +// "isChosen": false +// } +// }""" +// +// +// internal inline fun String.convertToDataClass() = +// Json { +// ignoreUnknownKeys = true +// }.decodeFromString>(this) +// +// fun giveMeList(): List { +// val res = Json.decodeFromString(jsonString) +// return res +// } + +} \ No newline at end of file diff --git a/app/src/main/java/com/panasetskaia/charactersudoku/data/repository/CharacterSudokuRepositoryImpl.kt b/app/src/main/java/com/panasetskaia/charactersudoku/data/repository/CharacterSudokuRepositoryImpl.kt index 034ce88..a05c1ba 100644 --- a/app/src/main/java/com/panasetskaia/charactersudoku/data/repository/CharacterSudokuRepositoryImpl.kt +++ b/app/src/main/java/com/panasetskaia/charactersudoku/data/repository/CharacterSudokuRepositoryImpl.kt @@ -2,6 +2,8 @@ package com.panasetskaia.charactersudoku.data.repository import android.app.Application import android.os.Environment +import com.google.firebase.database.ktx.database +import com.google.firebase.ktx.Firebase import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.panasetskaia.charactersudoku.data.database.board.BoardDao @@ -112,6 +114,7 @@ class CharacterSudokuRepositoryImpl @Inject constructor( override suspend fun getSavedGame() { try { + val boardDbModel = boardDao.getSavedGame() if (boardDbModel != null) { val nineChars = mutableListOf() diff --git a/app/src/main/java/com/panasetskaia/charactersudoku/domain/CharacterSudokuRepository.kt b/app/src/main/java/com/panasetskaia/charactersudoku/domain/CharacterSudokuRepository.kt index f3db0ec..73bd7a7 100644 --- a/app/src/main/java/com/panasetskaia/charactersudoku/domain/CharacterSudokuRepository.kt +++ b/app/src/main/java/com/panasetskaia/charactersudoku/domain/CharacterSudokuRepository.kt @@ -49,4 +49,5 @@ interface CharacterSudokuRepository { suspend fun saveDictToJson(): String suspend fun getCharacterByChinese(chinese: String): ChineseCharacter? + } \ No newline at end of file diff --git a/app/src/main/java/com/panasetskaia/charactersudoku/presentation/game_screen/GameFragment.kt b/app/src/main/java/com/panasetskaia/charactersudoku/presentation/game_screen/GameFragment.kt index 62cef3b..0868311 100644 --- a/app/src/main/java/com/panasetskaia/charactersudoku/presentation/game_screen/GameFragment.kt +++ b/app/src/main/java/com/panasetskaia/charactersudoku/presentation/game_screen/GameFragment.kt @@ -9,11 +9,14 @@ import android.os.SystemClock import android.view.View import android.view.animation.AccelerateInterpolator import android.widget.Button +import android.widget.Toast import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.google.android.material.bottomsheet.BottomSheetDialog +import com.google.firebase.database.ktx.database +import com.google.firebase.ktx.Firebase import com.panasetskaia.charactersudoku.R import com.panasetskaia.charactersudoku.databinding.BottomSheetChooseLvlAndCategoryBinding import com.panasetskaia.charactersudoku.databinding.BottomSheetConfirmRefreshBinding @@ -25,6 +28,7 @@ import com.panasetskaia.charactersudoku.presentation.dict_screen.SpinnerAdapter import com.panasetskaia.charactersudoku.presentation.root.MainActivity import com.panasetskaia.charactersudoku.presentation.viewmodels.ViewModelFactory import com.panasetskaia.charactersudoku.utils.getAppComponent +import com.panasetskaia.charactersudoku.utils.myLog import com.panasetskaia.charactersudoku.utils.toast import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch @@ -132,6 +136,7 @@ class GameFragment : BaseFragment(FragmentGa } is PLAYING -> { play(it.currentBoard, buttons) + logRealtmeDatabseResults() } is WIN -> { celebrate() @@ -393,6 +398,10 @@ class GameFragment : BaseFragment(FragmentGa } } + //todo: тестовая функция, удалить + private fun logRealtmeDatabseResults() { + viewModel.testRealtimeDB() + } } diff --git a/app/src/main/java/com/panasetskaia/charactersudoku/presentation/game_screen/GameViewModel.kt b/app/src/main/java/com/panasetskaia/charactersudoku/presentation/game_screen/GameViewModel.kt index cb566d6..853e909 100644 --- a/app/src/main/java/com/panasetskaia/charactersudoku/presentation/game_screen/GameViewModel.kt +++ b/app/src/main/java/com/panasetskaia/charactersudoku/presentation/game_screen/GameViewModel.kt @@ -1,6 +1,8 @@ package com.panasetskaia.charactersudoku.presentation.game_screen import androidx.lifecycle.viewModelScope +import com.google.firebase.database.ktx.database +import com.google.firebase.ktx.Firebase import com.panasetskaia.charactersudoku.R import com.panasetskaia.charactersudoku.domain.SUCCESS import com.panasetskaia.charactersudoku.domain.entities.* @@ -8,6 +10,8 @@ import com.panasetskaia.charactersudoku.domain.usecases.* import com.panasetskaia.charactersudoku.presentation.base.BaseViewModel import com.panasetskaia.charactersudoku.presentation.root.MainActivity import com.panasetskaia.charactersudoku.utils.Event +import com.panasetskaia.charactersudoku.utils.myLog +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.trySendBlocking @@ -267,6 +271,20 @@ class GameViewModel @Inject constructor( } } + //todo: тестовая функция, удалить + fun testRealtimeDB() { + viewModelScope.launch (Dispatchers.IO) { + val rltimeDatabase = Firebase.database.reference + rltimeDatabase.child("dictionaries").child("hsk1_en").get().addOnSuccessListener { + myLog("firebase: Got value ${it.value}") + _toastFlow.value = Event("firebase: Got value ${it.value}") + }.addOnFailureListener{ + myLog("firebase: Error getting data: $it") + _toastFlow.value = Event("firebase: Error getting data: $it") + } + } + } + companion object { internal const val EMPTY_CELLS_MINIMUM = 8 private const val EMPTY_CELL = "0"