mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-15 02:57:04 +05:30
refactor: inline BaseActivity
indirection
This commit is contained in:
parent
74ccf74f8d
commit
bf0a6c40e8
2 changed files with 48 additions and 84 deletions
|
@ -1,69 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright © Harsh Shandilya.
|
|
||||||
* Use of this source code is governed by an MIT-style
|
|
||||||
* license that can be found in the LICENSE file or at
|
|
||||||
* https://opensource.org/licenses/MIT.
|
|
||||||
*/
|
|
||||||
package dev.msfjarvis.claw.android
|
|
||||||
|
|
||||||
import android.app.assist.AssistContent
|
|
||||||
import android.graphics.Color
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.activity.ComponentActivity
|
|
||||||
import androidx.activity.SystemBarStyle
|
|
||||||
import androidx.activity.compose.setContent
|
|
||||||
import androidx.activity.enableEdgeToEdge
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.runtime.Stable
|
|
||||||
import androidx.compose.ui.platform.LocalUriHandler
|
|
||||||
import androidx.core.net.toUri
|
|
||||||
import com.deliveryhero.whetstone.Whetstone
|
|
||||||
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
|
|
||||||
import dev.msfjarvis.claw.common.theme.LobstersTheme
|
|
||||||
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
|
||||||
import javax.inject.Inject
|
|
||||||
|
|
||||||
/** A base class that encapsulates all activities used by Claw. */
|
|
||||||
@Stable
|
|
||||||
abstract class BaseActivity : ComponentActivity() {
|
|
||||||
|
|
||||||
@Inject lateinit var urlLauncher: UrlLauncher
|
|
||||||
@Inject lateinit var viewModel: ClawViewModel
|
|
||||||
var webUri: String? = null
|
|
||||||
|
|
||||||
/** Entrypoint to show a [Composable] as this [ComponentActivity]'s view. */
|
|
||||||
@Composable abstract fun Content()
|
|
||||||
|
|
||||||
/** Overrideable method to call stuff in [onCreate]. */
|
|
||||||
open fun preLaunch() {}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
preLaunch()
|
|
||||||
Whetstone.inject(this)
|
|
||||||
enableEdgeToEdge(
|
|
||||||
statusBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.TRANSPARENT),
|
|
||||||
navigationBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.TRANSPARENT),
|
|
||||||
)
|
|
||||||
setContent {
|
|
||||||
LobstersTheme(
|
|
||||||
dynamicColor = true,
|
|
||||||
providedValues = arrayOf(LocalUriHandler provides urlLauncher),
|
|
||||||
) {
|
|
||||||
Content()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onProvideAssistContent(outContent: AssistContent?) {
|
|
||||||
super.onProvideAssistContent(outContent)
|
|
||||||
val uri = webUri
|
|
||||||
if (outContent != null) {
|
|
||||||
if (uri != null) {
|
|
||||||
outContent.webUri = uri.toUri()
|
|
||||||
} else {
|
|
||||||
outContent.webUri = null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -6,32 +6,65 @@
|
||||||
*/
|
*/
|
||||||
package dev.msfjarvis.claw.android
|
package dev.msfjarvis.claw.android
|
||||||
|
|
||||||
|
import android.app.assist.AssistContent
|
||||||
|
import android.graphics.Color
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.activity.ComponentActivity
|
||||||
|
import androidx.activity.SystemBarStyle
|
||||||
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
|
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
|
||||||
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
|
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.ui.platform.LocalUriHandler
|
||||||
|
import androidx.core.net.toUri
|
||||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||||
|
import com.deliveryhero.whetstone.Whetstone
|
||||||
import com.deliveryhero.whetstone.activity.ContributesActivityInjector
|
import com.deliveryhero.whetstone.activity.ContributesActivityInjector
|
||||||
import dev.msfjarvis.claw.android.ui.screens.Nav3Screen
|
import dev.msfjarvis.claw.android.ui.screens.Nav3Screen
|
||||||
|
import dev.msfjarvis.claw.common.theme.LobstersTheme
|
||||||
|
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
|
||||||
@ContributesActivityInjector
|
@ContributesActivityInjector
|
||||||
class MainActivity : BaseActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
|
@Inject lateinit var urlLauncher: UrlLauncher
|
||||||
@Composable
|
var webUri: String? = null
|
||||||
override fun Content() {
|
|
||||||
val windowSizeClass = calculateWindowSizeClass(this)
|
|
||||||
Nav3Screen(
|
|
||||||
urlLauncher = urlLauncher,
|
|
||||||
windowSizeClass = windowSizeClass,
|
|
||||||
setWebUri = { url -> webUri = url },
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun preLaunch() {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.preLaunch()
|
super.onCreate(savedInstanceState)
|
||||||
enableEdgeToEdge()
|
|
||||||
installSplashScreen()
|
installSplashScreen()
|
||||||
|
Whetstone.inject(this)
|
||||||
|
enableEdgeToEdge(
|
||||||
|
statusBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.TRANSPARENT),
|
||||||
|
navigationBarStyle = SystemBarStyle.light(Color.TRANSPARENT, Color.TRANSPARENT),
|
||||||
|
)
|
||||||
|
setContent {
|
||||||
|
LobstersTheme(
|
||||||
|
dynamicColor = true,
|
||||||
|
providedValues = arrayOf(LocalUriHandler provides urlLauncher),
|
||||||
|
) {
|
||||||
|
val windowSizeClass = calculateWindowSizeClass(this)
|
||||||
|
Nav3Screen(
|
||||||
|
urlLauncher = urlLauncher,
|
||||||
|
windowSizeClass = windowSizeClass,
|
||||||
|
setWebUri = { url -> webUri = url },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onProvideAssistContent(outContent: AssistContent?) {
|
||||||
|
super.onProvideAssistContent(outContent)
|
||||||
|
val uri = webUri
|
||||||
|
if (outContent != null) {
|
||||||
|
if (uri != null) {
|
||||||
|
outContent.webUri = uri.toUri()
|
||||||
|
} else {
|
||||||
|
outContent.webUri = null
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue