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{