Skip to content

Commit

Permalink
Update everything
Browse files Browse the repository at this point in the history
  • Loading branch information
tylerbwong committed Feb 16, 2024
1 parent f5ba4bf commit 4c42722
Show file tree
Hide file tree
Showing 18 changed files with 105 additions and 93 deletions.
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ android {
}

buildFeatures {
buildConfig = true
compose = true
viewBinding = true
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package me.tylerbwong.stack.base.updater

import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.IntentSenderRequest
import me.tylerbwong.stack.data.updater.AppUpdater
import me.tylerbwong.stack.ui.MainActivity

class NoOpAppUpdater : AppUpdater {
override fun checkForUpdate(activity: MainActivity) {
override fun checkForUpdate(
checkForPendingInstall: () -> Unit,
activityResultLauncher: ActivityResultLauncher<IntentSenderRequest>,
) {
// No-op
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package me.tylerbwong.stack.data.updater

import me.tylerbwong.stack.ui.MainActivity
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.IntentSenderRequest

interface AppUpdater {
fun checkForUpdate(activity: MainActivity)
fun checkForUpdate(
checkForPendingInstall: () -> Unit,
activityResultLauncher: ActivityResultLauncher<IntentSenderRequest>,
)
fun checkForPendingInstall(onDownloadFinished: () -> Unit, onDownloadFailed: () -> Unit)
fun completeUpdate()
fun unregisterListener()

companion object {
const val APP_UPDATE_REQUEST_CODE = 3141
}
}
47 changes: 23 additions & 24 deletions app/src/main/kotlin/me/tylerbwong/stack/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.content.Intent
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
Expand All @@ -23,7 +24,6 @@ import me.tylerbwong.stack.ui.home.HomeFragment
import me.tylerbwong.stack.ui.inbox.InboxFragment
import me.tylerbwong.stack.ui.questions.ask.AskQuestionActivity
import me.tylerbwong.stack.ui.search.SearchFragment
import me.tylerbwong.stack.ui.settings.Experimental
import me.tylerbwong.stack.ui.settings.SettingsActivity
import me.tylerbwong.stack.ui.settings.sites.SitesActivity
import me.tylerbwong.stack.ui.shortcuts.pushAskQuestionShortcut
Expand All @@ -39,9 +39,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
@Inject
lateinit var workScheduler: WorkScheduler

@Inject
lateinit var experimental: Experimental

@Inject
lateinit var appUpdater: AppUpdater

Expand All @@ -57,6 +54,16 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl

private val authTabIds = listOf(R.id.ask, R.id.inbox, R.id.drafts)

private val activityResultLauncher = registerForActivityResult(
ActivityResultContracts.StartIntentSenderForResult(),
) { result ->
if (result.resultCode == RESULT_OK) {
checkForPendingInstall()
} else {
showUpdateNotDownloaded()
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setSupportActionBar(binding.toolbar)
Expand Down Expand Up @@ -106,7 +113,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
// }
// }

appUpdater.checkForUpdate(this)
appUpdater.checkForUpdate(::checkForPendingInstall, activityResultLauncher)
workScheduler.schedule()
populateContent(savedInstanceState)
val selectedTab = intent.getIntExtra(SELECTED_TAB, 0)
Expand Down Expand Up @@ -137,23 +144,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
return super.onOptionsItemSelected(item)
}

@Suppress("deprecation") // Until play core supports new activity result API
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == AppUpdater.APP_UPDATE_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
checkForPendingInstall()
} else {
binding.bottomNav.showSnackbar(
R.string.update_not_downloaded,
R.string.update,
Snackbar.LENGTH_LONG,
true
) { appUpdater.checkForUpdate(this) }
}
}
}

override fun onDestroy() {
super.onDestroy()
appUpdater.unregisterListener()
Expand Down Expand Up @@ -215,7 +205,16 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
}
}

internal fun checkForPendingInstall() {
private fun showUpdateNotDownloaded() {
binding.bottomNav.showSnackbar(
R.string.update_not_downloaded,
R.string.update,
Snackbar.LENGTH_LONG,
true
) { appUpdater.checkForUpdate(::checkForPendingInstall, activityResultLauncher) }
}

private fun checkForPendingInstall() {
appUpdater.checkForPendingInstall(
onDownloadFinished = {
binding.bottomNav.showSnackbar(
Expand All @@ -235,7 +234,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
R.string.retry,
shouldAnchorView = true
) {
appUpdater.checkForUpdate(this)
appUpdater.checkForUpdate(::checkForPendingInstall, activityResultLauncher)
}
}
)
Expand Down
11 changes: 5 additions & 6 deletions app/src/main/kotlin/me/tylerbwong/stack/ui/StackApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ class StackApplication : Application(), Configuration.Provider, ImageLoaderFacto
@Inject
lateinit var okHttpClient: Lazy<OkHttpClient>

override val workManagerConfiguration: Configuration
get() = Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()

override fun onCreate() {
if (ProcessPhoenix.isPhoenixProcess(this)) {
return
Expand All @@ -35,12 +40,6 @@ class StackApplication : Application(), Configuration.Provider, ImageLoaderFacto
initializers.forEach { initializer -> initializer() }
}

override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}

override fun newImageLoader(): ImageLoader {
return ImageLoader.Builder(this)
.crossfade(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import androidx.appcompat.app.AppCompatDelegate
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.AccountCircle
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.filled.Book
import androidx.compose.material.icons.filled.Brightness2
import androidx.compose.material.icons.filled.Cloud
Expand Down Expand Up @@ -74,7 +74,7 @@ fun SettingsScreen(
navigationIcon = {
IconButton(onClick = onBackPressed) {
Icon(
imageVector = Icons.Filled.ArrowBack,
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = null,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.ExperimentalMaterial3Api
Expand Down Expand Up @@ -76,7 +76,7 @@ fun DonationScreen(viewModel: DonationViewModel = viewModel(), onBackPressed: ()
navigationIcon = {
IconButton(onClick = onBackPressed) {
Icon(
imageVector = Icons.Filled.ArrowBack,
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = null,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package me.tylerbwong.stack.ui.settings.libraries

import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
Expand Down Expand Up @@ -40,7 +40,7 @@ fun LibrariesScreen(onBackPressed: () -> Unit) {
navigationIcon = {
IconButton(onClick = onBackPressed) {
Icon(
imageVector = Icons.Filled.ArrowBack,
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = null,
)
}
Expand Down Expand Up @@ -70,8 +70,8 @@ fun LibrariesScreen(onBackPressed: () -> Unit) {
padding = LibraryDefaults.libraryPadding(
badgeContentPadding = PaddingValues(horizontal = 8.dp, vertical = 6.dp),
),
onLibraryClick = { library ->
val website = library.website
onLibraryClick = {
val website = it.library.website
if (!website.isNullOrEmpty()) {
context.launchUrl(url = website)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,13 @@ import java.net.UnknownHostException
import javax.inject.Inject
import kotlin.coroutines.cancellation.CancellationException

class CrashlyticsTree @Inject constructor() : Timber.Tree() {
class CrashlyticsTree @Inject constructor(
private val firebaseCrashlytics: FirebaseCrashlytics,
) : Timber.Tree() {
override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {
when (priority) {
Log.DEBUG, Log.INFO, Log.VERBOSE -> return
else -> {
val firebaseCrashlytics = FirebaseCrashlytics.getInstance()
if (t == null) {
firebaseCrashlytics.recordException(IllegalStateException(message))
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
package me.tylerbwong.stack.play.updater

import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.IntentSenderRequest
import com.google.android.play.core.appupdate.AppUpdateManager
import com.google.android.play.core.appupdate.AppUpdateOptions
import com.google.android.play.core.install.InstallStateUpdatedListener
import com.google.android.play.core.install.model.AppUpdateType.FLEXIBLE
import com.google.android.play.core.install.model.InstallStatus
import com.google.android.play.core.install.model.UpdateAvailability
import me.tylerbwong.stack.data.updater.AppUpdater
import me.tylerbwong.stack.ui.MainActivity

class PlayAppUpdater(private val manager: AppUpdateManager) : AppUpdater {

private var listener: InstallStateUpdatedListener? = null

override fun checkForUpdate(activity: MainActivity) {
override fun checkForUpdate(
checkForPendingInstall: () -> Unit,
activityResultLauncher: ActivityResultLauncher<IntentSenderRequest>,
) {
val listener = InstallStateUpdatedListener { state ->
if (state.installStatus() == InstallStatus.DOWNLOADED) {
activity.checkForPendingInstall()
checkForPendingInstall()
}
}
this.listener = listener
Expand All @@ -25,7 +30,11 @@ class PlayAppUpdater(private val manager: AppUpdateManager) : AppUpdater {
if (it.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE &&
it.isUpdateTypeAllowed(FLEXIBLE)
) {
manager.startUpdateFlowForResult(it, FLEXIBLE, activity, APP_UPDATE_REQUEST_CODE)
manager.startUpdateFlowForResult(
it,
activityResultLauncher,
AppUpdateOptions.defaultOptions(FLEXIBLE),
)
}
}
}
Expand All @@ -49,8 +58,4 @@ class PlayAppUpdater(private val manager: AppUpdateManager) : AppUpdater {
override fun unregisterListener() {
listener?.let { manager.unregisterListener(it) }
}

companion object {
const val APP_UPDATE_REQUEST_CODE = 3141
}
}
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,5 @@ allprojects {
}

tasks.register("clean", Delete::class) {
delete(rootProject.buildDir)
delete(rootProject.layout.buildDirectory)
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package me.tylerbwong.compose.preference

import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Divider
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ProvideTextStyle
import androidx.compose.runtime.Composable
Expand All @@ -16,7 +16,7 @@ import androidx.compose.ui.unit.sp

fun PreferenceScope.PreferenceCategory(
header: @Composable () -> Unit,
divider: (@Composable () -> Unit)? = { Divider() },
divider: (@Composable () -> Unit)? = { HorizontalDivider() },
content: PreferenceScope.() -> Unit,
) {
item {
Expand Down
1 change: 0 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ android.enableResourceOptimizations=true
android.nonTransitiveRClass=true
android.useAndroidX=true
android.defaults.buildfeatures.aidl=false
android.defaults.buildfeatures.buildconfig=true
android.defaults.buildfeatures.renderscript=false
android.defaults.buildfeatures.shaders=false
kotlin.code.style=official
Expand Down
Loading

0 comments on commit 4c42722

Please sign in to comment.