refactor: inline BaseActivity indirection

This commit is contained in:
Harsh Shandilya 2025-05-25 15:03:11 +05:30
parent 74ccf74f8d
commit bf0a6c40e8
2 changed files with 48 additions and 84 deletions

View file

@ -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
}
}
}
}

View file

@ -6,32 +6,65 @@
*/
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.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
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 com.deliveryhero.whetstone.Whetstone
import com.deliveryhero.whetstone.activity.ContributesActivityInjector
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
class MainActivity : BaseActivity() {
class MainActivity : ComponentActivity() {
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
@Composable
override fun Content() {
val windowSizeClass = calculateWindowSizeClass(this)
Nav3Screen(
urlLauncher = urlLauncher,
windowSizeClass = windowSizeClass,
setWebUri = { url -> webUri = url },
)
}
@Inject lateinit var urlLauncher: UrlLauncher
var webUri: String? = null
override fun preLaunch() {
super.preLaunch()
enableEdgeToEdge()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
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 {