Skip to content

Commit

Permalink
start migrating packagemanager to di
Browse files Browse the repository at this point in the history
  • Loading branch information
X1nto committed Mar 5, 2022
1 parent e010ed0 commit a1662ba
Show file tree
Hide file tree
Showing 17 changed files with 702 additions and 213 deletions.
1 change: 1 addition & 0 deletions app/src/main/java/com/vanced/manager/ManagerApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class ManagerApplication : Application() {
datasourceModule,
downloaderModule,
installerModule,
managerModule,
networkModule,
repositoryModule,
serviceModule,
Expand Down
11 changes: 0 additions & 11 deletions app/src/main/java/com/vanced/manager/di/DatasourceModule.kt
Original file line number Diff line number Diff line change
@@ -1,23 +1,13 @@
package com.vanced.manager.di

import android.content.Context
import com.vanced.manager.repository.source.PkgInfoDatasource
import com.vanced.manager.repository.source.PkgInfoDatasourceImpl
import com.vanced.manager.repository.source.PreferenceDatasource
import com.vanced.manager.repository.source.PreferenceDatasourceImpl
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module

val datasourceModule = module {

fun providePkgInfoDatasource(
context: Context
): PkgInfoDatasource {
return PkgInfoDatasourceImpl(
packageManager = context.packageManager
)
}

fun providePreferenceDatasource(
context: Context
): PreferenceDatasource {
Expand All @@ -29,6 +19,5 @@ val datasourceModule = module {
)
}

single { providePkgInfoDatasource(androidContext()) }
single { providePreferenceDatasource(androidContext()) }
}
30 changes: 21 additions & 9 deletions app/src/main/java/com/vanced/manager/di/InstallerModuke.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,36 +4,48 @@ import android.content.Context
import com.vanced.manager.installer.impl.MicrogInstaller
import com.vanced.manager.installer.impl.MusicInstaller
import com.vanced.manager.installer.impl.VancedInstaller
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.RootPackageManager
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module

val installerModule = module {

fun provideVancedInstaller(
context: Context
context: Context,
nonrootPackageManager: NonrootPackageManager,
rootPackageManager: RootPackageManager
): VancedInstaller {
return VancedInstaller(
context = context
context = context,
nonrootPackageManager = nonrootPackageManager,
rootPackageManager = rootPackageManager
)
}

fun provideMusicInstaller(
context: Context
context: Context,
nonrootPackageManager: NonrootPackageManager,
rootPackageManager: RootPackageManager
): MusicInstaller {
return MusicInstaller(
context = context
context = context,
nonrootPackageManager = nonrootPackageManager,
rootPackageManager = rootPackageManager
)
}

fun provideMicrogInstaller(
context: Context
context: Context,
nonrootPackageManager: NonrootPackageManager,
): MicrogInstaller {
return MicrogInstaller(
context = context
context = context,
nonrootPackageManager = nonrootPackageManager
)
}

single { provideVancedInstaller(androidContext()) }
single { provideMusicInstaller(androidContext()) }
single { provideMicrogInstaller(androidContext()) }
single { provideVancedInstaller(androidContext(), get(), get()) }
single { provideMusicInstaller(androidContext(), get(), get()) }
single { provideMicrogInstaller(androidContext(), get()) }
}
25 changes: 25 additions & 0 deletions app/src/main/java/com/vanced/manager/di/ManagerModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.vanced.manager.di

import android.content.Context
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.RootPackageManager
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module

val managerModule = module {

fun provideNonrootPackageManager(
context: Context
): NonrootPackageManager {
return NonrootPackageManager(
context = context
)
}

fun provideRootPackageManager(): RootPackageManager {
return RootPackageManager()
}

single { provideNonrootPackageManager(androidContext()) }
single { provideRootPackageManager() }
}
11 changes: 7 additions & 4 deletions app/src/main/java/com/vanced/manager/di/RepositoryModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,22 @@ import com.vanced.manager.repository.AppRepository
import com.vanced.manager.repository.AppRepositoryImpl
import com.vanced.manager.repository.PreferenceRepository
import com.vanced.manager.repository.PreferenceRepositoryImpl
import com.vanced.manager.repository.source.PkgInfoDatasource
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.RootPackageManager
import com.vanced.manager.repository.source.PreferenceDatasource
import org.koin.dsl.module

val repositoryModule = module {

fun provideGithubRepository(
githubService: GithubService,
pkgInfoDatasource: PkgInfoDatasource
nonrootPackageManager: NonrootPackageManager,
rootPackageManager: RootPackageManager,
): AppRepository {
return AppRepositoryImpl(
githubService = githubService,
pkgInfoDatasource = pkgInfoDatasource
nonrootPackageManager = nonrootPackageManager,
rootPackageManager = rootPackageManager
)
}

Expand All @@ -29,6 +32,6 @@ val repositoryModule = module {
)
}

single { provideGithubRepository(get(), get()) }
single { provideGithubRepository(get(), get(), get()) }
single { providePreferenceRepository(get()) }
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.vanced.manager.installer.base

import com.vanced.manager.installer.util.PMRootResult
import com.vanced.manager.repository.manager.PackageManagerResult

abstract class AppInstaller {

abstract fun install(appVersions: List<String>?)
abstract suspend fun install(appVersions: List<String>?)

abstract fun installRoot(appVersions: List<String>?): PMRootResult<Nothing>
abstract suspend fun installRoot(appVersions: List<String>?): PackageManagerResult<Nothing>

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,22 @@ package com.vanced.manager.installer.impl
import android.content.Context
import com.vanced.manager.downloader.util.getMicrogPath
import com.vanced.manager.installer.base.AppInstaller
import com.vanced.manager.installer.util.PM
import com.vanced.manager.installer.util.PMRootResult
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.PackageManagerResult
import java.io.File

class MicrogInstaller(
private val context: Context
private val context: Context,
private val nonrootPackageManager: NonrootPackageManager,
) : AppInstaller() {

override fun install(
appVersions: List<String>?
) {
val musicApk = File(getMicrogPath(context) + "/microg.apk")
override suspend fun install(appVersions: List<String>?) {
val musicApk = File(getMicrogPath(context), "microg.apk")

PM.installApp(musicApk, context)
nonrootPackageManager.installApp(musicApk)
}

override fun installRoot(appVersions: List<String>?): PMRootResult<Nothing> {
override suspend fun installRoot(appVersions: List<String>?): PackageManagerResult<Nothing> {
throw IllegalAccessException("Vanced microG does not have a root installer")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@ import com.vanced.manager.domain.model.AppData
import com.vanced.manager.downloader.util.getStockYoutubeMusicPath
import com.vanced.manager.downloader.util.getVancedYoutubeMusicPath
import com.vanced.manager.installer.base.AppInstaller
import com.vanced.manager.installer.util.PM
import com.vanced.manager.installer.util.PMRoot
import com.vanced.manager.installer.util.PMRootResult
import com.vanced.manager.installer.util.RootPatchHelper
import com.vanced.manager.preferences.holder.managerVariantPref
import com.vanced.manager.preferences.holder.musicVersionPref
import com.vanced.manager.preferences.holder.vancedVersionPref
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.PackageManagerResult
import com.vanced.manager.repository.manager.RootPackageManager
import com.vanced.manager.util.getLatestOrProvidedAppVersion
import java.io.File

class MusicInstaller(
private val context: Context
private val context: Context,
private val rootPackageManager: RootPackageManager,
private val nonrootPackageManager: NonrootPackageManager,
) : AppInstaller() {

override fun install(
appVersions: List<String>?
) {
override suspend fun install(appVersions: List<String>?) {
val absoluteVersion = getLatestOrProvidedAppVersion(musicVersionPref, appVersions)

val musicApk = File(
Expand All @@ -32,33 +32,33 @@ class MusicInstaller(
) + "/music.apk"
)

PM.installApp(musicApk, context)
nonrootPackageManager.installApp(musicApk)
}

override fun installRoot(appVersions: List<String>?): PMRootResult<Nothing> {
override suspend fun installRoot(appVersions: List<String>?): PackageManagerResult<Nothing> {
val absoluteVersion = getLatestOrProvidedAppVersion(vancedVersionPref, appVersions)

val stockPath = getStockYoutubeMusicPath(absoluteVersion, context) + "/base.apk"
val vancedPath = getVancedYoutubeMusicPath(absoluteVersion, "root", context) + "/base.apk"
val stock = File(getStockYoutubeMusicPath(absoluteVersion, context), "base.apk")
val vanced = File(getVancedYoutubeMusicPath(absoluteVersion, "root", context), "base.apk")

val prepareStock = RootPatchHelper.prepareStock(
stockPackage = AppData.PACKAGE_ROOT_VANCED_YOUTUBE_MUSIC,
stockVersion = absoluteVersion
) {
PMRoot.installApp(stockPath)
rootPackageManager.installApp(stock)
}
if (prepareStock.isError)
return prepareStock

val patchStock = RootPatchHelper.patchStock(
patchPath = vancedPath,
patchPath = vanced.absolutePath,
stockPackage = AppData.PACKAGE_ROOT_VANCED_YOUTUBE_MUSIC,
app = APP_KEY
)
if (patchStock.isError)
return patchStock

return PMRootResult.Success()
return PackageManagerResult.Success(null)
}

companion object {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,41 @@ import com.vanced.manager.domain.model.AppData
import com.vanced.manager.downloader.util.getStockYoutubePath
import com.vanced.manager.downloader.util.getVancedYoutubePath
import com.vanced.manager.installer.base.AppInstaller
import com.vanced.manager.installer.util.PM
import com.vanced.manager.installer.util.PMRoot
import com.vanced.manager.installer.util.PMRootResult
import com.vanced.manager.installer.util.RootPatchHelper
import com.vanced.manager.preferences.holder.vancedVersionPref
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.PackageManagerResult
import com.vanced.manager.repository.manager.RootPackageManager
import com.vanced.manager.util.getLatestOrProvidedAppVersion
import java.io.File

class VancedInstaller(
private val context: Context
private val context: Context,
private val rootPackageManager: RootPackageManager,
private val nonrootPackageManager: NonrootPackageManager,
) : AppInstaller() {

override fun install(
appVersions: List<String>?
) {
override suspend fun install(appVersions: List<String>?) {
val absoluteVersion = getLatestOrProvidedAppVersion(vancedVersionPref, appVersions)

val apks = File(getVancedYoutubePath(absoluteVersion, "nonroot", context))
.listFiles()

PM.installSplitApp(apks!!, context)
nonrootPackageManager.installSplitApp(apks!!)
}

override fun installRoot(appVersions: List<String>?): PMRootResult<Nothing> {
override suspend fun installRoot(appVersions: List<String>?): PackageManagerResult<Nothing> {
val absoluteVersion = getLatestOrProvidedAppVersion(vancedVersionPref, appVersions)

val stockApks = File(getStockYoutubePath(absoluteVersion, context))
.listFiles()?.map { it.absolutePath }
.listFiles()
val vancedBaseApk = getVancedYoutubePath(absoluteVersion, "root", context) + "/base.apk"

val prepareStock = RootPatchHelper.prepareStock(
stockPackage = AppData.PACKAGE_ROOT_VANCED_YOUTUBE,
stockVersion = absoluteVersion,
) {
PMRoot.installSplitApp(stockApks!!)
rootPackageManager.installSplitApp(stockApks!!)
}
if (prepareStock.isError)
return prepareStock
Expand All @@ -52,7 +52,7 @@ class VancedInstaller(
if (patchStock.isError)
return patchStock

return PMRootResult.Success()
return PackageManagerResult.Success(null)
}

companion object {
Expand Down
Loading

0 comments on commit a1662ba

Please sign in to comment.