|
@@ -1,7 +1,10 @@
|
|
package com.zaojiao.app
|
|
package com.zaojiao.app
|
|
|
|
|
|
|
|
+import android.content.Intent
|
|
|
|
+import android.os.BatteryManager
|
|
import android.os.Build
|
|
import android.os.Build
|
|
import android.os.Bundle
|
|
import android.os.Bundle
|
|
|
|
+import android.util.Log
|
|
import android.view.WindowManager
|
|
import android.view.WindowManager
|
|
import androidx.activity.compose.setContent
|
|
import androidx.activity.compose.setContent
|
|
import androidx.compose.foundation.isSystemInDarkTheme
|
|
import androidx.compose.foundation.isSystemInDarkTheme
|
|
@@ -13,12 +16,24 @@ import androidx.core.view.WindowInsetsCompat
|
|
import androidx.core.view.WindowInsetsControllerCompat
|
|
import androidx.core.view.WindowInsetsControllerCompat
|
|
import androidx.fragment.app.FragmentActivity
|
|
import androidx.fragment.app.FragmentActivity
|
|
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
|
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
|
|
|
+import com.zaojiao.app.core.auth.data.AuthRepository
|
|
|
|
+import com.zaojiao.app.core.auth.model.TokenModel
|
|
|
|
+import com.zaojiao.app.core.auth.ui.LoginActivity
|
|
import com.zaojiao.app.core.auth.utils.AuthUtils
|
|
import com.zaojiao.app.core.auth.utils.AuthUtils
|
|
|
|
+import com.zaojiao.app.core.auth.utils.ITokenRequest
|
|
import com.zaojiao.app.feat.design.BackgroundTheme
|
|
import com.zaojiao.app.feat.design.BackgroundTheme
|
|
import com.zaojiao.app.feat.design.LocalBackgroundTheme
|
|
import com.zaojiao.app.feat.design.LocalBackgroundTheme
|
|
import com.zaojiao.app.feat.design.LocalOnFinishDispatcher
|
|
import com.zaojiao.app.feat.design.LocalOnFinishDispatcher
|
|
import com.zaojiao.app.ui.App
|
|
import com.zaojiao.app.ui.App
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
|
|
+import kotlinx.coroutines.CoroutineScope
|
|
|
|
+import kotlinx.coroutines.MainScope
|
|
|
|
+import kotlinx.coroutines.cancel
|
|
|
|
+import kotlinx.coroutines.flow.collect
|
|
|
|
+import kotlinx.coroutines.launch
|
|
|
|
+import java.util.concurrent.CompletableFuture
|
|
|
|
+import java.util.concurrent.ConcurrentHashMap
|
|
|
|
+import java.util.concurrent.atomic.AtomicInteger
|
|
import javax.inject.Inject
|
|
import javax.inject.Inject
|
|
|
|
|
|
private val LightBackgroundTheme = BackgroundTheme(color = Color.White)
|
|
private val LightBackgroundTheme = BackgroundTheme(color = Color.White)
|
|
@@ -26,12 +41,31 @@ private val LightBackgroundTheme = BackgroundTheme(color = Color.White)
|
|
private val DarkBackgroundTheme = BackgroundTheme(color = Color.Black)
|
|
private val DarkBackgroundTheme = BackgroundTheme(color = Color.Black)
|
|
|
|
|
|
@AndroidEntryPoint
|
|
@AndroidEntryPoint
|
|
-class MainActivity : FragmentActivity() {
|
|
|
|
|
|
+class MainActivity : FragmentActivity(), ITokenRequest, CoroutineScope by MainScope() {
|
|
|
|
+ companion object {
|
|
|
|
+ private val tokenFlag = 99
|
|
|
|
+ private val requests = ConcurrentHashMap<Int, CompletableFuture<TokenModel?>>()
|
|
|
|
+ private val nextRequestCode = AtomicInteger(0)
|
|
|
|
+ }
|
|
|
|
+
|
|
private lateinit var windowInsetsController: WindowInsetsControllerCompat
|
|
private lateinit var windowInsetsController: WindowInsetsControllerCompat
|
|
|
|
+
|
|
|
|
+ @Inject
|
|
|
|
+ public lateinit var authRepository: AuthRepository
|
|
|
|
+
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
AuthUtils.attach(this)
|
|
AuthUtils.attach(this)
|
|
super.onCreate(savedInstanceState)
|
|
super.onCreate(savedInstanceState)
|
|
configureSystemBar()
|
|
configureSystemBar()
|
|
|
|
+
|
|
|
|
+ getSystemService(BatteryManager::class.java)
|
|
|
|
+
|
|
|
|
+ launch {
|
|
|
|
+ authRepository.state.collect {
|
|
|
|
+ Log.e("MainActivity", "onCreate: $it")
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
setContent {
|
|
setContent {
|
|
val systemUiController = rememberSystemUiController()
|
|
val systemUiController = rememberSystemUiController()
|
|
|
|
|
|
@@ -68,6 +102,46 @@ class MainActivity : FragmentActivity() {
|
|
|
|
|
|
override fun onDestroy() {
|
|
override fun onDestroy() {
|
|
AuthUtils.detach()
|
|
AuthUtils.detach()
|
|
|
|
+ this.cancel()
|
|
super.onDestroy()
|
|
super.onDestroy()
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ override fun requestToken(): CompletableFuture<TokenModel?> {
|
|
|
|
+ val requestCode = nextRequestCode.getAndIncrement()
|
|
|
|
+ val tokenRequestCode = requestCode + tokenFlag shl 10
|
|
|
|
+ val future = CompletableFuture<TokenModel?>()
|
|
|
|
+ requests[tokenRequestCode] = future
|
|
|
|
+
|
|
|
|
+ val intent = Intent(this, LoginActivity::class.java)
|
|
|
|
+ startActivityForResult(intent, tokenRequestCode)
|
|
|
|
+ return future
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ override fun requestLogin() {
|
|
|
|
+ startActivity(Intent(this, LoginActivity::class.java))
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
|
|
|
+ super.onActivityResult(requestCode, resultCode, data)
|
|
|
|
+ if (requestCode shr 10 == tokenFlag) {
|
|
|
|
+ when (resultCode) {
|
|
|
|
+ RESULT_CANCELED -> {
|
|
|
|
+ requests[requestCode]!!.complete(null)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ RESULT_OK -> {
|
|
|
|
+ requests[requestCode]!!.complete(
|
|
|
|
+ TokenModel(
|
|
|
|
+ accessToken = "1234",
|
|
|
|
+ refreshToken = "5678",
|
|
|
|
+ )
|
|
|
|
+ )
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ else -> {
|
|
|
|
+ requests[requestCode]!!.complete(null)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|