From d04ceb323f18b8dab2d37dcea523f65ee844144e Mon Sep 17 00:00:00 2001 From: michael Date: Sun, 16 Apr 2023 17:11:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D0=BD=D0=B5=D0=B4=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B0=D0=BF=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/inspectionProfiles/Project_Default.xml | 41 ++++++++++++++++++ app/build.gradle.kts | 11 ++--- app/src/main/AndroidManifest.xml | 1 + app/src/main/java/ru/megboyzz/dnevnik/App.kt | 23 ++++++++++ .../java/ru/megboyzz/dnevnik/MainActivity.kt | 42 +++++++++++++++++-- .../main/java/ru/megboyzz/dnevnik/Utils.kt | 2 - .../dnevnik/db/CredentialsDataBase.kt | 16 +++++++ .../megboyzz/dnevnik/db/dao/CredentialsDao.kt | 20 +++++++++ .../dnevnik/entities/context/GroupInfo.kt | 6 +++ .../dnevnik/entities/context/PeriodGroup.kt | 7 ++++ .../dnevnik/entities/context/PeriodInfo.kt | 11 +++++ .../dnevnik/entities/context/PersonContext.kt | 14 +++++++ .../dnevnik/entities/context/SchoolInfo.kt | 7 ++++ .../dnevnik/entities/context/UserInfo.kt | 12 ++++++ .../dnevnik/entities/db/Credentials.kt | 9 ++++ .../entities/response/TokenResponse.kt | 6 +++ .../dnevnik/entities/response/UserContext.kt | 9 ++++ .../repository/AuthorizationRepository.kt | 4 ++ .../dnevnik/service/AuthorizationStatus.kt | 7 ++++ .../megboyzz/dnevnik/service/TokenService.kt | 18 ++++++++ .../viewmodel/AuthorizationViewModel.kt | 41 ++++++++++++++++++ buildSrc/src/main/java/AppDependencies.kt | 13 +++++- buildSrc/src/main/java/Versions.kt | 1 + .../main/java/{ => core}/DependencyList.kt | 2 + 24 files changed, 309 insertions(+), 14 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/App.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/db/CredentialsDataBase.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/db/dao/CredentialsDao.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/entities/context/GroupInfo.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/entities/context/PeriodGroup.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/entities/context/PeriodInfo.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/entities/context/PersonContext.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/entities/context/SchoolInfo.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/entities/context/UserInfo.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/entities/db/Credentials.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/entities/response/TokenResponse.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/entities/response/UserContext.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/repository/AuthorizationRepository.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/service/AuthorizationStatus.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/service/TokenService.kt create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/viewmodel/AuthorizationViewModel.kt rename buildSrc/src/main/java/{ => core}/DependencyList.kt (96%) diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..44ca2d9 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,41 @@ + + + + \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 27395d1..0605ae0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,6 +1,7 @@ plugins { id("com.android.application") kotlin("android") + kotlin("kapt") } android { @@ -64,14 +65,6 @@ dependencies { //std lib implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) - /* //app libs - implementation(AppDependencies.appLibraries) - //test libs - testImplementation(AppDependencies.testLibraries) - androidTestImplementation(AppDependencies.androidTestLibraries) - - coreLibraryDesugaring(AppDependencies.desugaringLibraries) - debugImplementation(AppDependencies.debugLibraries)*/ //app libs implementation(AppLibraries) @@ -79,6 +72,8 @@ dependencies { testImplementation(TestLibraries) androidTestImplementation(AndroidTestLibraries) + kapt(KaptLibraries) + coreLibraryDesugaring(DesugaringLibraries) debugImplementation(DebugLibraries) } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7cb9077..05e119e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,6 +13,7 @@ android:roundIcon="@drawable/icon_rounded" android:supportsRtl="true" android:theme="@style/Theme.MyDnevnik" + android:name=".App" tools:targetApi="31"> + + @Query("DELETE FROM Credentials WHERE id = 1") + fun deleteCredentials() + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun setCredentials(profile: Credentials) + +} \ No newline at end of file diff --git a/app/src/main/java/ru/megboyzz/dnevnik/entities/context/GroupInfo.kt b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/GroupInfo.kt new file mode 100644 index 0000000..3b2b52a --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/GroupInfo.kt @@ -0,0 +1,6 @@ +package ru.megboyzz.dnevnik.entities.context + +data class GroupInfo( + val id: Long, + val name: String +) diff --git a/app/src/main/java/ru/megboyzz/dnevnik/entities/context/PeriodGroup.kt b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/PeriodGroup.kt new file mode 100644 index 0000000..f16e465 --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/PeriodGroup.kt @@ -0,0 +1,7 @@ +package ru.megboyzz.dnevnik.entities.context + +data class PeriodGroup( + val id: Long, + val type: String, //Обычно равен "Quarter", то есть Четверть, но как будет семестр у них???? + val periods: List +) diff --git a/app/src/main/java/ru/megboyzz/dnevnik/entities/context/PeriodInfo.kt b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/PeriodInfo.kt new file mode 100644 index 0000000..81f8031 --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/PeriodInfo.kt @@ -0,0 +1,11 @@ +package ru.megboyzz.dnevnik.entities.context + +data class PeriodInfo( + val id: Long, + val number: Short, + val type: String, + val dateStart: Long, + val dateFinish: Long, + val studyYear: Short, + val isCurrent: Boolean +) diff --git a/app/src/main/java/ru/megboyzz/dnevnik/entities/context/PersonContext.kt b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/PersonContext.kt new file mode 100644 index 0000000..79cc26c --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/PersonContext.kt @@ -0,0 +1,14 @@ +package ru.megboyzz.dnevnik.entities.context + +data class PersonContext( + val sex: String, + val userId: Long, + val personId: Long, + val firstName: String, + val middleName: String, + val lastName: String, + val avatarUrl: String, + val schoolInfo: SchoolInfo, + val group: GroupInfo, + val reportingPeriodGroup: PeriodGroup +) diff --git a/app/src/main/java/ru/megboyzz/dnevnik/entities/context/SchoolInfo.kt b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/SchoolInfo.kt new file mode 100644 index 0000000..2260596 --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/SchoolInfo.kt @@ -0,0 +1,7 @@ +package ru.megboyzz.dnevnik.entities.context + +data class SchoolInfo( + val id: Long, + val name: String, + val avatarUrl: String +) diff --git a/app/src/main/java/ru/megboyzz/dnevnik/entities/context/UserInfo.kt b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/UserInfo.kt new file mode 100644 index 0000000..8046ade --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/entities/context/UserInfo.kt @@ -0,0 +1,12 @@ +package ru.megboyzz.dnevnik.entities.context + +data class UserInfo( + val sex: String, + val roles: List, + val userId: Long, + val personId: Long, + val firstName: String, + val middleName: String, + val lastName: String, + val avatarUrl: String, +) diff --git a/app/src/main/java/ru/megboyzz/dnevnik/entities/db/Credentials.kt b/app/src/main/java/ru/megboyzz/dnevnik/entities/db/Credentials.kt new file mode 100644 index 0000000..166d825 --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/entities/db/Credentials.kt @@ -0,0 +1,9 @@ +package ru.megboyzz.dnevnik.entities.db + +import androidx.room.Entity + +@Entity +data class Credentials( + val token: String, + val cookies: Map +) diff --git a/app/src/main/java/ru/megboyzz/dnevnik/entities/response/TokenResponse.kt b/app/src/main/java/ru/megboyzz/dnevnik/entities/response/TokenResponse.kt new file mode 100644 index 0000000..3d57143 --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/entities/response/TokenResponse.kt @@ -0,0 +1,6 @@ +package ru.megboyzz.dnevnik.entities.response + +data class TokenResponse( + val login: String, + val password: String +) \ No newline at end of file diff --git a/app/src/main/java/ru/megboyzz/dnevnik/entities/response/UserContext.kt b/app/src/main/java/ru/megboyzz/dnevnik/entities/response/UserContext.kt new file mode 100644 index 0000000..5702b12 --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/entities/response/UserContext.kt @@ -0,0 +1,9 @@ +package ru.megboyzz.dnevnik.entities.response + +import ru.megboyzz.dnevnik.entities.context.PersonContext +import ru.megboyzz.dnevnik.entities.context.UserInfo + +data class UserContext( + val info: UserInfo, + val contextPersons: List +) diff --git a/app/src/main/java/ru/megboyzz/dnevnik/repository/AuthorizationRepository.kt b/app/src/main/java/ru/megboyzz/dnevnik/repository/AuthorizationRepository.kt new file mode 100644 index 0000000..9532a34 --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/repository/AuthorizationRepository.kt @@ -0,0 +1,4 @@ +package ru.megboyzz.dnevnik.repository + +class AuthorizationRepository() { +} \ No newline at end of file diff --git a/app/src/main/java/ru/megboyzz/dnevnik/service/AuthorizationStatus.kt b/app/src/main/java/ru/megboyzz/dnevnik/service/AuthorizationStatus.kt new file mode 100644 index 0000000..6a9a758 --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/service/AuthorizationStatus.kt @@ -0,0 +1,7 @@ +package ru.megboyzz.dnevnik.service + +enum class AuthorizationStatus { + WRONG_CREDENTIALS, + NO_INTERNET, + MAINTAIN +} \ No newline at end of file diff --git a/app/src/main/java/ru/megboyzz/dnevnik/service/TokenService.kt b/app/src/main/java/ru/megboyzz/dnevnik/service/TokenService.kt new file mode 100644 index 0000000..8ac8561 --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/service/TokenService.kt @@ -0,0 +1,18 @@ +package ru.megboyzz.dnevnik.service + + +import okhttp3.ResponseBody +import org.jsoup.Jsoup +import retrofit2.http.POST +import retrofit2.http.Query + +interface TokenService{ + + @POST("/") + suspend fun getToken( + @Query("login") login: String, + @Query("password") password: String, + @Query("ReturnUrl") returnUrl: String = "https://login.dnevnik.ru/oauth2?response_type=token&client_id=bb97b3e445a340b9b9cab4b9ea0dbd6f&scope=CommonInfo,ContactInfo,FriendsAndRelatives,EducationalInfo" + ): retrofit2.Call + +} \ No newline at end of file diff --git a/app/src/main/java/ru/megboyzz/dnevnik/viewmodel/AuthorizationViewModel.kt b/app/src/main/java/ru/megboyzz/dnevnik/viewmodel/AuthorizationViewModel.kt new file mode 100644 index 0000000..2f42a08 --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/viewmodel/AuthorizationViewModel.kt @@ -0,0 +1,41 @@ +package ru.megboyzz.dnevnik.viewmodel + +import android.app.Application +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import kotlinx.coroutines.flow.MutableStateFlow +import java.lang.IllegalArgumentException + +//Если есть попадание в этот вьюмодел то нам нужна авторизация +class AuthorizationViewModel(application: Application) : AndroidViewModel(application) { + + val login = MutableStateFlow("") + val password = MutableStateFlow("") + val isLogged = MutableStateFlow(false) + + init { + + + + } + + + fun login(){ + + + + } + +} + + +class AuthorizationViewModelFactory(private val application: Application) : ViewModelProvider.Factory { + + override fun create(modelClass: Class): T { + if (modelClass.isAssignableFrom(AuthorizationViewModel::class.java)) + return AuthorizationViewModel(application) as T + throw IllegalArgumentException("Unknown ViewModel Class") + } + +} \ No newline at end of file diff --git a/buildSrc/src/main/java/AppDependencies.kt b/buildSrc/src/main/java/AppDependencies.kt index 9e025e5..652a148 100644 --- a/buildSrc/src/main/java/AppDependencies.kt +++ b/buildSrc/src/main/java/AppDependencies.kt @@ -1,3 +1,4 @@ +import core.DependencyList import org.gradle.api.artifacts.dsl.DependencyHandler object AppLibraries: DependencyList() { @@ -31,6 +32,11 @@ object AppLibraries: DependencyList() { val lazyHorizontalGrid = "androidx.compose.foundation:foundation:1.3.1" val calendar = "com.kizitonwose.calendar:compose:2.1.1" val asyncImage = "io.coil-kt:coil-compose:2.2.0" + + val roomRuntime = "androidx.room:room-runtime:${Versions.room}" + val roomKtx = "androidx.room:room-ktx:${Versions.room}" + + val jsoup = "org.jsoup:jsoup:1.15.4" } @@ -58,7 +64,12 @@ object AndroidTestLibraries: DependencyList() { object TestLibraries: DependencyList() { //test libs - private val junit = "junit:junit:${Versions.junit}" + val junit = "junit:junit:${Versions.junit}" +} + +object KaptLibraries: DependencyList(){ + + val compiler = "androidx.room:room-compiler:${Versions.room}" } /** diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt index 775e72c..2285531 100644 --- a/buildSrc/src/main/java/Versions.kt +++ b/buildSrc/src/main/java/Versions.kt @@ -13,6 +13,7 @@ object Versions { val constraintLayout = "2.0.0-beta8" val compose = "1.4.1" + val room = "2.2.6" //test val junit = "4.12" diff --git a/buildSrc/src/main/java/DependencyList.kt b/buildSrc/src/main/java/core/DependencyList.kt similarity index 96% rename from buildSrc/src/main/java/DependencyList.kt rename to buildSrc/src/main/java/core/DependencyList.kt index 55f327f..481712e 100644 --- a/buildSrc/src/main/java/DependencyList.kt +++ b/buildSrc/src/main/java/core/DependencyList.kt @@ -1,3 +1,5 @@ +package core + open class DependencyList { fun list(): List{