Compare commits
1 commit
28a5de1c01
...
b59a85e120
Author | SHA1 | Date | |
---|---|---|---|
b59a85e120 |
1 changed files with 16 additions and 14 deletions
|
@ -3,6 +3,7 @@ package im.angry.openeuicc.util
|
||||||
import android.content.ComponentName
|
import android.content.ComponentName
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.pm.ActivityInfo
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
|
@ -29,34 +30,35 @@ class SIMToolkit(private val context: Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
data class Slot(private val context: Context, private val components: Set<ComponentName>) {
|
data class Slot(private val context: Context, private val components: Set<ComponentName>) {
|
||||||
|
private val packageManager: PackageManager
|
||||||
|
get() = context.packageManager
|
||||||
|
|
||||||
private val packageNames: Iterable<String>
|
private val packageNames: Iterable<String>
|
||||||
get() = components.map { it.packageName }.toSet()
|
get() = components.map(ComponentName::getPackageName).toSet()
|
||||||
|
|
||||||
private val launchIntent: Intent?
|
private val launchIntent: Intent?
|
||||||
get() = packageNames.firstNotNullOfOrNull(context.packageManager::getLaunchIntent)
|
get() = packageNames.firstNotNullOfOrNull(packageManager::getLaunchIntent)
|
||||||
|
|
||||||
private val activities: Iterable<ComponentName>
|
private val activities: Iterable<ComponentName>
|
||||||
get() = packageNames.flatMap(context.packageManager::getActivities)
|
get() = packageNames.flatMap(packageManager::getActivities)
|
||||||
.filter { it.exported }.map { ComponentName(it.packageName, it.name) }
|
.filter(ActivityInfo::exported).map { ComponentName(it.packageName, it.name) }
|
||||||
|
|
||||||
val available: Boolean
|
val available: Boolean
|
||||||
get() = getIntent() != null || getDisabledPackageName() != null
|
get() = getIntent() != null || getDisabledPackageName() != null
|
||||||
|
|
||||||
private fun getIntent(): Intent? {
|
private fun getIntent(): Intent? {
|
||||||
try {
|
for (activity in activities) {
|
||||||
val component = components.find(activities::contains) ?: return launchIntent
|
if (!components.contains(activity)) continue
|
||||||
if (isDisabledState(context.packageManager.getComponentEnabledSetting(component)))
|
if (isDisabledState(packageManager.getComponentEnabledSetting(activity))) continue
|
||||||
return null
|
return Intent.makeMainActivity(activity)
|
||||||
return Intent.makeMainActivity(component)
|
|
||||||
} catch (e: IllegalArgumentException) {
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
|
return launchIntent
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getDisabledPackageName() = packageNames.find {
|
private fun getDisabledPackageName() = packageNames.find {
|
||||||
try {
|
try {
|
||||||
isDisabledState(context.packageManager.getApplicationEnabledSetting(it))
|
isDisabledState(packageManager.getApplicationEnabledSetting(it))
|
||||||
} catch (e: IllegalArgumentException) {
|
} catch (_: IllegalArgumentException) {
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +69,7 @@ class SIMToolkit(private val context: Context) {
|
||||||
val pkgName = getDisabledPackageName() ?: return false
|
val pkgName = getDisabledPackageName() ?: return false
|
||||||
val message = context.getString(
|
val message = context.getString(
|
||||||
R.string.toast_prompt_to_enable_sim_toolkit,
|
R.string.toast_prompt_to_enable_sim_toolkit,
|
||||||
context.packageManager.getApplicationLabel(pkgName)
|
packageManager.getApplicationLabel(pkgName)
|
||||||
)
|
)
|
||||||
intent = Intent(
|
intent = Intent(
|
||||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||||
|
|
Loading…
Add table
Reference in a new issue