Skip to content

Commit

Permalink
Merge pull request MarathonLabs#164 from Malinskiy/check_before_unins…
Browse files Browse the repository at this point in the history
…tall

Check is package installed before uninstall
  • Loading branch information
Vacxe authored Feb 1, 2019
2 parents d07c10b + b15e3c3 commit d2f0d2b
Showing 1 changed file with 14 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import com.android.ddmlib.InstallException
import com.malinskiy.marathon.android.AndroidConfiguration
import com.malinskiy.marathon.android.AndroidDevice
import com.malinskiy.marathon.android.ApkParser
import com.malinskiy.marathon.android.executor.listeners.video.CollectingShellOutputReceiver
import com.malinskiy.marathon.android.safeExecuteShellCommand
import com.malinskiy.marathon.android.safeInstallPackage
import com.malinskiy.marathon.android.safeUninstallPackage
import com.malinskiy.marathon.execution.Configuration
Expand Down Expand Up @@ -39,9 +41,11 @@ class AndroidAppInstaller(configuration: Configuration) {

withRetry(attempts = MAX_RETIRES, delayTime = 1000) {
try {
logger.info("Uninstalling $appPackage from ${device.serialNumber}")
val uninstallMessage = ddmsDevice.safeUninstallPackage(appPackage)
uninstallMessage?.let { logger.debug { it } }
if (installed(ddmsDevice, appPackage)) {
logger.info("Uninstalling $appPackage from ${device.serialNumber}")
val uninstallMessage = ddmsDevice.safeUninstallPackage(appPackage)
uninstallMessage?.let { logger.debug { it } }
}
logger.info("Installing $appPackage to ${device.serialNumber}")
val installMessage = ddmsDevice.safeInstallPackage(appApk.absolutePath, true, optionalParams(ddmsDevice))
installMessage?.let { logger.debug { it } }
Expand All @@ -52,6 +56,13 @@ class AndroidAppInstaller(configuration: Configuration) {
}
}

private fun installed(ddmsDevice: IDevice, appPackage: String): Boolean {
val receiver = CollectingShellOutputReceiver()
ddmsDevice.safeExecuteShellCommand("pm list packages", receiver)
val lines = receiver.output().lines()
return lines.any { it == "package:$appPackage" }
}

private fun optionalParams(device: IDevice): String {
return if (device.version.apiLevel >= MARSHMALLOW_VERSION_CODE && androidConfiguration.autoGrantPermission) {
"-g -r"
Expand Down

0 comments on commit d2f0d2b

Please sign in to comment.