imp: Monolithic arch

This commit is contained in:
LooKeR 2025-01-22 23:52:23 +05:30
parent 94892f12f5
commit 72a1f15473
No known key found for this signature in database
GPG Key ID: 6B59369FDB608FB9
233 changed files with 587 additions and 15434 deletions

View File

@ -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")

View File

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

View File

@ -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" />

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
package com.looker.core.datastore.model
package com.looker.droidify.datastore.model
enum class AutoSync {
ALWAYS,

View File

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

View File

@ -1,4 +1,4 @@
package com.looker.core.datastore.model
package com.looker.droidify.datastore.model
import kotlinx.serialization.Serializable

View File

@ -1,4 +1,4 @@
package com.looker.core.datastore.model
package com.looker.droidify.datastore.model
enum class ProxyType {
DIRECT,

View File

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

View File

@ -1,4 +1,4 @@
package com.looker.core.datastore.model
package com.looker.droidify.datastore.model
enum class Theme {
SYSTEM,

View File

@ -1,6 +1,6 @@
@file:Suppress("unused")
package com.looker.core.di
package com.looker.droidify.di
import dagger.Module
import dagger.Provides

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
package com.looker.network
package com.looker.droidify.network
import java.io.File
import java.util.Locale

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
package com.looker.network.header
package com.looker.droidify.network.header
import java.util.Date

View File

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

View File

@ -1,4 +1,4 @@
package com.looker.network.validation
package com.looker.droidify.network.validation
import java.io.File

View File

@ -1,4 +1,4 @@
package com.looker.network.validation
package com.looker.droidify.network.validation
class ValidationException(override val message: String) : Exception(message)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View 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

View File

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

View File

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

View File

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

View File

@ -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>() {

View File

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

View File

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

View File

@ -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>() {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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() {

View File

@ -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() {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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