imp: Monolithic arch
This commit is contained in:
parent
94892f12f5
commit
72a1f15473
@ -1,3 +1,5 @@
|
||||
import com.android.build.gradle.internal.tasks.factory.dependsOn
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.looker.android.application)
|
||||
alias(libs.plugins.looker.hilt.work)
|
||||
@ -80,12 +82,6 @@ android {
|
||||
dependencies {
|
||||
|
||||
implementation(libs.monitor)
|
||||
modules(
|
||||
Modules.coreCommon,
|
||||
Modules.coreNetwork,
|
||||
Modules.coreDatastore,
|
||||
Modules.coreDI,
|
||||
)
|
||||
|
||||
implementation(libs.material)
|
||||
implementation(libs.core.ktx)
|
||||
@ -97,18 +93,50 @@ dependencies {
|
||||
implementation(libs.sqlite.ktx)
|
||||
implementation(libs.coil.kt)
|
||||
implementation(libs.datetime)
|
||||
implementation(libs.coroutines.android)
|
||||
implementation(libs.jackson.core)
|
||||
implementation(libs.image.viewer)
|
||||
|
||||
implementation(libs.datastore.core)
|
||||
implementation(libs.datastore.proto)
|
||||
|
||||
implementation(libs.coroutines.core)
|
||||
implementation(libs.coroutines.android)
|
||||
implementation(libs.coroutines.guava)
|
||||
implementation(libs.libsu.core)
|
||||
implementation(libs.shizuku.api)
|
||||
api(libs.shizuku.provider)
|
||||
|
||||
implementation(libs.ktor.core)
|
||||
implementation(libs.ktor.okhttp)
|
||||
|
||||
testImplementation(platform(libs.junit.bom))
|
||||
testImplementation(libs.junit.jupiter)
|
||||
testImplementation(libs.ktor.mock)
|
||||
testImplementation(libs.coroutines.test)
|
||||
testImplementation(kotlin("test"))
|
||||
testRuntimeOnly(libs.junit.platform)
|
||||
|
||||
androidTestImplementation(platform(libs.junit.bom))
|
||||
androidTestImplementation(libs.bundles.test.android)
|
||||
|
||||
// debugImplementation(libs.leakcanary)
|
||||
}
|
||||
|
||||
// using a task as a preBuild dependency instead of a function that takes some time insures that it runs
|
||||
task("detectAndroidLocals") {
|
||||
val langsList: MutableSet<String> = HashSet()
|
||||
|
||||
// in /res are (almost) all languages that have a translated string is saved. this is safer and saves some time
|
||||
fileTree("src/main/res").visit {
|
||||
if (this.file.path.endsWith("strings.xml") &&
|
||||
this.file.canonicalFile.readText().contains("<string")
|
||||
) {
|
||||
var languageCode = this.file.parentFile.name.replace("values-", "")
|
||||
languageCode = if (languageCode == "values") "en" else languageCode
|
||||
langsList.add(languageCode)
|
||||
}
|
||||
}
|
||||
val langsListString = "{${langsList.sorted().joinToString(",") { "\"${it}\"" }}}"
|
||||
android.defaultConfig.buildConfigField("String[]", "DETECTED_LOCALES", langsListString)
|
||||
}
|
||||
tasks.preBuild.dependsOn("detectAndroidLocals")
|
||||
|
@ -1,10 +1,10 @@
|
||||
package com.looker.droidify.sync
|
||||
|
||||
import com.looker.network.Downloader
|
||||
import com.looker.network.NetworkResponse
|
||||
import com.looker.droidify.network.Downloader
|
||||
import com.looker.droidify.network.NetworkResponse
|
||||
import com.looker.network.ProgressListener
|
||||
import com.looker.network.header.HeadersBuilder
|
||||
import com.looker.network.validation.FileValidator
|
||||
import com.looker.droidify.network.header.HeadersBuilder
|
||||
import com.looker.droidify.network.validation.FileValidator
|
||||
import com.looker.droidify.sync.common.assets
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.ensureActive
|
||||
|
@ -174,7 +174,7 @@
|
||||
android:permission="android.permission.INTERACT_ACROSS_USERS_FULL" />
|
||||
|
||||
<provider
|
||||
android:name="com.looker.core.common.cache.Cache$Provider"
|
||||
android:name=".utility.common.cache.Cache$Provider"
|
||||
android:authorities="${applicationId}.provider.cache"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true" />
|
||||
|
@ -14,16 +14,16 @@ import coil.ImageLoader
|
||||
import coil.ImageLoaderFactory
|
||||
import coil.disk.DiskCache
|
||||
import coil.memory.MemoryCache
|
||||
import com.looker.core.common.Constants
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.core.common.extension.getInstalledPackagesCompat
|
||||
import com.looker.core.common.extension.jobScheduler
|
||||
import com.looker.core.common.log
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.core.datastore.get
|
||||
import com.looker.core.datastore.model.AutoSync
|
||||
import com.looker.core.datastore.model.ProxyPreference
|
||||
import com.looker.core.datastore.model.ProxyType
|
||||
import com.looker.droidify.utility.common.Constants
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.utility.common.extension.getInstalledPackagesCompat
|
||||
import com.looker.droidify.utility.common.extension.jobScheduler
|
||||
import com.looker.droidify.utility.common.log
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.get
|
||||
import com.looker.droidify.datastore.model.AutoSync
|
||||
import com.looker.droidify.datastore.model.ProxyPreference
|
||||
import com.looker.droidify.datastore.model.ProxyType
|
||||
import com.looker.droidify.content.ProductPreferences
|
||||
import com.looker.droidify.database.Database
|
||||
import com.looker.droidify.index.RepositoryUpdater
|
||||
@ -35,7 +35,7 @@ import com.looker.droidify.sync.toJobNetworkType
|
||||
import com.looker.droidify.utility.extension.toInstalledItem
|
||||
import com.looker.droidify.work.CleanUpWorker
|
||||
import com.looker.droidify.installer.InstallManager
|
||||
import com.looker.network.Downloader
|
||||
import com.looker.droidify.network.Downloader
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -49,7 +49,6 @@ import java.net.Proxy
|
||||
import javax.inject.Inject
|
||||
import kotlin.time.Duration.Companion.INFINITE
|
||||
import kotlin.time.Duration.Companion.hours
|
||||
import com.looker.core.common.R as CommonR
|
||||
|
||||
@HiltAndroidApp
|
||||
class Droidify : Application(), ImageLoaderFactory, Configuration.Provider {
|
||||
@ -226,7 +225,7 @@ class Droidify : Application(), ImageLoaderFactory, Configuration.Provider {
|
||||
return ImageLoader.Builder(this)
|
||||
.memoryCache(memoryCache)
|
||||
.diskCache(diskCache)
|
||||
.error(CommonR.drawable.ic_cannot_load)
|
||||
.error(R.drawable.ic_cannot_load)
|
||||
.crossfade(350)
|
||||
.build()
|
||||
}
|
||||
|
@ -14,17 +14,19 @@ import androidx.core.view.WindowCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.commit
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.looker.core.common.DeeplinkType
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.common.deeplinkType
|
||||
import com.looker.core.common.extension.homeAsUp
|
||||
import com.looker.core.common.extension.inputManager
|
||||
import com.looker.core.common.getInstallPackageName
|
||||
import com.looker.core.common.requestNotificationPermission
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.core.datastore.extension.getThemeRes
|
||||
import com.looker.core.datastore.get
|
||||
import com.looker.droidify.utility.common.DeeplinkType
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.deeplinkType
|
||||
import com.looker.droidify.utility.common.extension.homeAsUp
|
||||
import com.looker.droidify.utility.common.extension.inputManager
|
||||
import com.looker.droidify.utility.common.getInstallPackageName
|
||||
import com.looker.droidify.utility.common.requestNotificationPermission
|
||||
import com.looker.droidify.database.CursorOwner
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.extension.getThemeRes
|
||||
import com.looker.droidify.datastore.get
|
||||
import com.looker.droidify.installer.InstallManager
|
||||
import com.looker.droidify.installer.model.installFrom
|
||||
import com.looker.droidify.ui.appDetail.AppDetailFragment
|
||||
import com.looker.droidify.ui.favourites.FavouritesFragment
|
||||
import com.looker.droidify.ui.repository.EditRepositoryFragment
|
||||
@ -32,8 +34,6 @@ import com.looker.droidify.ui.repository.RepositoriesFragment
|
||||
import com.looker.droidify.ui.repository.RepositoryFragment
|
||||
import com.looker.droidify.ui.settings.SettingsFragment
|
||||
import com.looker.droidify.ui.tabsFragment.TabsFragment
|
||||
import com.looker.droidify.installer.InstallManager
|
||||
import com.looker.droidify.installer.model.installFrom
|
||||
import dagger.hilt.EntryPoint
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
@ -5,7 +5,7 @@ import android.os.Bundle
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.loader.app.LoaderManager
|
||||
import androidx.loader.content.Loader
|
||||
import com.looker.core.datastore.model.SortOrder
|
||||
import com.looker.droidify.datastore.model.SortOrder
|
||||
import com.looker.droidify.model.ProductItem
|
||||
|
||||
class CursorOwner : Fragment(), LoaderManager.LoaderCallbacks<Cursor> {
|
||||
|
@ -10,12 +10,12 @@ import androidx.core.database.sqlite.transaction
|
||||
import com.fasterxml.jackson.core.JsonGenerator
|
||||
import com.fasterxml.jackson.core.JsonParser
|
||||
import com.looker.core.common.extension.Json
|
||||
import com.looker.core.common.extension.asSequence
|
||||
import com.looker.core.common.extension.firstOrNull
|
||||
import com.looker.droidify.utility.common.extension.asSequence
|
||||
import com.looker.droidify.utility.common.extension.firstOrNull
|
||||
import com.looker.core.common.extension.parseDictionary
|
||||
import com.looker.core.common.extension.writeDictionary
|
||||
import com.looker.core.common.log
|
||||
import com.looker.core.datastore.model.SortOrder
|
||||
import com.looker.droidify.utility.common.log
|
||||
import com.looker.droidify.datastore.model.SortOrder
|
||||
import com.looker.droidify.model.InstalledItem
|
||||
import com.looker.droidify.model.Product
|
||||
import com.looker.droidify.model.ProductItem
|
||||
|
@ -3,8 +3,8 @@ package com.looker.droidify.database
|
||||
import android.database.Cursor
|
||||
import android.database.sqlite.SQLiteDatabase
|
||||
import android.os.CancellationSignal
|
||||
import com.looker.core.common.extension.asSequence
|
||||
import com.looker.core.common.log
|
||||
import com.looker.droidify.utility.common.extension.asSequence
|
||||
import com.looker.droidify.utility.common.log
|
||||
import com.looker.droidify.BuildConfig
|
||||
|
||||
class QueryBuilder {
|
||||
|
@ -3,15 +3,15 @@ package com.looker.droidify.database
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import com.fasterxml.jackson.core.JsonToken
|
||||
import com.looker.core.common.Exporter
|
||||
import com.looker.droidify.utility.common.Exporter
|
||||
import com.looker.core.common.extension.Json
|
||||
import com.looker.core.common.extension.forEach
|
||||
import com.looker.core.common.extension.forEachKey
|
||||
import com.looker.core.common.extension.parseDictionary
|
||||
import com.looker.core.common.extension.writeArray
|
||||
import com.looker.core.common.extension.writeDictionary
|
||||
import com.looker.core.di.ApplicationScope
|
||||
import com.looker.core.di.IoDispatcher
|
||||
import com.looker.droidify.di.ApplicationScope
|
||||
import com.looker.droidify.di.IoDispatcher
|
||||
import com.looker.droidify.model.Repository
|
||||
import com.looker.droidify.utility.serialization.repository
|
||||
import com.looker.droidify.utility.serialization.serialize
|
||||
|
@ -1,25 +1,16 @@
|
||||
package com.looker.core.datastore
|
||||
package com.looker.droidify.datastore
|
||||
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import androidx.datastore.core.DataStore
|
||||
import androidx.datastore.core.IOException
|
||||
import androidx.datastore.preferences.core.MutablePreferences
|
||||
import androidx.datastore.preferences.core.Preferences
|
||||
import androidx.datastore.preferences.core.booleanPreferencesKey
|
||||
import androidx.datastore.preferences.core.edit
|
||||
import androidx.datastore.preferences.core.intPreferencesKey
|
||||
import androidx.datastore.preferences.core.longPreferencesKey
|
||||
import androidx.datastore.preferences.core.stringPreferencesKey
|
||||
import androidx.datastore.preferences.core.stringSetPreferencesKey
|
||||
import com.looker.core.common.Exporter
|
||||
import com.looker.core.common.extension.updateAsMutable
|
||||
import com.looker.core.datastore.model.AutoSync
|
||||
import com.looker.core.datastore.model.InstallerType
|
||||
import com.looker.core.datastore.model.ProxyPreference
|
||||
import com.looker.core.datastore.model.ProxyType
|
||||
import com.looker.core.datastore.model.SortOrder
|
||||
import com.looker.core.datastore.model.Theme
|
||||
import com.looker.droidify.utility.common.Exporter
|
||||
import com.looker.droidify.utility.common.extension.updateAsMutable
|
||||
import com.looker.droidify.datastore.model.AutoSync
|
||||
import com.looker.droidify.datastore.model.InstallerType
|
||||
import com.looker.droidify.datastore.model.ProxyPreference
|
||||
import com.looker.droidify.datastore.model.ProxyType
|
||||
import com.looker.droidify.datastore.model.SortOrder
|
||||
import com.looker.droidify.datastore.model.Theme
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.catch
|
||||
import kotlinx.coroutines.flow.first
|
||||
@ -30,12 +21,12 @@ import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.hours
|
||||
|
||||
class PreferenceSettingsRepository(
|
||||
private val dataStore: DataStore<Preferences>,
|
||||
private val dataStore: androidx.datastore.core.DataStore<androidx.datastore.preferences.core.Preferences>,
|
||||
private val exporter: Exporter<Settings>,
|
||||
) : SettingsRepository {
|
||||
override val data: Flow<Settings> = dataStore.data
|
||||
.catch { exception ->
|
||||
if (exception is IOException) {
|
||||
if (exception is androidx.datastore.core.IOException) {
|
||||
Log.e("TAG", "Error reading preferences.", exception)
|
||||
} else {
|
||||
throw exception
|
||||
@ -122,8 +113,8 @@ class PreferenceSettingsRepository(
|
||||
}
|
||||
}
|
||||
|
||||
private fun mapSettings(preferences: Preferences): Settings {
|
||||
val defaultInstallerName = (InstallerType.Default).name
|
||||
private fun mapSettings(preferences: androidx.datastore.preferences.core.Preferences): Settings {
|
||||
val defaultInstallerName = (InstallerType.Companion.Default).name
|
||||
|
||||
val language = preferences[LANGUAGE] ?: "system"
|
||||
val incompatibleVersions = preferences[INCOMPATIBLE_VERSIONS] ?: false
|
||||
@ -166,33 +157,50 @@ class PreferenceSettingsRepository(
|
||||
)
|
||||
}
|
||||
|
||||
private suspend inline fun <T> Preferences.Key<T>.update(newValue: T) {
|
||||
private suspend inline fun <T> androidx.datastore.preferences.core.Preferences.Key<T>.update(newValue: T) {
|
||||
dataStore.edit { preferences ->
|
||||
preferences[this] = newValue
|
||||
}
|
||||
}
|
||||
|
||||
companion object PreferencesKeys {
|
||||
private val LANGUAGE = stringPreferencesKey("key_language")
|
||||
private val INCOMPATIBLE_VERSIONS = booleanPreferencesKey("key_incompatible_versions")
|
||||
private val NOTIFY_UPDATES = booleanPreferencesKey("key_notify_updates")
|
||||
private val UNSTABLE_UPDATES = booleanPreferencesKey("key_unstable_updates")
|
||||
private val IGNORE_SIGNATURE = booleanPreferencesKey("key_ignore_signature")
|
||||
private val THEME = stringPreferencesKey("key_theme")
|
||||
private val DYNAMIC_THEME = booleanPreferencesKey("key_dynamic_theme")
|
||||
private val INSTALLER_TYPE = stringPreferencesKey("key_installer_type")
|
||||
private val AUTO_UPDATE = booleanPreferencesKey("key_auto_updates")
|
||||
private val AUTO_SYNC = stringPreferencesKey("key_auto_sync")
|
||||
private val SORT_ORDER = stringPreferencesKey("key_sort_order")
|
||||
private val PROXY_TYPE = stringPreferencesKey("key_proxy_type")
|
||||
private val PROXY_HOST = stringPreferencesKey("key_proxy_host")
|
||||
private val PROXY_PORT = intPreferencesKey("key_proxy_port")
|
||||
private val CLEAN_UP_INTERVAL = longPreferencesKey("key_clean_up_interval")
|
||||
private val LAST_CLEAN_UP = longPreferencesKey("key_last_clean_up_time")
|
||||
private val FAVOURITE_APPS = stringSetPreferencesKey("key_favourite_apps")
|
||||
private val HOME_SCREEN_SWIPING = booleanPreferencesKey("key_home_swiping")
|
||||
private val LANGUAGE =
|
||||
androidx.datastore.preferences.core.stringPreferencesKey("key_language")
|
||||
private val INCOMPATIBLE_VERSIONS =
|
||||
androidx.datastore.preferences.core.booleanPreferencesKey("key_incompatible_versions")
|
||||
private val NOTIFY_UPDATES =
|
||||
androidx.datastore.preferences.core.booleanPreferencesKey("key_notify_updates")
|
||||
private val UNSTABLE_UPDATES =
|
||||
androidx.datastore.preferences.core.booleanPreferencesKey("key_unstable_updates")
|
||||
private val IGNORE_SIGNATURE =
|
||||
androidx.datastore.preferences.core.booleanPreferencesKey("key_ignore_signature")
|
||||
private val THEME = androidx.datastore.preferences.core.stringPreferencesKey("key_theme")
|
||||
private val DYNAMIC_THEME =
|
||||
androidx.datastore.preferences.core.booleanPreferencesKey("key_dynamic_theme")
|
||||
private val INSTALLER_TYPE =
|
||||
androidx.datastore.preferences.core.stringPreferencesKey("key_installer_type")
|
||||
private val AUTO_UPDATE =
|
||||
androidx.datastore.preferences.core.booleanPreferencesKey("key_auto_updates")
|
||||
private val AUTO_SYNC =
|
||||
androidx.datastore.preferences.core.stringPreferencesKey("key_auto_sync")
|
||||
private val SORT_ORDER =
|
||||
androidx.datastore.preferences.core.stringPreferencesKey("key_sort_order")
|
||||
private val PROXY_TYPE =
|
||||
androidx.datastore.preferences.core.stringPreferencesKey("key_proxy_type")
|
||||
private val PROXY_HOST =
|
||||
androidx.datastore.preferences.core.stringPreferencesKey("key_proxy_host")
|
||||
private val PROXY_PORT =
|
||||
androidx.datastore.preferences.core.intPreferencesKey("key_proxy_port")
|
||||
private val CLEAN_UP_INTERVAL =
|
||||
androidx.datastore.preferences.core.longPreferencesKey("key_clean_up_interval")
|
||||
private val LAST_CLEAN_UP =
|
||||
androidx.datastore.preferences.core.longPreferencesKey("key_last_clean_up_time")
|
||||
private val FAVOURITE_APPS =
|
||||
androidx.datastore.preferences.core.stringSetPreferencesKey("key_favourite_apps")
|
||||
private val HOME_SCREEN_SWIPING =
|
||||
androidx.datastore.preferences.core.booleanPreferencesKey("key_home_swiping")
|
||||
|
||||
fun MutablePreferences.setting(settings: Settings): Preferences {
|
||||
fun androidx.datastore.preferences.core.MutablePreferences.setting(settings: Settings): androidx.datastore.preferences.core.Preferences {
|
||||
set(LANGUAGE, settings.language)
|
||||
set(INCOMPATIBLE_VERSIONS, settings.incompatibleVersions)
|
||||
set(NOTIFY_UPDATES, settings.notifyUpdate)
|
@ -1,11 +1,11 @@
|
||||
package com.looker.core.datastore
|
||||
package com.looker.droidify.datastore
|
||||
|
||||
import androidx.datastore.core.Serializer
|
||||
import com.looker.core.datastore.model.AutoSync
|
||||
import com.looker.core.datastore.model.InstallerType
|
||||
import com.looker.core.datastore.model.ProxyPreference
|
||||
import com.looker.core.datastore.model.SortOrder
|
||||
import com.looker.core.datastore.model.Theme
|
||||
import com.looker.droidify.datastore.model.AutoSync
|
||||
import com.looker.droidify.datastore.model.InstallerType
|
||||
import com.looker.droidify.datastore.model.ProxyPreference
|
||||
import com.looker.droidify.datastore.model.SortOrder
|
||||
import com.looker.droidify.datastore.model.Theme
|
||||
import java.io.IOException
|
||||
import java.io.InputStream
|
||||
import java.io.OutputStream
|
@ -1,11 +1,11 @@
|
||||
package com.looker.core.datastore
|
||||
package com.looker.droidify.datastore
|
||||
|
||||
import android.net.Uri
|
||||
import com.looker.core.datastore.model.AutoSync
|
||||
import com.looker.core.datastore.model.InstallerType
|
||||
import com.looker.core.datastore.model.ProxyType
|
||||
import com.looker.core.datastore.model.SortOrder
|
||||
import com.looker.core.datastore.model.Theme
|
||||
import com.looker.droidify.datastore.model.AutoSync
|
||||
import com.looker.droidify.datastore.model.InstallerType
|
||||
import com.looker.droidify.datastore.model.ProxyType
|
||||
import com.looker.droidify.datastore.model.SortOrder
|
||||
import com.looker.droidify.datastore.model.Theme
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
import kotlinx.coroutines.flow.map
|
@ -1,9 +1,9 @@
|
||||
package com.looker.core.datastore.exporter
|
||||
package com.looker.droidify.datastore.exporter
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import com.looker.core.common.Exporter
|
||||
import com.looker.core.datastore.Settings
|
||||
import com.looker.droidify.utility.common.Exporter
|
||||
import com.looker.droidify.datastore.Settings
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.cancel
|
@ -1,16 +1,16 @@
|
||||
package com.looker.core.datastore.extension
|
||||
package com.looker.droidify.datastore.extension
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.Configuration
|
||||
import com.looker.core.common.R
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.core.common.R.style as styleRes
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.datastore.model.AutoSync
|
||||
import com.looker.core.datastore.model.InstallerType
|
||||
import com.looker.core.datastore.model.ProxyType
|
||||
import com.looker.core.datastore.model.SortOrder
|
||||
import com.looker.core.datastore.model.Theme
|
||||
import com.looker.droidify.R
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
import com.looker.droidify.R.style as styleRes
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.datastore.model.AutoSync
|
||||
import com.looker.droidify.datastore.model.InstallerType
|
||||
import com.looker.droidify.datastore.model.ProxyType
|
||||
import com.looker.droidify.datastore.model.SortOrder
|
||||
import com.looker.droidify.datastore.model.Theme
|
||||
import kotlin.time.Duration
|
||||
|
||||
fun Configuration.getThemeRes(theme: Theme, dynamicTheme: Boolean) = when (theme) {
|
||||
@ -66,7 +66,7 @@ fun Configuration.getThemeRes(theme: Theme, dynamicTheme: Boolean) = when (theme
|
||||
fun Context?.toTime(duration: Duration): String {
|
||||
val time = duration.inWholeHours.toInt()
|
||||
val days = duration.inWholeDays.toInt()
|
||||
if (duration == Duration.INFINITE) return this?.getString(R.string.never) ?: ""
|
||||
if (duration == Duration.INFINITE) return this?.getString(stringRes.never) ?: ""
|
||||
return if (time >= 24) {
|
||||
"$days " + this?.resources?.getQuantityString(
|
||||
R.plurals.days,
|
@ -0,0 +1,23 @@
|
||||
package com.looker.droidify.datastore.migration
|
||||
|
||||
import com.looker.droidify.datastore.PreferenceSettingsRepository.PreferencesKeys.setting
|
||||
import com.looker.droidify.datastore.Settings
|
||||
import kotlinx.coroutines.flow.first
|
||||
|
||||
class ProtoToPreferenceMigration(
|
||||
private val oldDataStore: androidx.datastore.core.DataStore<Settings>
|
||||
) : androidx.datastore.core.DataMigration<androidx.datastore.preferences.core.Preferences> {
|
||||
override suspend fun cleanUp() {
|
||||
}
|
||||
|
||||
override suspend fun shouldMigrate(currentData: androidx.datastore.preferences.core.Preferences): Boolean {
|
||||
return currentData.asMap().isEmpty()
|
||||
}
|
||||
|
||||
override suspend fun migrate(currentData: androidx.datastore.preferences.core.Preferences): androidx.datastore.preferences.core.Preferences {
|
||||
val settings = oldDataStore.data.first()
|
||||
val preferences = currentData.toMutablePreferences()
|
||||
preferences.setting(settings)
|
||||
return preferences
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package com.looker.core.datastore.model
|
||||
package com.looker.droidify.datastore.model
|
||||
|
||||
enum class AutoSync {
|
||||
ALWAYS,
|
@ -1,6 +1,6 @@
|
||||
package com.looker.core.datastore.model
|
||||
package com.looker.droidify.datastore.model
|
||||
|
||||
import com.looker.core.common.device.Miui
|
||||
import com.looker.droidify.utility.common.device.Miui
|
||||
|
||||
enum class InstallerType {
|
||||
LEGACY,
|
@ -1,4 +1,4 @@
|
||||
package com.looker.core.datastore.model
|
||||
package com.looker.droidify.datastore.model
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.looker.core.datastore.model
|
||||
package com.looker.droidify.datastore.model
|
||||
|
||||
enum class ProxyType {
|
||||
DIRECT,
|
@ -1,4 +1,4 @@
|
||||
package com.looker.core.datastore.model
|
||||
package com.looker.droidify.datastore.model
|
||||
|
||||
// todo: Add Support for sorting by size
|
||||
enum class SortOrder {
|
@ -1,4 +1,4 @@
|
||||
package com.looker.core.datastore.model
|
||||
package com.looker.droidify.datastore.model
|
||||
|
||||
enum class Theme {
|
||||
SYSTEM,
|
@ -1,6 +1,6 @@
|
||||
@file:Suppress("unused")
|
||||
|
||||
package com.looker.core.di
|
||||
package com.looker.droidify.di
|
||||
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
@ -1,4 +1,4 @@
|
||||
package com.looker.core.datastore.di
|
||||
package com.looker.droidify.di
|
||||
|
||||
import android.content.Context
|
||||
import androidx.datastore.core.DataStore
|
||||
@ -7,15 +7,13 @@ import androidx.datastore.dataStoreFile
|
||||
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
|
||||
import androidx.datastore.preferences.core.Preferences
|
||||
import androidx.datastore.preferences.preferencesDataStoreFile
|
||||
import com.looker.core.common.Exporter
|
||||
import com.looker.core.datastore.PreferenceSettingsRepository
|
||||
import com.looker.core.datastore.Settings
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.core.datastore.SettingsSerializer
|
||||
import com.looker.core.datastore.exporter.SettingsExporter
|
||||
import com.looker.core.datastore.migration.ProtoToPreferenceMigration
|
||||
import com.looker.core.di.ApplicationScope
|
||||
import com.looker.core.di.IoDispatcher
|
||||
import com.looker.droidify.utility.common.Exporter
|
||||
import com.looker.droidify.datastore.PreferenceSettingsRepository
|
||||
import com.looker.droidify.datastore.Settings
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.SettingsSerializer
|
||||
import com.looker.droidify.datastore.exporter.SettingsExporter
|
||||
import com.looker.droidify.datastore.migration.ProtoToPreferenceMigration
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
@ -1,7 +1,8 @@
|
||||
package com.looker.droidify.installer
|
||||
package com.looker.droidify.di
|
||||
|
||||
import android.content.Context
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.installer.InstallManager
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
@ -1,8 +1,7 @@
|
||||
package com.looker.network.di
|
||||
package com.looker.droidify.di
|
||||
|
||||
import com.looker.core.di.IoDispatcher
|
||||
import com.looker.network.Downloader
|
||||
import com.looker.network.KtorDownloader
|
||||
import com.looker.droidify.network.Downloader
|
||||
import com.looker.droidify.network.KtorDownloader
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
@ -4,7 +4,7 @@ import android.content.ContentValues
|
||||
import android.database.sqlite.SQLiteDatabase
|
||||
import com.fasterxml.jackson.core.JsonToken
|
||||
import com.looker.core.common.extension.Json
|
||||
import com.looker.core.common.extension.asSequence
|
||||
import com.looker.droidify.utility.common.extension.asSequence
|
||||
import com.looker.core.common.extension.collectNotNull
|
||||
import com.looker.core.common.extension.writeDictionary
|
||||
import com.looker.droidify.model.Product
|
||||
|
@ -5,14 +5,14 @@ import androidx.core.os.ConfigurationCompat.getLocales
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import com.fasterxml.jackson.core.JsonParser
|
||||
import com.fasterxml.jackson.core.JsonToken
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.core.common.extension.Json
|
||||
import com.looker.core.common.extension.collectDistinctNotEmptyStrings
|
||||
import com.looker.core.common.extension.collectNotNull
|
||||
import com.looker.core.common.extension.forEach
|
||||
import com.looker.core.common.extension.forEachKey
|
||||
import com.looker.core.common.extension.illegal
|
||||
import com.looker.core.common.nullIfEmpty
|
||||
import com.looker.droidify.utility.common.nullIfEmpty
|
||||
import com.looker.droidify.model.Product
|
||||
import com.looker.droidify.model.Release
|
||||
import java.io.InputStream
|
||||
|
@ -2,19 +2,19 @@ package com.looker.droidify.index
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.core.common.extension.fingerprint
|
||||
import com.looker.core.common.extension.toFormattedString
|
||||
import com.looker.core.common.result.Result
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.utility.common.extension.fingerprint
|
||||
import com.looker.droidify.utility.common.extension.toFormattedString
|
||||
import com.looker.droidify.utility.common.result.Result
|
||||
import com.looker.droidify.model.Product
|
||||
import com.looker.droidify.model.Release
|
||||
import com.looker.droidify.model.Repository
|
||||
import com.looker.droidify.database.Database
|
||||
import com.looker.droidify.utility.extension.android.Android
|
||||
import com.looker.droidify.utility.getProgress
|
||||
import com.looker.network.Downloader
|
||||
import com.looker.network.NetworkResponse
|
||||
import com.looker.droidify.network.Downloader
|
||||
import com.looker.droidify.network.NetworkResponse
|
||||
import java.io.File
|
||||
import java.security.CodeSigner
|
||||
import java.security.cert.Certificate
|
||||
|
@ -1,13 +1,13 @@
|
||||
package com.looker.droidify.installer
|
||||
|
||||
import android.content.Context
|
||||
import com.looker.core.common.extension.addAndCompute
|
||||
import com.looker.core.common.extension.filter
|
||||
import com.looker.core.common.extension.notificationManager
|
||||
import com.looker.core.common.extension.updateAsMutable
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.core.datastore.get
|
||||
import com.looker.core.datastore.model.InstallerType
|
||||
import com.looker.droidify.utility.common.extension.addAndCompute
|
||||
import com.looker.droidify.utility.common.extension.filter
|
||||
import com.looker.droidify.utility.common.extension.notificationManager
|
||||
import com.looker.droidify.utility.common.extension.updateAsMutable
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.get
|
||||
import com.looker.droidify.datastore.model.InstallerType
|
||||
import com.looker.droidify.domain.model.PackageName
|
||||
import com.looker.droidify.installer.installers.Installer
|
||||
import com.looker.droidify.installer.installers.LegacyInstaller
|
||||
|
@ -4,9 +4,9 @@ import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import com.looker.core.common.extension.getLauncherActivities
|
||||
import com.looker.core.common.extension.getPackageInfoCompat
|
||||
import com.looker.core.common.extension.intent
|
||||
import com.looker.droidify.utility.common.extension.getLauncherActivities
|
||||
import com.looker.droidify.utility.common.extension.getPackageInfoCompat
|
||||
import com.looker.droidify.utility.common.extension.intent
|
||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||
import rikka.shizuku.ShizukuProvider
|
||||
import kotlin.coroutines.resume
|
||||
|
@ -4,8 +4,8 @@ import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.util.AndroidRuntimeException
|
||||
import androidx.core.net.toUri
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.domain.model.PackageName
|
||||
import com.looker.droidify.installer.model.InstallItem
|
||||
import com.looker.droidify.installer.model.InstallState
|
||||
|
@ -1,8 +1,8 @@
|
||||
package com.looker.droidify.installer.installers.root
|
||||
|
||||
import android.content.Context
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.domain.model.PackageName
|
||||
import com.looker.droidify.installer.installers.Installer
|
||||
import com.looker.droidify.installer.installers.uninstallPackage
|
||||
|
@ -9,10 +9,10 @@ import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.core.common.log
|
||||
import com.looker.core.common.sdkAbove
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.utility.common.log
|
||||
import com.looker.droidify.utility.common.sdkAbove
|
||||
import com.looker.droidify.domain.model.PackageName
|
||||
import com.looker.droidify.installer.installers.Installer
|
||||
import com.looker.droidify.installer.model.InstallItem
|
||||
|
@ -4,11 +4,11 @@ import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageInstaller
|
||||
import com.looker.core.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
||||
import com.looker.core.common.R
|
||||
import com.looker.core.common.createNotificationChannel
|
||||
import com.looker.core.common.extension.getPackageName
|
||||
import com.looker.core.common.extension.notificationManager
|
||||
import com.looker.droidify.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
||||
import com.looker.droidify.R
|
||||
import com.looker.droidify.utility.common.createNotificationChannel
|
||||
import com.looker.droidify.utility.common.extension.getPackageName
|
||||
import com.looker.droidify.utility.common.extension.notificationManager
|
||||
import com.looker.droidify.domain.model.toPackageName
|
||||
import com.looker.droidify.installer.InstallManager
|
||||
import com.looker.droidify.installer.model.InstallState
|
||||
|
@ -1,9 +1,9 @@
|
||||
package com.looker.droidify.installer.installers.shizuku
|
||||
|
||||
import android.content.Context
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.core.common.extension.size
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.utility.common.extension.size
|
||||
import com.looker.droidify.domain.model.PackageName
|
||||
import com.looker.droidify.installer.installers.Installer
|
||||
import com.looker.droidify.installer.installers.uninstallPackage
|
||||
|
@ -5,10 +5,10 @@ import android.app.NotificationManager
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import androidx.core.app.NotificationCompat
|
||||
import com.looker.core.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
||||
import com.looker.core.common.Constants.NOTIFICATION_ID_INSTALL
|
||||
import com.looker.droidify.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
||||
import com.looker.droidify.utility.common.Constants.NOTIFICATION_ID_INSTALL
|
||||
import com.looker.droidify.installer.model.InstallState
|
||||
import com.looker.core.common.R as CommonR
|
||||
import com.looker.droidify.R
|
||||
|
||||
fun NotificationManager.installNotification(
|
||||
packageName: String,
|
||||
@ -47,34 +47,34 @@ fun Context.createInstallNotification(
|
||||
setColor(Color.GREEN)
|
||||
val (title, text) = if (isUninstall) {
|
||||
setTimeoutAfter(SUCCESS_TIMEOUT)
|
||||
setSmallIcon(CommonR.drawable.ic_delete)
|
||||
getString(CommonR.string.uninstalled_application) to
|
||||
getString(CommonR.string.uninstalled_application_DESC, appName)
|
||||
setSmallIcon(R.drawable.ic_delete)
|
||||
getString(R.string.uninstalled_application) to
|
||||
getString(R.string.uninstalled_application_DESC, appName)
|
||||
} else {
|
||||
when (state) {
|
||||
InstallState.Failed -> {
|
||||
setSmallIcon(CommonR.drawable.ic_bug_report)
|
||||
getString(CommonR.string.installation_failed) to
|
||||
getString(CommonR.string.installation_failed_DESC, appName)
|
||||
setSmallIcon(R.drawable.ic_bug_report)
|
||||
getString(R.string.installation_failed) to
|
||||
getString(R.string.installation_failed_DESC, appName)
|
||||
}
|
||||
|
||||
InstallState.Pending -> {
|
||||
setSmallIcon(CommonR.drawable.ic_download)
|
||||
getString(CommonR.string.downloaded_FORMAT, appName) to
|
||||
getString(CommonR.string.tap_to_install_DESC)
|
||||
setSmallIcon(R.drawable.ic_download)
|
||||
getString(R.string.downloaded_FORMAT, appName) to
|
||||
getString(R.string.tap_to_install_DESC)
|
||||
}
|
||||
|
||||
InstallState.Installing -> {
|
||||
setSmallIcon(CommonR.drawable.ic_download)
|
||||
setSmallIcon(R.drawable.ic_download)
|
||||
setProgress(-1, -1, true)
|
||||
getString(CommonR.string.installing) to
|
||||
getString(R.string.installing) to
|
||||
appName
|
||||
}
|
||||
|
||||
InstallState.Installed -> {
|
||||
setTimeoutAfter(SUCCESS_TIMEOUT)
|
||||
setSmallIcon(CommonR.drawable.ic_check)
|
||||
getString(CommonR.string.installed) to
|
||||
setSmallIcon(R.drawable.ic_check)
|
||||
getString(R.string.installed) to
|
||||
appName
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ package com.looker.droidify.model
|
||||
|
||||
import android.os.Parcelable
|
||||
import android.view.View
|
||||
import com.looker.core.common.extension.dpi
|
||||
import com.looker.droidify.utility.common.extension.dpi
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
data class ProductItem(
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.looker.network
|
||||
package com.looker.droidify.network
|
||||
|
||||
import java.io.File
|
||||
import java.util.Locale
|
@ -1,7 +1,7 @@
|
||||
package com.looker.network
|
||||
package com.looker.droidify.network
|
||||
|
||||
import com.looker.network.header.HeadersBuilder
|
||||
import com.looker.network.validation.FileValidator
|
||||
import com.looker.droidify.network.header.HeadersBuilder
|
||||
import com.looker.droidify.network.validation.FileValidator
|
||||
import java.io.File
|
||||
import java.net.Proxy
|
||||
|
@ -1,12 +1,12 @@
|
||||
package com.looker.network
|
||||
package com.looker.droidify.network
|
||||
|
||||
import com.looker.network.Downloader.Companion.CONNECTION_TIMEOUT
|
||||
import com.looker.network.Downloader.Companion.SOCKET_TIMEOUT
|
||||
import com.looker.network.Downloader.Companion.USER_AGENT
|
||||
import com.looker.network.header.HeadersBuilder
|
||||
import com.looker.network.header.KtorHeadersBuilder
|
||||
import com.looker.network.validation.FileValidator
|
||||
import com.looker.network.validation.ValidationException
|
||||
import com.looker.droidify.network.Downloader.Companion.CONNECTION_TIMEOUT
|
||||
import com.looker.droidify.network.Downloader.Companion.SOCKET_TIMEOUT
|
||||
import com.looker.droidify.network.Downloader.Companion.USER_AGENT
|
||||
import com.looker.droidify.network.header.HeadersBuilder
|
||||
import com.looker.droidify.network.header.KtorHeadersBuilder
|
||||
import com.looker.droidify.network.validation.FileValidator
|
||||
import com.looker.droidify.network.validation.ValidationException
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.HttpClientConfig
|
||||
import io.ktor.client.engine.HttpClientEngine
|
||||
@ -27,13 +27,13 @@ import io.ktor.http.HttpStatusCode
|
||||
import io.ktor.http.etag
|
||||
import io.ktor.http.isSuccess
|
||||
import io.ktor.http.lastModified
|
||||
import io.ktor.utils.io.CancellationException
|
||||
import io.ktor.utils.io.jvm.javaio.copyTo
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.net.Proxy
|
||||
import kotlin.coroutines.cancellation.CancellationException
|
||||
|
||||
internal class KtorDownloader(
|
||||
httpClientEngine: HttpClientEngine,
|
||||
@ -129,7 +129,7 @@ internal class KtorDownloader(
|
||||
block: ProgressListener? = null
|
||||
) = request {
|
||||
url(url)
|
||||
headers {
|
||||
this.headers {
|
||||
KtorHeadersBuilder(this).headers()
|
||||
}
|
||||
onDownload { read, total ->
|
@ -1,6 +1,6 @@
|
||||
package com.looker.network
|
||||
package com.looker.droidify.network
|
||||
|
||||
import com.looker.network.validation.ValidationException
|
||||
import com.looker.droidify.network.validation.ValidationException
|
||||
import java.util.Date
|
||||
|
||||
sealed interface NetworkResponse {
|
@ -1,4 +1,4 @@
|
||||
package com.looker.network.header
|
||||
package com.looker.droidify.network.header
|
||||
|
||||
import java.util.Date
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.looker.network.header
|
||||
package com.looker.droidify.network.header
|
||||
|
||||
import io.ktor.http.HttpHeaders
|
||||
import io.ktor.util.encodeBase64
|
@ -1,4 +1,4 @@
|
||||
package com.looker.network.validation
|
||||
package com.looker.droidify.network.validation
|
||||
|
||||
import java.io.File
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.looker.network.validation
|
||||
package com.looker.droidify.network.validation
|
||||
|
||||
class ValidationException(override val message: String) : Exception(message)
|
||||
|
@ -4,7 +4,7 @@ import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import com.looker.core.common.extension.getPackageInfoCompat
|
||||
import com.looker.droidify.utility.common.extension.getPackageInfoCompat
|
||||
import com.looker.droidify.database.Database
|
||||
import com.looker.droidify.utility.extension.toInstalledItem
|
||||
|
||||
|
@ -6,22 +6,21 @@ import android.graphics.Color
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import androidx.core.app.NotificationCompat
|
||||
import com.looker.core.common.Constants
|
||||
import com.looker.core.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
||||
import com.looker.core.common.R
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.core.common.createNotificationChannel
|
||||
import com.looker.core.common.extension.notificationManager
|
||||
import com.looker.core.common.extension.percentBy
|
||||
import com.looker.core.common.extension.startSelf
|
||||
import com.looker.core.common.extension.stopForegroundCompat
|
||||
import com.looker.core.common.extension.toPendingIntent
|
||||
import com.looker.core.common.extension.updateAsMutable
|
||||
import com.looker.core.common.log
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.core.datastore.get
|
||||
import com.looker.core.datastore.model.InstallerType
|
||||
import com.looker.droidify.utility.common.Constants
|
||||
import com.looker.droidify.utility.common.Constants.NOTIFICATION_CHANNEL_INSTALL
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.utility.common.createNotificationChannel
|
||||
import com.looker.droidify.utility.common.extension.notificationManager
|
||||
import com.looker.droidify.utility.common.extension.percentBy
|
||||
import com.looker.droidify.utility.common.extension.startSelf
|
||||
import com.looker.droidify.utility.common.extension.stopForegroundCompat
|
||||
import com.looker.droidify.utility.common.extension.toPendingIntent
|
||||
import com.looker.droidify.utility.common.extension.updateAsMutable
|
||||
import com.looker.droidify.utility.common.log
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.get
|
||||
import com.looker.droidify.datastore.model.InstallerType
|
||||
import com.looker.droidify.BuildConfig
|
||||
import com.looker.droidify.MainActivity
|
||||
import com.looker.droidify.model.Release
|
||||
@ -31,10 +30,10 @@ import com.looker.droidify.installer.model.InstallState
|
||||
import com.looker.droidify.installer.model.installFrom
|
||||
import com.looker.droidify.installer.notification.createInstallNotification
|
||||
import com.looker.droidify.installer.notification.installNotification
|
||||
import com.looker.network.DataSize
|
||||
import com.looker.network.Downloader
|
||||
import com.looker.network.NetworkResponse
|
||||
import com.looker.network.validation.ValidationException
|
||||
import com.looker.droidify.network.DataSize
|
||||
import com.looker.droidify.network.Downloader
|
||||
import com.looker.droidify.network.NetworkResponse
|
||||
import com.looker.droidify.network.validation.ValidationException
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Job
|
||||
@ -51,7 +50,7 @@ import kotlinx.coroutines.sync.withLock
|
||||
import kotlinx.coroutines.yield
|
||||
import java.io.File
|
||||
import javax.inject.Inject
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
|
||||
@AndroidEntryPoint
|
||||
class DownloadService : ConnectionService<DownloadService.Binder>() {
|
||||
@ -175,7 +174,7 @@ class DownloadService : ConnectionService<DownloadService.Binder>() {
|
||||
)
|
||||
createNotificationChannel(
|
||||
id = NOTIFICATION_CHANNEL_INSTALL,
|
||||
name = getString(R.string.install)
|
||||
name = getString(stringRes.install)
|
||||
)
|
||||
|
||||
lifecycleScope.launch {
|
||||
|
@ -2,17 +2,17 @@ package com.looker.droidify.service
|
||||
|
||||
import android.content.Context
|
||||
import androidx.annotation.StringRes
|
||||
import com.looker.core.common.extension.calculateHash
|
||||
import com.looker.core.common.extension.getPackageArchiveInfoCompat
|
||||
import com.looker.core.common.extension.singleSignature
|
||||
import com.looker.core.common.extension.versionCodeCompat
|
||||
import com.looker.network.validation.FileValidator
|
||||
import com.looker.core.common.signature.Hash
|
||||
import com.looker.network.validation.invalid
|
||||
import com.looker.core.common.signature.verifyHash
|
||||
import com.looker.droidify.utility.common.extension.calculateHash
|
||||
import com.looker.droidify.utility.common.extension.getPackageArchiveInfoCompat
|
||||
import com.looker.droidify.utility.common.extension.singleSignature
|
||||
import com.looker.droidify.utility.common.extension.versionCodeCompat
|
||||
import com.looker.droidify.network.validation.FileValidator
|
||||
import com.looker.droidify.utility.common.signature.Hash
|
||||
import com.looker.droidify.network.validation.invalid
|
||||
import com.looker.droidify.utility.common.signature.verifyHash
|
||||
import com.looker.droidify.model.Release
|
||||
import java.io.File
|
||||
import com.looker.core.common.R.string as strings
|
||||
import com.looker.droidify.R.string as strings
|
||||
|
||||
class ReleaseFileValidator(
|
||||
private val context: Context,
|
||||
|
@ -15,17 +15,17 @@ import android.text.style.ForegroundColorSpan
|
||||
import android.view.ContextThemeWrapper
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.looker.core.common.Constants
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.common.createNotificationChannel
|
||||
import com.looker.core.common.extension.getColorFromAttr
|
||||
import com.looker.core.common.extension.notificationManager
|
||||
import com.looker.core.common.extension.startSelf
|
||||
import com.looker.core.common.extension.stopForegroundCompat
|
||||
import com.looker.core.common.log
|
||||
import com.looker.core.common.result.Result
|
||||
import com.looker.core.common.sdkAbove
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.droidify.utility.common.Constants
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.createNotificationChannel
|
||||
import com.looker.droidify.utility.common.extension.getColorFromAttr
|
||||
import com.looker.droidify.utility.common.extension.notificationManager
|
||||
import com.looker.droidify.utility.common.extension.startSelf
|
||||
import com.looker.droidify.utility.common.extension.stopForegroundCompat
|
||||
import com.looker.droidify.utility.common.log
|
||||
import com.looker.droidify.utility.common.result.Result
|
||||
import com.looker.droidify.utility.common.sdkAbove
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.BuildConfig
|
||||
import com.looker.droidify.MainActivity
|
||||
import com.looker.droidify.database.Database
|
||||
@ -33,8 +33,8 @@ import com.looker.droidify.index.RepositoryUpdater
|
||||
import com.looker.droidify.model.ProductItem
|
||||
import com.looker.droidify.model.Repository
|
||||
import com.looker.droidify.utility.extension.startUpdate
|
||||
import com.looker.network.DataSize
|
||||
import com.looker.network.percentBy
|
||||
import com.looker.droidify.network.DataSize
|
||||
import com.looker.droidify.network.percentBy
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -52,9 +52,10 @@ import kotlinx.coroutines.sync.withLock
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.lang.ref.WeakReference
|
||||
import javax.inject.Inject
|
||||
import com.looker.core.common.R as CommonR
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.core.common.R.style as styleRes
|
||||
import com.looker.droidify.R
|
||||
import android.R as AndroidR
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
import com.looker.droidify.R.style as styleRes
|
||||
import kotlinx.coroutines.Job as CoroutinesJob
|
||||
|
||||
@AndroidEntryPoint
|
||||
@ -276,10 +277,10 @@ class SyncService : ConnectionService<SyncService.Binder>() {
|
||||
Constants.NOTIFICATION_ID_SYNCING,
|
||||
NotificationCompat
|
||||
.Builder(this, Constants.NOTIFICATION_CHANNEL_SYNCING)
|
||||
.setSmallIcon(android.R.drawable.stat_sys_warning)
|
||||
.setSmallIcon(AndroidR.drawable.stat_sys_warning)
|
||||
.setColor(
|
||||
ContextThemeWrapper(this, styleRes.Theme_Main_Light)
|
||||
.getColorFromAttr(android.R.attr.colorPrimary).defaultColor
|
||||
.getColorFromAttr(AndroidR.attr.colorPrimary).defaultColor
|
||||
)
|
||||
.setContentTitle(getString(stringRes.could_not_sync_FORMAT, repository.name))
|
||||
.setContentText(description)
|
||||
@ -290,10 +291,10 @@ class SyncService : ConnectionService<SyncService.Binder>() {
|
||||
private val stateNotificationBuilder by lazy {
|
||||
NotificationCompat
|
||||
.Builder(this, Constants.NOTIFICATION_CHANNEL_SYNCING)
|
||||
.setSmallIcon(CommonR.drawable.ic_sync)
|
||||
.setSmallIcon(R.drawable.ic_sync)
|
||||
.setColor(
|
||||
ContextThemeWrapper(this, styleRes.Theme_Main_Light)
|
||||
.getColorFromAttr(android.R.attr.colorPrimary).defaultColor
|
||||
.getColorFromAttr(AndroidR.attr.colorPrimary).defaultColor
|
||||
)
|
||||
.addAction(
|
||||
0,
|
||||
@ -526,18 +527,18 @@ class SyncService : ConnectionService<SyncService.Binder>() {
|
||||
Constants.NOTIFICATION_ID_UPDATES,
|
||||
NotificationCompat
|
||||
.Builder(this, Constants.NOTIFICATION_CHANNEL_UPDATES)
|
||||
.setSmallIcon(CommonR.drawable.ic_new_releases)
|
||||
.setSmallIcon(R.drawable.ic_new_releases)
|
||||
.setContentTitle(getString(stringRes.new_updates_available))
|
||||
.setContentText(
|
||||
resources.getQuantityString(
|
||||
CommonR.plurals.new_updates_DESC_FORMAT,
|
||||
R.plurals.new_updates_DESC_FORMAT,
|
||||
productItems.size,
|
||||
productItems.size
|
||||
)
|
||||
)
|
||||
.setColor(
|
||||
ContextThemeWrapper(this, styleRes.Theme_Main_Light)
|
||||
.getColorFromAttr(android.R.attr.colorPrimary).defaultColor
|
||||
.getColorFromAttr(AndroidR.attr.colorPrimary).defaultColor
|
||||
)
|
||||
.setContentIntent(
|
||||
PendingIntent.getActivity(
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.looker.droidify.sync
|
||||
|
||||
import com.looker.droidify.domain.model.Fingerprint
|
||||
import com.looker.network.validation.ValidationException
|
||||
import com.looker.droidify.network.validation.ValidationException
|
||||
import java.util.jar.JarEntry
|
||||
|
||||
interface IndexValidator {
|
||||
|
@ -1,9 +1,9 @@
|
||||
package com.looker.droidify.sync.common
|
||||
|
||||
import android.content.Context
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.domain.model.Repo
|
||||
import com.looker.network.Downloader
|
||||
import com.looker.droidify.network.Downloader
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import java.io.File
|
||||
|
@ -2,7 +2,7 @@ package com.looker.droidify.sync.common
|
||||
|
||||
import com.looker.droidify.domain.model.Fingerprint
|
||||
import com.looker.droidify.domain.model.fingerprint
|
||||
import com.looker.network.validation.invalid
|
||||
import com.looker.droidify.network.validation.invalid
|
||||
import com.looker.droidify.sync.utils.certificate
|
||||
import com.looker.droidify.sync.utils.codeSigner
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
|
@ -12,7 +12,7 @@ import com.looker.droidify.sync.common.downloadIndex
|
||||
import com.looker.droidify.sync.common.toV2
|
||||
import com.looker.droidify.sync.v1.model.IndexV1
|
||||
import com.looker.droidify.sync.v2.model.IndexV2
|
||||
import com.looker.network.Downloader
|
||||
import com.looker.droidify.network.Downloader
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
|
@ -1,12 +1,12 @@
|
||||
package com.looker.droidify.sync.v2
|
||||
|
||||
import android.content.Context
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.domain.model.Fingerprint
|
||||
import com.looker.droidify.domain.model.Repo
|
||||
import com.looker.droidify.sync.Parser
|
||||
import com.looker.droidify.sync.Syncable
|
||||
import com.looker.network.Downloader
|
||||
import com.looker.droidify.network.Downloader
|
||||
import com.looker.droidify.sync.common.ENTRY_V2_NAME
|
||||
import com.looker.droidify.sync.common.INDEX_V2_NAME
|
||||
import com.looker.droidify.sync.common.IndexJarValidator
|
||||
|
@ -11,8 +11,8 @@ import androidx.core.os.bundleOf
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.common.nullIfEmpty
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.nullIfEmpty
|
||||
import com.looker.droidify.model.Release
|
||||
import com.looker.droidify.ui.repository.RepositoryFragment
|
||||
import com.looker.droidify.utility.PackageItemResolver
|
||||
@ -20,7 +20,7 @@ import com.looker.droidify.utility.extension.android.Android
|
||||
import kotlinx.parcelize.Parceler
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import kotlinx.parcelize.TypeParceler
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
|
||||
class MessageDialog() : DialogFragment() {
|
||||
companion object {
|
||||
|
@ -47,19 +47,19 @@ import com.google.android.material.imageview.ShapeableImageView
|
||||
import com.google.android.material.materialswitch.MaterialSwitch
|
||||
import com.google.android.material.progressindicator.LinearProgressIndicator
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.looker.core.common.extension.authentication
|
||||
import com.looker.core.common.extension.copyToClipboard
|
||||
import com.looker.core.common.extension.corneredBackground
|
||||
import com.looker.core.common.extension.dp
|
||||
import com.looker.core.common.extension.dpToPx
|
||||
import com.looker.core.common.extension.getColorFromAttr
|
||||
import com.looker.core.common.extension.getDrawableCompat
|
||||
import com.looker.core.common.extension.getMutatedIcon
|
||||
import com.looker.core.common.extension.inflate
|
||||
import com.looker.core.common.extension.open
|
||||
import com.looker.core.common.extension.setTextSizeScaled
|
||||
import com.looker.core.common.formatSize
|
||||
import com.looker.core.common.nullIfEmpty
|
||||
import com.looker.droidify.utility.common.extension.authentication
|
||||
import com.looker.droidify.utility.common.extension.copyToClipboard
|
||||
import com.looker.droidify.utility.common.extension.corneredBackground
|
||||
import com.looker.droidify.utility.common.extension.dp
|
||||
import com.looker.droidify.utility.common.extension.dpToPx
|
||||
import com.looker.droidify.utility.common.extension.getColorFromAttr
|
||||
import com.looker.droidify.utility.common.extension.getDrawableCompat
|
||||
import com.looker.droidify.utility.common.extension.getMutatedIcon
|
||||
import com.looker.droidify.utility.common.extension.inflate
|
||||
import com.looker.droidify.utility.common.extension.open
|
||||
import com.looker.droidify.utility.common.extension.setTextSizeScaled
|
||||
import com.looker.droidify.utility.common.formatSize
|
||||
import com.looker.droidify.utility.common.nullIfEmpty
|
||||
import com.looker.droidify.R
|
||||
import com.looker.droidify.content.ProductPreferences
|
||||
import com.looker.droidify.model.InstalledItem
|
||||
@ -73,7 +73,7 @@ import com.looker.droidify.utility.extension.android.Android
|
||||
import com.looker.droidify.utility.extension.resources.TypefaceExtra
|
||||
import com.looker.droidify.utility.extension.resources.sizeScaled
|
||||
import com.looker.droidify.widget.StableRecyclerAdapter
|
||||
import com.looker.network.DataSize
|
||||
import com.looker.droidify.network.DataSize
|
||||
import kotlinx.datetime.Instant
|
||||
import kotlinx.datetime.TimeZone
|
||||
import kotlinx.datetime.toJavaLocalDateTime
|
||||
@ -87,8 +87,8 @@ import kotlin.math.PI
|
||||
import kotlin.math.roundToInt
|
||||
import kotlin.math.sin
|
||||
import com.google.android.material.R as MaterialR
|
||||
import com.looker.core.common.R.drawable as drawableRes
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.droidify.R.drawable as drawableRes
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
|
||||
class AppDetailAdapter(private val callbacks: Callbacks) :
|
||||
StableRecyclerAdapter<AppDetailAdapter.ViewType, RecyclerView.ViewHolder>() {
|
||||
|
@ -22,13 +22,13 @@ import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.recyclerview.widget.SimpleItemAnimator
|
||||
import coil.load
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.core.common.extension.getLauncherActivities
|
||||
import com.looker.core.common.extension.getMutatedIcon
|
||||
import com.looker.core.common.extension.isFirstItemVisible
|
||||
import com.looker.core.common.extension.isSystemApplication
|
||||
import com.looker.core.common.extension.systemBarsPadding
|
||||
import com.looker.core.common.extension.updateAsMutable
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.utility.common.extension.getLauncherActivities
|
||||
import com.looker.droidify.utility.common.extension.getMutatedIcon
|
||||
import com.looker.droidify.utility.common.extension.isFirstItemVisible
|
||||
import com.looker.droidify.utility.common.extension.isSystemApplication
|
||||
import com.looker.droidify.utility.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.utility.common.extension.updateAsMutable
|
||||
import com.looker.droidify.content.ProductPreferences
|
||||
import com.looker.droidify.model.InstalledItem
|
||||
import com.looker.droidify.model.Product
|
||||
@ -53,7 +53,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
|
||||
@AndroidEntryPoint
|
||||
class AppDetailFragment() : ScreenFragment(), AppDetailAdapter.Callbacks {
|
||||
|
@ -4,9 +4,9 @@ import android.content.Context
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.looker.core.common.extension.asStateFlow
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.core.datastore.model.InstallerType
|
||||
import com.looker.droidify.utility.common.extension.asStateFlow
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.model.InstallerType
|
||||
import com.looker.droidify.domain.model.toPackageName
|
||||
import com.looker.droidify.BuildConfig
|
||||
import com.looker.droidify.database.Database
|
||||
|
@ -12,19 +12,19 @@ import coil.load
|
||||
import coil.size.Dimension
|
||||
import coil.size.Scale
|
||||
import com.google.android.material.imageview.ShapeableImageView
|
||||
import com.looker.core.common.extension.aspectRatio
|
||||
import com.looker.core.common.extension.authentication
|
||||
import com.looker.core.common.extension.camera
|
||||
import com.looker.core.common.extension.dp
|
||||
import com.looker.core.common.extension.dpToPx
|
||||
import com.looker.core.common.extension.getColorFromAttr
|
||||
import com.looker.core.common.extension.selectableBackground
|
||||
import com.looker.droidify.utility.common.extension.aspectRatio
|
||||
import com.looker.droidify.utility.common.extension.authentication
|
||||
import com.looker.droidify.utility.common.extension.camera
|
||||
import com.looker.droidify.utility.common.extension.dp
|
||||
import com.looker.droidify.utility.common.extension.dpToPx
|
||||
import com.looker.droidify.utility.common.extension.getColorFromAttr
|
||||
import com.looker.droidify.utility.common.extension.selectableBackground
|
||||
import com.looker.droidify.graphics.PaddingDrawable
|
||||
import com.looker.droidify.model.Product
|
||||
import com.looker.droidify.model.Repository
|
||||
import com.looker.droidify.widget.StableRecyclerAdapter
|
||||
import com.google.android.material.R as MaterialR
|
||||
import com.looker.core.common.R.dimen as dimenRes
|
||||
import com.looker.droidify.R.dimen as dimenRes
|
||||
|
||||
class ScreenshotsAdapter(private val onClick: (Product.Screenshot, ImageView) -> Unit) :
|
||||
StableRecyclerAdapter<ScreenshotsAdapter.ViewType, RecyclerView.ViewHolder>() {
|
||||
|
@ -2,7 +2,7 @@ package com.looker.droidify.ui.appDetail
|
||||
|
||||
import android.content.Context
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
|
||||
fun shizukuDialog(
|
||||
context: Context,
|
||||
|
@ -12,13 +12,13 @@ import androidx.recyclerview.widget.RecyclerView
|
||||
import coil.load
|
||||
import com.google.android.material.imageview.ShapeableImageView
|
||||
import com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
import com.looker.core.common.extension.authentication
|
||||
import com.looker.core.common.extension.corneredBackground
|
||||
import com.looker.core.common.extension.dp
|
||||
import com.looker.core.common.extension.getColorFromAttr
|
||||
import com.looker.core.common.extension.inflate
|
||||
import com.looker.core.common.extension.setTextSizeScaled
|
||||
import com.looker.core.common.nullIfEmpty
|
||||
import com.looker.droidify.utility.common.extension.authentication
|
||||
import com.looker.droidify.utility.common.extension.corneredBackground
|
||||
import com.looker.droidify.utility.common.extension.dp
|
||||
import com.looker.droidify.utility.common.extension.getColorFromAttr
|
||||
import com.looker.droidify.utility.common.extension.inflate
|
||||
import com.looker.droidify.utility.common.extension.setTextSizeScaled
|
||||
import com.looker.droidify.utility.common.nullIfEmpty
|
||||
import com.looker.droidify.R
|
||||
import com.looker.droidify.database.Database
|
||||
import com.looker.droidify.model.ProductItem
|
||||
|
@ -14,13 +14,13 @@ import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.looker.core.common.Scroller
|
||||
import com.looker.core.common.R as CommonR
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.core.common.extension.dp
|
||||
import com.looker.core.common.extension.isFirstItemVisible
|
||||
import com.looker.core.common.extension.systemBarsMargin
|
||||
import com.looker.core.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.utility.common.Scroller
|
||||
import com.looker.droidify.R
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
import com.looker.droidify.utility.common.extension.dp
|
||||
import com.looker.droidify.utility.common.extension.isFirstItemVisible
|
||||
import com.looker.droidify.utility.common.extension.systemBarsMargin
|
||||
import com.looker.droidify.utility.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.model.ProductItem
|
||||
import com.looker.droidify.database.CursorOwner
|
||||
import com.looker.droidify.databinding.RecyclerViewWithFabBinding
|
||||
@ -92,9 +92,9 @@ class AppListFragment() : Fragment(), CursorOwner.Callback {
|
||||
val fab = binding.scrollUp
|
||||
with(fab) {
|
||||
if (source.updateAll) {
|
||||
text = getString(CommonR.string.update_all)
|
||||
text = getString(R.string.update_all)
|
||||
setOnClickListener { viewModel.updateAll() }
|
||||
setIconResource(CommonR.drawable.ic_download)
|
||||
setIconResource(R.drawable.ic_download)
|
||||
alpha = 1f
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
viewModel.showUpdateAllButton.collect {
|
||||
@ -104,7 +104,7 @@ class AppListFragment() : Fragment(), CursorOwner.Callback {
|
||||
systemBarsMargin(16.dp)
|
||||
} else {
|
||||
text = ""
|
||||
setIconResource(CommonR.drawable.arrow_up)
|
||||
setIconResource(R.drawable.arrow_up)
|
||||
setOnClickListener {
|
||||
val scroller = Scroller(requireContext())
|
||||
scroller.targetPosition = 0
|
||||
|
@ -2,10 +2,10 @@ package com.looker.droidify.ui.appList
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.looker.core.common.extension.asStateFlow
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.core.datastore.get
|
||||
import com.looker.core.datastore.model.SortOrder
|
||||
import com.looker.droidify.utility.common.extension.asStateFlow
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.get
|
||||
import com.looker.droidify.datastore.model.SortOrder
|
||||
import com.looker.droidify.model.ProductItem
|
||||
import com.looker.droidify.model.ProductItem.Section.All
|
||||
import com.looker.droidify.database.CursorOwner
|
||||
|
@ -5,11 +5,11 @@ import android.view.ViewGroup
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import coil.load
|
||||
import com.looker.core.common.extension.authentication
|
||||
import com.looker.core.common.extension.corneredBackground
|
||||
import com.looker.core.common.extension.dp
|
||||
import com.looker.core.common.extension.getColorFromAttr
|
||||
import com.looker.core.common.nullIfEmpty
|
||||
import com.looker.droidify.utility.common.extension.authentication
|
||||
import com.looker.droidify.utility.common.extension.corneredBackground
|
||||
import com.looker.droidify.utility.common.extension.dp
|
||||
import com.looker.droidify.utility.common.extension.getColorFromAttr
|
||||
import com.looker.droidify.utility.common.nullIfEmpty
|
||||
import com.looker.droidify.databinding.ProductItemBinding
|
||||
import com.looker.droidify.model.Product
|
||||
import com.looker.droidify.model.Repository
|
||||
|
@ -11,8 +11,8 @@ import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.looker.core.common.R as CommonR
|
||||
import com.looker.core.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.R
|
||||
import com.looker.droidify.utility.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.database.Database
|
||||
import com.looker.droidify.ui.ScreenFragment
|
||||
import com.looker.droidify.utility.extension.screenActivity
|
||||
@ -68,7 +68,7 @@ class FavouritesFragment : ScreenFragment() {
|
||||
}
|
||||
}
|
||||
|
||||
toolbar.title = getString(CommonR.string.favourites)
|
||||
toolbar.title = getString(R.string.favourites)
|
||||
return view
|
||||
}
|
||||
|
||||
|
@ -2,9 +2,9 @@ package com.looker.droidify.ui.favourites
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.looker.core.common.extension.asStateFlow
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.core.datastore.get
|
||||
import com.looker.droidify.utility.common.extension.asStateFlow
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.get
|
||||
import com.looker.droidify.model.Product
|
||||
import com.looker.droidify.database.Database
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
|
@ -15,10 +15,10 @@ import androidx.fragment.app.DialogFragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.looker.core.common.extension.clipboardManager
|
||||
import com.looker.core.common.extension.get
|
||||
import com.looker.core.common.extension.getMutatedIcon
|
||||
import com.looker.core.common.nullIfEmpty
|
||||
import com.looker.droidify.utility.common.extension.clipboardManager
|
||||
import com.looker.droidify.utility.common.extension.get
|
||||
import com.looker.droidify.utility.common.extension.getMutatedIcon
|
||||
import com.looker.droidify.utility.common.nullIfEmpty
|
||||
import com.looker.droidify.model.Repository
|
||||
import com.looker.droidify.database.Database
|
||||
import com.looker.droidify.databinding.EditRepositoryBinding
|
||||
@ -28,8 +28,8 @@ import com.looker.droidify.ui.Message
|
||||
import com.looker.droidify.ui.MessageDialog
|
||||
import com.looker.droidify.ui.ScreenFragment
|
||||
import com.looker.droidify.utility.extension.screenActivity
|
||||
import com.looker.network.Downloader
|
||||
import com.looker.network.NetworkResponse
|
||||
import com.looker.droidify.network.Downloader
|
||||
import com.looker.droidify.network.NetworkResponse
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
@ -44,8 +44,8 @@ import java.nio.charset.Charset
|
||||
import java.util.Locale
|
||||
import javax.inject.Inject
|
||||
import kotlin.math.min
|
||||
import com.looker.core.common.R as CommonR
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.droidify.R
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
|
||||
@AndroidEntryPoint
|
||||
class EditRepositoryFragment() : ScreenFragment() {
|
||||
@ -89,7 +89,7 @@ class EditRepositoryFragment() : ScreenFragment() {
|
||||
)
|
||||
|
||||
saveMenuItem = toolbar.menu.add(stringRes.save)
|
||||
.setIcon(toolbar.context.getMutatedIcon(CommonR.drawable.ic_save))
|
||||
.setIcon(toolbar.context.getMutatedIcon(R.drawable.ic_save))
|
||||
.setEnabled(false)
|
||||
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS).setOnMenuItemClickListener {
|
||||
onSaveRepositoryClick(true)
|
||||
@ -171,7 +171,7 @@ class EditRepositoryFragment() : ScreenFragment() {
|
||||
val mirrors = repository.mirrors.map { it.withoutKnownPath }
|
||||
binding.addressContainer.apply {
|
||||
isEndIconVisible = mirrors.isNotEmpty()
|
||||
setEndIconDrawable(CommonR.drawable.ic_arrow_down)
|
||||
setEndIconDrawable(R.drawable.ic_arrow_down)
|
||||
setEndIconOnClickListener {
|
||||
SelectMirrorDialog(mirrors).show(
|
||||
childFragmentManager,
|
||||
@ -443,7 +443,7 @@ class EditRepositoryFragment() : ScreenFragment() {
|
||||
invalidateState()
|
||||
Snackbar.make(
|
||||
requireView(),
|
||||
CommonR.string.repository_unreachable,
|
||||
R.string.repository_unreachable,
|
||||
Snackbar.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
|
@ -6,10 +6,10 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.looker.core.common.R as CommonR
|
||||
import com.looker.core.common.extension.dp
|
||||
import com.looker.core.common.extension.systemBarsMargin
|
||||
import com.looker.core.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.R
|
||||
import com.looker.droidify.utility.common.extension.dp
|
||||
import com.looker.droidify.utility.common.extension.systemBarsMargin
|
||||
import com.looker.droidify.utility.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.database.CursorOwner
|
||||
import com.looker.droidify.databinding.RecyclerViewWithFabBinding
|
||||
import com.looker.droidify.service.Connection
|
||||
@ -34,8 +34,8 @@ class RepositoriesFragment : ScreenFragment(), CursorOwner.Callback {
|
||||
_binding = RecyclerViewWithFabBinding.inflate(inflater, container, false)
|
||||
val view = fragmentBinding.root.apply {
|
||||
binding.scrollUp.apply {
|
||||
setIconResource(CommonR.drawable.ic_add)
|
||||
setText(CommonR.string.add_repository)
|
||||
setIconResource(R.drawable.ic_add)
|
||||
setText(R.string.add_repository)
|
||||
setOnClickListener { screenActivity.navigateAddRepository() }
|
||||
systemBarsMargin(16.dp)
|
||||
}
|
||||
@ -81,7 +81,7 @@ class RepositoriesFragment : ScreenFragment(), CursorOwner.Callback {
|
||||
syncConnection.bind(requireContext())
|
||||
screenActivity.cursorOwner.attach(this, CursorOwner.Request.Repositories)
|
||||
screenActivity.onToolbarCreated(toolbar)
|
||||
toolbar.title = getString(CommonR.string.repositories)
|
||||
toolbar.title = getString(R.string.repositories)
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
|
@ -15,8 +15,8 @@ import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.looker.core.common.extension.getColorFromAttr
|
||||
import com.looker.core.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.utility.common.extension.getColorFromAttr
|
||||
import com.looker.droidify.utility.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.model.Repository
|
||||
import com.looker.droidify.databinding.RepositoryPageBinding
|
||||
import com.looker.droidify.ui.Message
|
||||
@ -29,7 +29,7 @@ import kotlinx.coroutines.launch
|
||||
import java.util.Date
|
||||
import java.util.Locale
|
||||
import com.google.android.material.R as MaterialR
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
|
||||
@AndroidEntryPoint
|
||||
class RepositoryFragment() : ScreenFragment() {
|
||||
|
@ -4,7 +4,7 @@ import android.content.Context
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.looker.core.common.extension.asStateFlow
|
||||
import com.looker.droidify.utility.common.extension.asStateFlow
|
||||
import com.looker.droidify.model.Repository
|
||||
import com.looker.droidify.database.Database
|
||||
import com.looker.droidify.service.Connection
|
||||
|
@ -23,23 +23,23 @@ import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import com.google.android.material.textfield.TextInputEditText
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.core.common.extension.getColorFromAttr
|
||||
import com.looker.core.common.extension.homeAsUp
|
||||
import com.looker.core.common.extension.systemBarsPadding
|
||||
import com.looker.core.common.extension.updateAsMutable
|
||||
import com.looker.core.common.isIgnoreBatteryEnabled
|
||||
import com.looker.core.common.requestBatteryFreedom
|
||||
import com.looker.core.datastore.Settings
|
||||
import com.looker.core.datastore.extension.autoSyncName
|
||||
import com.looker.core.datastore.extension.installerName
|
||||
import com.looker.core.datastore.extension.proxyName
|
||||
import com.looker.core.datastore.extension.themeName
|
||||
import com.looker.core.datastore.extension.toTime
|
||||
import com.looker.core.datastore.model.AutoSync
|
||||
import com.looker.core.datastore.model.InstallerType
|
||||
import com.looker.core.datastore.model.ProxyType
|
||||
import com.looker.core.datastore.model.Theme
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.extension.getColorFromAttr
|
||||
import com.looker.droidify.utility.common.extension.homeAsUp
|
||||
import com.looker.droidify.utility.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.utility.common.extension.updateAsMutable
|
||||
import com.looker.droidify.utility.common.isIgnoreBatteryEnabled
|
||||
import com.looker.droidify.utility.common.requestBatteryFreedom
|
||||
import com.looker.droidify.datastore.Settings
|
||||
import com.looker.droidify.datastore.extension.autoSyncName
|
||||
import com.looker.droidify.datastore.extension.installerName
|
||||
import com.looker.droidify.datastore.extension.proxyName
|
||||
import com.looker.droidify.datastore.extension.themeName
|
||||
import com.looker.droidify.datastore.extension.toTime
|
||||
import com.looker.droidify.datastore.model.AutoSync
|
||||
import com.looker.droidify.datastore.model.InstallerType
|
||||
import com.looker.droidify.datastore.model.ProxyType
|
||||
import com.looker.droidify.datastore.model.Theme
|
||||
import com.looker.droidify.BuildConfig
|
||||
import com.looker.droidify.databinding.EnumTypeBinding
|
||||
import com.looker.droidify.databinding.SettingsPageBinding
|
||||
@ -53,8 +53,7 @@ import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.days
|
||||
import kotlin.time.Duration.Companion.hours
|
||||
import com.google.android.material.R as MaterialR
|
||||
import com.looker.core.common.BuildConfig as CommonBuildConfig
|
||||
import com.looker.core.common.R as CommonR
|
||||
import com.looker.droidify.R
|
||||
|
||||
@AndroidEntryPoint
|
||||
class SettingsFragment : Fragment() {
|
||||
@ -66,7 +65,7 @@ class SettingsFragment : Fragment() {
|
||||
private const val REPO_BACKUP_NAME = "droidify_repos"
|
||||
private const val SETTINGS_BACKUP_NAME = "droidify_settings"
|
||||
|
||||
private val localeCodesList: List<String> = CommonBuildConfig.DETECTED_LOCALES
|
||||
private val localeCodesList: List<String> = BuildConfig.DETECTED_LOCALES
|
||||
.toList()
|
||||
.updateAsMutable { add(0, "system") }
|
||||
|
||||
@ -93,7 +92,7 @@ class SettingsFragment : Fragment() {
|
||||
if (fileUri != null) {
|
||||
viewModel.importSettings(fileUri)
|
||||
} else {
|
||||
viewModel.createSnackbar(CommonR.string.file_format_error_DESC)
|
||||
viewModel.createSnackbar(R.string.file_format_error_DESC)
|
||||
}
|
||||
}
|
||||
|
||||
@ -109,7 +108,7 @@ class SettingsFragment : Fragment() {
|
||||
if (fileUri != null) {
|
||||
viewModel.importRepos(fileUri)
|
||||
} else {
|
||||
viewModel.createSnackbar(CommonR.string.file_format_error_DESC)
|
||||
viewModel.createSnackbar(R.string.file_format_error_DESC)
|
||||
}
|
||||
}
|
||||
|
||||
@ -126,167 +125,167 @@ class SettingsFragment : Fragment() {
|
||||
val toolbar = binding.toolbar
|
||||
toolbar.navigationIcon = toolbar.context.homeAsUp
|
||||
toolbar.setNavigationOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() }
|
||||
toolbar.title = getString(CommonR.string.settings)
|
||||
toolbar.title = getString(R.string.settings)
|
||||
with(binding) {
|
||||
dynamicTheme.root.isVisible = SdkCheck.isSnowCake
|
||||
dynamicTheme.connect(
|
||||
titleText = getString(CommonR.string.material_you),
|
||||
contentText = getString(CommonR.string.material_you_desc),
|
||||
titleText = getString(R.string.material_you),
|
||||
contentText = getString(R.string.material_you_desc),
|
||||
setting = viewModel.getInitialSetting { dynamicTheme }
|
||||
)
|
||||
homeScreenSwiping.connect(
|
||||
titleText = getString(CommonR.string.home_screen_swiping),
|
||||
contentText = getString(CommonR.string.home_screen_swiping_DESC),
|
||||
titleText = getString(R.string.home_screen_swiping),
|
||||
contentText = getString(R.string.home_screen_swiping_DESC),
|
||||
setting = viewModel.getInitialSetting { homeScreenSwiping }
|
||||
)
|
||||
autoUpdate.connect(
|
||||
titleText = getString(CommonR.string.auto_update),
|
||||
contentText = getString(CommonR.string.auto_update_apps),
|
||||
titleText = getString(R.string.auto_update),
|
||||
contentText = getString(R.string.auto_update_apps),
|
||||
setting = viewModel.getInitialSetting { autoUpdate }
|
||||
)
|
||||
notifyUpdates.connect(
|
||||
titleText = getString(CommonR.string.notify_about_updates),
|
||||
contentText = getString(CommonR.string.notify_about_updates_summary),
|
||||
titleText = getString(R.string.notify_about_updates),
|
||||
contentText = getString(R.string.notify_about_updates_summary),
|
||||
setting = viewModel.getInitialSetting { notifyUpdate }
|
||||
)
|
||||
unstableUpdates.connect(
|
||||
titleText = getString(CommonR.string.unstable_updates),
|
||||
contentText = getString(CommonR.string.unstable_updates_summary),
|
||||
titleText = getString(R.string.unstable_updates),
|
||||
contentText = getString(R.string.unstable_updates_summary),
|
||||
setting = viewModel.getInitialSetting { unstableUpdate }
|
||||
)
|
||||
ignoreSignature.connect(
|
||||
titleText = getString(CommonR.string.ignore_signature),
|
||||
contentText = getString(CommonR.string.ignore_signature_summary),
|
||||
titleText = getString(R.string.ignore_signature),
|
||||
contentText = getString(R.string.ignore_signature_summary),
|
||||
setting = viewModel.getInitialSetting { ignoreSignature }
|
||||
)
|
||||
incompatibleUpdates.connect(
|
||||
titleText = getString(CommonR.string.incompatible_versions),
|
||||
contentText = getString(CommonR.string.incompatible_versions_summary),
|
||||
titleText = getString(R.string.incompatible_versions),
|
||||
contentText = getString(R.string.incompatible_versions_summary),
|
||||
setting = viewModel.getInitialSetting { incompatibleVersions }
|
||||
)
|
||||
language.connect(
|
||||
titleText = getString(CommonR.string.prefs_language_title),
|
||||
titleText = getString(R.string.prefs_language_title),
|
||||
map = { translateLocale(getLocaleOfCode(it)) },
|
||||
setting = viewModel.getSetting { language }
|
||||
) { selectedLocale, valueToString ->
|
||||
addSingleCorrectDialog(
|
||||
initialValue = selectedLocale,
|
||||
values = localeCodesList,
|
||||
title = CommonR.string.prefs_language_title,
|
||||
iconRes = CommonR.drawable.ic_language,
|
||||
title = R.string.prefs_language_title,
|
||||
iconRes = R.drawable.ic_language,
|
||||
valueToString = valueToString,
|
||||
onClick = viewModel::setLanguage
|
||||
)
|
||||
}
|
||||
theme.connect(
|
||||
titleText = getString(CommonR.string.theme),
|
||||
titleText = getString(R.string.theme),
|
||||
setting = viewModel.getSetting { theme },
|
||||
map = { themeName(it) }
|
||||
) { theme, valueToString ->
|
||||
addSingleCorrectDialog(
|
||||
initialValue = theme,
|
||||
values = Theme.entries,
|
||||
title = CommonR.string.themes,
|
||||
iconRes = CommonR.drawable.ic_themes,
|
||||
title = R.string.themes,
|
||||
iconRes = R.drawable.ic_themes,
|
||||
valueToString = valueToString,
|
||||
onClick = viewModel::setTheme
|
||||
)
|
||||
}
|
||||
cleanUp.connect(
|
||||
titleText = getString(CommonR.string.cleanup_title),
|
||||
titleText = getString(R.string.cleanup_title),
|
||||
setting = viewModel.getSetting { cleanUpInterval },
|
||||
map = { toTime(it) }
|
||||
) { duration, valueToString ->
|
||||
addSingleCorrectDialog(
|
||||
initialValue = duration,
|
||||
values = cleanUpIntervals,
|
||||
title = CommonR.string.cleanup_title,
|
||||
iconRes = CommonR.drawable.ic_time,
|
||||
title = R.string.cleanup_title,
|
||||
iconRes = R.drawable.ic_time,
|
||||
valueToString = valueToString,
|
||||
onClick = viewModel::setCleanUpInterval
|
||||
)
|
||||
}
|
||||
autoSync.connect(
|
||||
titleText = getString(CommonR.string.sync_repositories_automatically),
|
||||
titleText = getString(R.string.sync_repositories_automatically),
|
||||
setting = viewModel.getSetting { autoSync },
|
||||
map = { autoSyncName(it) }
|
||||
) { autoSync, valueToString ->
|
||||
addSingleCorrectDialog(
|
||||
initialValue = autoSync,
|
||||
values = AutoSync.entries,
|
||||
title = CommonR.string.sync_repositories_automatically,
|
||||
iconRes = CommonR.drawable.ic_sync_type,
|
||||
title = R.string.sync_repositories_automatically,
|
||||
iconRes = R.drawable.ic_sync_type,
|
||||
valueToString = valueToString,
|
||||
onClick = viewModel::setAutoSync
|
||||
)
|
||||
}
|
||||
installer.connect(
|
||||
titleText = getString(CommonR.string.installer),
|
||||
titleText = getString(R.string.installer),
|
||||
setting = viewModel.getSetting { installerType },
|
||||
map = { installerName(it) }
|
||||
) { installerType, valueToString ->
|
||||
addSingleCorrectDialog(
|
||||
initialValue = installerType,
|
||||
values = InstallerType.entries,
|
||||
title = CommonR.string.installer,
|
||||
iconRes = CommonR.drawable.ic_apk_install,
|
||||
title = R.string.installer,
|
||||
iconRes = R.drawable.ic_apk_install,
|
||||
valueToString = valueToString,
|
||||
onClick = { viewModel.setInstaller(requireContext(), it) }
|
||||
)
|
||||
}
|
||||
proxyType.connect(
|
||||
titleText = getString(CommonR.string.proxy_type),
|
||||
titleText = getString(R.string.proxy_type),
|
||||
setting = viewModel.getSetting { proxy.type },
|
||||
map = { proxyName(it) }
|
||||
) { proxyType, valueToString ->
|
||||
addSingleCorrectDialog(
|
||||
initialValue = proxyType,
|
||||
values = ProxyType.entries,
|
||||
title = CommonR.string.proxy_type,
|
||||
iconRes = CommonR.drawable.ic_proxy,
|
||||
title = R.string.proxy_type,
|
||||
iconRes = R.drawable.ic_proxy,
|
||||
valueToString = valueToString,
|
||||
onClick = viewModel::setProxyType
|
||||
)
|
||||
}
|
||||
proxyHost.connect(
|
||||
titleText = getString(CommonR.string.proxy_host),
|
||||
titleText = getString(R.string.proxy_host),
|
||||
setting = viewModel.getSetting { proxy.host },
|
||||
map = { it }
|
||||
) { host, _ ->
|
||||
addEditTextDialog(
|
||||
initialValue = host,
|
||||
title = CommonR.string.proxy_host,
|
||||
title = R.string.proxy_host,
|
||||
onFinish = viewModel::setProxyHost
|
||||
)
|
||||
}
|
||||
proxyPort.connect(
|
||||
titleText = getString(CommonR.string.proxy_port),
|
||||
titleText = getString(R.string.proxy_port),
|
||||
setting = viewModel.getSetting { proxy.port },
|
||||
map = { it.toString() }
|
||||
) { port, _ ->
|
||||
addEditTextDialog(
|
||||
initialValue = port.toString(),
|
||||
title = CommonR.string.proxy_port,
|
||||
title = R.string.proxy_port,
|
||||
onFinish = viewModel::setProxyPort
|
||||
)
|
||||
}
|
||||
|
||||
forceCleanUp.title.text = getString(CommonR.string.force_clean_up)
|
||||
forceCleanUp.content.text = getString(CommonR.string.force_clean_up_DESC)
|
||||
forceCleanUp.title.text = getString(R.string.force_clean_up)
|
||||
forceCleanUp.content.text = getString(R.string.force_clean_up_DESC)
|
||||
|
||||
importSettings.title.text = getString(CommonR.string.import_settings_title)
|
||||
importSettings.content.text = getString(CommonR.string.import_settings_DESC)
|
||||
exportSettings.title.text = getString(CommonR.string.export_settings_title)
|
||||
exportSettings.content.text = getString(CommonR.string.export_settings_DESC)
|
||||
importSettings.title.text = getString(R.string.import_settings_title)
|
||||
importSettings.content.text = getString(R.string.import_settings_DESC)
|
||||
exportSettings.title.text = getString(R.string.export_settings_title)
|
||||
exportSettings.content.text = getString(R.string.export_settings_DESC)
|
||||
|
||||
importRepos.title.text = getString(CommonR.string.import_repos_title)
|
||||
importRepos.content.text = getString(CommonR.string.import_repos_DESC)
|
||||
exportRepos.title.text = getString(CommonR.string.export_repos_title)
|
||||
exportRepos.content.text = getString(CommonR.string.export_repos_DESC)
|
||||
importRepos.title.text = getString(R.string.import_repos_title)
|
||||
importRepos.content.text = getString(R.string.import_repos_DESC)
|
||||
exportRepos.title.text = getString(R.string.export_repos_title)
|
||||
exportRepos.content.text = getString(R.string.export_repos_DESC)
|
||||
|
||||
allowBackgroundWork.title.text = getString(CommonR.string.require_background_access)
|
||||
allowBackgroundWork.title.text = getString(R.string.require_background_access)
|
||||
allowBackgroundWork.content.text =
|
||||
getString(CommonR.string.require_background_access_DESC)
|
||||
getString(R.string.require_background_access_DESC)
|
||||
allowBackgroundWork.root.setBackgroundColor(
|
||||
requireContext()
|
||||
.getColorFromAttr(MaterialR.attr.colorErrorContainer)
|
||||
@ -300,7 +299,7 @@ class SettingsFragment : Fragment() {
|
||||
requireContext()
|
||||
.getColorFromAttr(MaterialR.attr.colorOnErrorContainer)
|
||||
)
|
||||
creditFoxy.title.text = getString(CommonR.string.special_credits)
|
||||
creditFoxy.title.text = getString(R.string.special_credits)
|
||||
creditFoxy.content.text = FOXY_DROID_TITLE
|
||||
droidify.title.text = DROID_IFY_TITLE
|
||||
droidify.content.text = BuildConfig.VERSION_NAME
|
||||
@ -421,7 +420,7 @@ class SettingsFragment : Fragment() {
|
||||
)
|
||||
)
|
||||
} else {
|
||||
getString(CommonR.string.system)
|
||||
getString(R.string.system)
|
||||
}
|
||||
return languageDisplay
|
||||
}
|
||||
@ -430,7 +429,7 @@ class SettingsFragment : Fragment() {
|
||||
try {
|
||||
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(link)))
|
||||
} catch (e: IllegalStateException) {
|
||||
viewModel.createSnackbar(CommonR.string.cannot_open_link)
|
||||
viewModel.createSnackbar(R.string.cannot_open_link)
|
||||
}
|
||||
}
|
||||
|
||||
@ -515,7 +514,7 @@ class SettingsFragment : Fragment() {
|
||||
onClick(values.elementAt(newValue))
|
||||
}
|
||||
}
|
||||
.setNegativeButton(CommonR.string.cancel, null)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.create()
|
||||
|
||||
private fun View.addEditTextDialog(
|
||||
@ -526,7 +525,7 @@ class SettingsFragment : Fragment() {
|
||||
val scroll = NestedScrollView(context)
|
||||
val customEditText = TextInputEditText(context)
|
||||
customEditText.id = android.R.id.edit
|
||||
val paddingValue = context.resources.getDimension(CommonR.dimen.shape_margin_large).toInt()
|
||||
val paddingValue = context.resources.getDimension(R.dimen.shape_margin_large).toInt()
|
||||
scroll.setPadding(paddingValue, 0, paddingValue, 0)
|
||||
customEditText.setText(initialValue)
|
||||
customEditText.hint = customEditText.text.toString()
|
||||
@ -540,10 +539,10 @@ class SettingsFragment : Fragment() {
|
||||
return MaterialAlertDialogBuilder(context)
|
||||
.setTitle(title)
|
||||
.setView(scroll)
|
||||
.setPositiveButton(CommonR.string.ok) { _, _ ->
|
||||
.setPositiveButton(R.string.ok) { _, _ ->
|
||||
post { onFinish(customEditText.text.toString()) }
|
||||
}
|
||||
.setNegativeButton(CommonR.string.cancel, null)
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.create()
|
||||
.apply {
|
||||
window!!.setSoftInputMode(
|
||||
|
@ -7,14 +7,14 @@ import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.looker.core.datastore.Settings
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.core.datastore.get
|
||||
import com.looker.core.datastore.model.AutoSync
|
||||
import com.looker.core.datastore.model.InstallerType
|
||||
import com.looker.core.datastore.model.InstallerType.*
|
||||
import com.looker.core.datastore.model.ProxyType
|
||||
import com.looker.core.datastore.model.Theme
|
||||
import com.looker.droidify.datastore.Settings
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.get
|
||||
import com.looker.droidify.datastore.model.AutoSync
|
||||
import com.looker.droidify.datastore.model.InstallerType
|
||||
import com.looker.droidify.datastore.model.InstallerType.*
|
||||
import com.looker.droidify.datastore.model.ProxyType
|
||||
import com.looker.droidify.datastore.model.Theme
|
||||
import com.looker.droidify.database.Database
|
||||
import com.looker.droidify.database.RepositoryExporter
|
||||
import com.looker.droidify.work.CleanUpWorker
|
||||
@ -35,7 +35,7 @@ import kotlinx.coroutines.launch
|
||||
import java.util.Locale
|
||||
import javax.inject.Inject
|
||||
import kotlin.time.Duration
|
||||
import com.looker.core.common.R as CommonR
|
||||
import com.looker.droidify.R
|
||||
|
||||
@HiltViewModel
|
||||
class SettingsViewModel
|
||||
@ -156,7 +156,7 @@ class SettingsViewModel
|
||||
try {
|
||||
settingsRepository.setProxyPort(proxyPort.toInt())
|
||||
} catch (_: NumberFormatException) {
|
||||
createSnackbar(CommonR.string.proxy_port_error_not_int)
|
||||
createSnackbar(R.string.proxy_port_error_not_int)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -167,7 +167,7 @@ class SettingsViewModel
|
||||
SHIZUKU -> {
|
||||
if (isShizukuInstalled(context)) {
|
||||
if (!isShizukuAlive()) {
|
||||
createSnackbar(CommonR.string.shizuku_not_alive)
|
||||
createSnackbar(R.string.shizuku_not_alive)
|
||||
return@launch
|
||||
} else if (isShizukuGranted()) {
|
||||
settingsRepository.setInstallerType(installerType)
|
||||
@ -177,7 +177,7 @@ class SettingsViewModel
|
||||
}
|
||||
}
|
||||
} else {
|
||||
createSnackbar(CommonR.string.shizuku_not_installed)
|
||||
createSnackbar(R.string.shizuku_not_installed)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,14 +28,14 @@ import com.google.android.material.elevation.SurfaceColors
|
||||
import com.google.android.material.shape.MaterialShapeDrawable
|
||||
import com.google.android.material.shape.ShapeAppearanceModel
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
import com.looker.core.common.device.Huawei
|
||||
import com.looker.core.common.extension.dp
|
||||
import com.looker.core.common.extension.getMutatedIcon
|
||||
import com.looker.core.common.extension.selectableBackground
|
||||
import com.looker.core.common.extension.systemBarsPadding
|
||||
import com.looker.core.common.sdkAbove
|
||||
import com.looker.core.datastore.extension.sortOrderName
|
||||
import com.looker.core.datastore.model.SortOrder
|
||||
import com.looker.droidify.utility.common.device.Huawei
|
||||
import com.looker.droidify.utility.common.extension.dp
|
||||
import com.looker.droidify.utility.common.extension.getMutatedIcon
|
||||
import com.looker.droidify.utility.common.extension.selectableBackground
|
||||
import com.looker.droidify.utility.common.extension.systemBarsPadding
|
||||
import com.looker.droidify.utility.common.sdkAbove
|
||||
import com.looker.droidify.datastore.extension.sortOrderName
|
||||
import com.looker.droidify.datastore.model.SortOrder
|
||||
import com.looker.droidify.R
|
||||
import com.looker.droidify.databinding.TabsToolbarBinding
|
||||
import com.looker.droidify.model.ProductItem
|
||||
@ -53,8 +53,7 @@ import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlin.math.abs
|
||||
import kotlin.math.roundToInt
|
||||
import com.looker.core.common.R as CommonR
|
||||
import com.looker.core.common.R.string as stringRes
|
||||
import com.looker.droidify.R.string as stringRes
|
||||
|
||||
@AndroidEntryPoint
|
||||
class TabsFragment : ScreenFragment() {
|
||||
@ -184,7 +183,7 @@ class TabsFragment : ScreenFragment() {
|
||||
}
|
||||
|
||||
searchMenuItem = add(0, R.id.toolbar_search, 0, stringRes.search)
|
||||
.setIcon(toolbar.context.getMutatedIcon(CommonR.drawable.ic_search))
|
||||
.setIcon(toolbar.context.getMutatedIcon(R.drawable.ic_search))
|
||||
.setActionView(searchView)
|
||||
.setShowAsActionFlags(
|
||||
MenuItem.SHOW_AS_ACTION_ALWAYS or MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
|
||||
@ -202,7 +201,7 @@ class TabsFragment : ScreenFragment() {
|
||||
})
|
||||
|
||||
syncRepositoriesMenuItem = add(0, 0, 0, stringRes.sync_repositories)
|
||||
.setIcon(toolbar.context.getMutatedIcon(CommonR.drawable.ic_sync))
|
||||
.setIcon(toolbar.context.getMutatedIcon(R.drawable.ic_sync))
|
||||
.setOnMenuItemClickListener {
|
||||
// SyncWorker.startSyncWork(requireContext())
|
||||
syncConnection.binder?.sync(SyncService.SyncRequest.MANUAL)
|
||||
@ -210,7 +209,7 @@ class TabsFragment : ScreenFragment() {
|
||||
}
|
||||
|
||||
sortOrderMenu = addSubMenu(0, 0, 0, stringRes.sorting_order)
|
||||
.setIcon(toolbar.context.getMutatedIcon(CommonR.drawable.ic_sort))
|
||||
.setIcon(toolbar.context.getMutatedIcon(R.drawable.ic_sort))
|
||||
.let { menu ->
|
||||
menu.item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS)
|
||||
val menuItems = SortOrder.entries.map { sortOrder ->
|
||||
@ -226,7 +225,7 @@ class TabsFragment : ScreenFragment() {
|
||||
|
||||
favouritesItem = add(1, 0, 0, stringRes.favourites)
|
||||
.setIcon(
|
||||
toolbar.context.getMutatedIcon(CommonR.drawable.ic_favourite_checked)
|
||||
toolbar.context.getMutatedIcon(R.drawable.ic_favourite_checked)
|
||||
)
|
||||
.setOnMenuItemClickListener {
|
||||
view.post { screenActivity.navigateFavourites() }
|
||||
@ -303,7 +302,7 @@ class TabsFragment : ScreenFragment() {
|
||||
|
||||
val backgroundPath = ShapeAppearanceModel.builder()
|
||||
.setAllCornerSizes(
|
||||
context?.resources?.getDimension(CommonR.dimen.shape_large_corner) ?: 0F
|
||||
context?.resources?.getDimension(R.dimen.shape_large_corner) ?: 0F
|
||||
)
|
||||
.build()
|
||||
val sectionBackground = MaterialShapeDrawable(backgroundPath)
|
||||
|
@ -3,10 +3,10 @@ package com.looker.droidify.ui.tabsFragment
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.looker.core.common.extension.asStateFlow
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.core.datastore.get
|
||||
import com.looker.core.datastore.model.SortOrder
|
||||
import com.looker.droidify.utility.common.extension.asStateFlow
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import com.looker.droidify.datastore.get
|
||||
import com.looker.droidify.datastore.model.SortOrder
|
||||
import com.looker.droidify.model.ProductItem
|
||||
import com.looker.droidify.database.Database
|
||||
import com.looker.droidify.ui.tabsFragment.TabsFragment.BackAction
|
||||
|
@ -6,7 +6,7 @@ import android.content.pm.PackageItemInfo
|
||||
import android.content.pm.PermissionInfo
|
||||
import android.content.res.Resources
|
||||
import android.os.Build
|
||||
import com.looker.core.common.SdkCheck
|
||||
import com.looker.droidify.utility.common.SdkCheck
|
||||
import java.util.Locale
|
||||
|
||||
object PackageItemResolver {
|
||||
|
@ -1,9 +1,9 @@
|
||||
package com.looker.droidify.utility.extension
|
||||
|
||||
import android.content.pm.PackageInfo
|
||||
import com.looker.core.common.extension.calculateHash
|
||||
import com.looker.core.common.extension.singleSignature
|
||||
import com.looker.core.common.extension.versionCodeCompat
|
||||
import com.looker.droidify.utility.common.extension.calculateHash
|
||||
import com.looker.droidify.utility.common.extension.singleSignature
|
||||
import com.looker.droidify.utility.common.extension.versionCodeCompat
|
||||
import com.looker.droidify.model.InstalledItem
|
||||
|
||||
fun PackageInfo.toInstalledItem(): InstalledItem {
|
||||
|
@ -5,7 +5,7 @@ import android.graphics.Canvas
|
||||
import android.graphics.Rect
|
||||
import android.view.View
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.looker.core.common.extension.divider
|
||||
import com.looker.droidify.utility.common.extension.divider
|
||||
import com.looker.droidify.R
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
|
@ -10,8 +10,8 @@ import androidx.work.OneTimeWorkRequestBuilder
|
||||
import androidx.work.PeriodicWorkRequestBuilder
|
||||
import androidx.work.WorkManager
|
||||
import androidx.work.WorkerParameters
|
||||
import com.looker.core.common.cache.Cache
|
||||
import com.looker.core.datastore.SettingsRepository
|
||||
import com.looker.droidify.utility.common.cache.Cache
|
||||
import com.looker.droidify.datastore.SettingsRepository
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedInject
|
||||
import kotlin.time.Duration
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user