diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/BaseActivity.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/BaseActivity.kt new file mode 100644 index 00000000..e2481c33 --- /dev/null +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/BaseActivity.kt @@ -0,0 +1,76 @@ +/* + * Copyright © 2021-2024 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.net.Uri +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.ui.platform.LocalUriHandler +import com.deliveryhero.whetstone.Whetstone +import dev.msfjarvis.claw.android.viewmodel.ClawViewModel +import dev.msfjarvis.claw.common.comments.HTMLConverter +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. */ +abstract class BaseActivity : ComponentActivity() { + + @Inject lateinit var urlLauncher: UrlLauncher + @Inject lateinit var htmlConverter: HTMLConverter + @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) + if (outContent != null) { + if (webUri != null) { + outContent.webUri = Uri.parse(webUri) + } else { + outContent.webUri = null + } + } + } +} diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/MainActivity.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/MainActivity.kt index 3536964c..2023751b 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/MainActivity.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/MainActivity.kt @@ -1,80 +1,36 @@ /* - * Copyright © 2021-2023 Harsh Shandilya. + * Copyright © 2021-2024 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.net.Uri -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.ui.platform.LocalUriHandler +import androidx.compose.runtime.Composable 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.LobstersPostsScreen -import dev.msfjarvis.claw.common.comments.HTMLConverter -import dev.msfjarvis.claw.common.theme.LobstersTheme -import dev.msfjarvis.claw.common.urllauncher.UrlLauncher -import javax.inject.Inject @ContributesActivityInjector -class MainActivity : ComponentActivity() { - - @Inject lateinit var urlLauncher: UrlLauncher - @Inject lateinit var htmlConverter: HTMLConverter - private var webUri: String? = null +class MainActivity : BaseActivity() { @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) - 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, - ), + @Composable + override fun Content() { + val windowSizeClass = calculateWindowSizeClass(this) + LobstersPostsScreen( + urlLauncher = urlLauncher, + htmlConverter = htmlConverter, + windowSizeClass = windowSizeClass, + setWebUri = { url -> webUri = url }, ) - setContent { - val windowSizeClass = calculateWindowSizeClass(this) - LobstersTheme( - dynamicColor = true, - providedValues = arrayOf(LocalUriHandler provides urlLauncher), - ) { - LobstersPostsScreen( - urlLauncher = urlLauncher, - htmlConverter = htmlConverter, - windowSizeClass = windowSizeClass, - setWebUri = { url -> webUri = url }, - ) - } - } } - override fun onProvideAssistContent(outContent: AssistContent?) { - super.onProvideAssistContent(outContent) - if (outContent != null) { - if (webUri != null) { - outContent.webUri = Uri.parse(webUri) - } else { - outContent.webUri = null - } - } + override fun preLaunch() { + super.preLaunch() + installSplashScreen() } companion object { diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/SearchActivity.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/SearchActivity.kt index 0c81693a..40a96188 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/SearchActivity.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/SearchActivity.kt @@ -1,75 +1,24 @@ /* - * Copyright © 2021-2023 Harsh Shandilya. + * Copyright © 2021-2024 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.net.Uri -import android.os.Bundle -import androidx.activity.ComponentActivity -import androidx.activity.SystemBarStyle -import androidx.activity.compose.setContent -import androidx.activity.enableEdgeToEdge -import androidx.compose.ui.platform.LocalUriHandler -import com.deliveryhero.whetstone.Whetstone +import androidx.compose.runtime.Composable import com.deliveryhero.whetstone.activity.ContributesActivityInjector import dev.msfjarvis.claw.android.ui.screens.SearchScreen -import dev.msfjarvis.claw.android.viewmodel.ClawViewModel -import dev.msfjarvis.claw.common.comments.HTMLConverter -import dev.msfjarvis.claw.common.theme.LobstersTheme -import dev.msfjarvis.claw.common.urllauncher.UrlLauncher -import javax.inject.Inject @ContributesActivityInjector -class SearchActivity : ComponentActivity() { - - @Inject lateinit var urlLauncher: UrlLauncher - @Inject lateinit var htmlConverter: HTMLConverter - @Inject lateinit var viewModel: ClawViewModel - private var webUri: String? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - Whetstone.inject(this) - enableEdgeToEdge( - statusBarStyle = - SystemBarStyle.light( - Color.TRANSPARENT, - Color.TRANSPARENT, - ), - navigationBarStyle = - SystemBarStyle.light( - Color.TRANSPARENT, - Color.TRANSPARENT, - ), +class SearchActivity : BaseActivity() { + @Composable + override fun Content() { + SearchScreen( + urlLauncher = urlLauncher, + htmlConverter = htmlConverter, + setWebUri = { webUri = it }, + viewModel = viewModel, ) - setContent { - LobstersTheme( - dynamicColor = true, - providedValues = arrayOf(LocalUriHandler provides urlLauncher), - ) { - SearchScreen( - urlLauncher = urlLauncher, - htmlConverter = htmlConverter, - setWebUri = { webUri = it }, - viewModel = viewModel, - ) - } - } - } - - override fun onProvideAssistContent(outContent: AssistContent?) { - super.onProvideAssistContent(outContent) - if (outContent != null) { - if (webUri != null) { - outContent.webUri = Uri.parse(webUri) - } else { - outContent.webUri = null - } - } } } diff --git a/android/src/main/res/values/themes.xml b/android/src/main/res/values/themes.xml index abf86224..16b0f2b4 100644 --- a/android/src/main/res/values/themes.xml +++ b/android/src/main/res/values/themes.xml @@ -1,5 +1,5 @@