aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/moe
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/moe')
-rw-r--r--app/src/main/java/moe/yuuta/ext/HandlerThreadExecutor.java26
-rw-r--r--app/src/main/java/moe/yuuta/workmode/ApplicationPickerActivity.kt4
-rw-r--r--app/src/main/java/moe/yuuta/workmode/MainActivity.kt17
-rw-r--r--app/src/main/java/moe/yuuta/workmode/access/AccessLayer.kt4
-rw-r--r--app/src/main/java/moe/yuuta/workmode/access/AccessLayerUtil.kt5
-rw-r--r--app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt7
-rw-r--r--app/src/main/java/moe/yuuta/workmode/suspend/data/TransferableSuspendedApp.kt2
-rw-r--r--app/src/main/java/moe/yuuta/workmode/utils/ByteArraySerializer.kt26
-rw-r--r--app/src/main/java/moe/yuuta/workmode/utils/Utils.kt18
9 files changed, 30 insertions, 79 deletions
diff --git a/app/src/main/java/moe/yuuta/ext/HandlerThreadExecutor.java b/app/src/main/java/moe/yuuta/ext/HandlerThreadExecutor.java
deleted file mode 100644
index d6c51bc..0000000
--- a/app/src/main/java/moe/yuuta/ext/HandlerThreadExecutor.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package moe.yuuta.ext;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.util.Log;
-import androidx.annotation.Nullable;
-
-import java.util.concurrent.Executor;
-
-/**
- * https://stackoverflow.com/a/21256419/6792243
- */
-public class HandlerThreadExecutor implements Executor {
- private final Handler mHandler;
- public HandlerThreadExecutor(@Nullable Handler optionalHandler) {
- mHandler = optionalHandler != null ? optionalHandler : new Handler(Looper.getMainLooper());
- }
-
- @Override
- public void execute(Runnable command) {
- Log.d("Debug", "execute: " + command.toString());
- mHandler.post(command);
- Log.d("Debug", "done executing");
- //
- }
-} \ No newline at end of file
diff --git a/app/src/main/java/moe/yuuta/workmode/ApplicationPickerActivity.kt b/app/src/main/java/moe/yuuta/workmode/ApplicationPickerActivity.kt
index 736fb0a..5723ab1 100644
--- a/app/src/main/java/moe/yuuta/workmode/ApplicationPickerActivity.kt
+++ b/app/src/main/java/moe/yuuta/workmode/ApplicationPickerActivity.kt
@@ -91,7 +91,7 @@ class ApplicationPickerActivity : AppCompatActivity() {
if (::mLoadAppsFuture.isInitialized && !mLoadAppsFuture.isDone) {
mLoadAppsFuture.cancel(true)
}
- mLoadAppsFuture = AsyncSuspender(this).getInstalledApplicationsAcrossUser(0)
+ mLoadAppsFuture = AsyncSuspender(this).getInstalledApplicationsAcrossUser(PackageManager.MATCH_DISABLED_COMPONENTS)
mProgressBar.visibility = View.VISIBLE
fab.visibility = View.GONE
mLoadAppsFuture
@@ -176,7 +176,7 @@ class ApplicationPickerActivity : AppCompatActivity() {
else context
.packageManager
.getApplicationLabel(
- context.packageManager.getApplicationInfo(packageInfo.packageInfo.packageName, 0)
+ context.packageManager.getApplicationInfo(packageInfo.packageInfo.packageName, PackageManager.MATCH_DISABLED_COMPONENTS)
)
holder.summary.text = context.getString(R.string.app_list_user_template, packageInfo.packageInfo.userId)
holder.checkBox.isChecked = packageInfo.selected
diff --git a/app/src/main/java/moe/yuuta/workmode/MainActivity.kt b/app/src/main/java/moe/yuuta/workmode/MainActivity.kt
index de913c3..b3f4882 100644
--- a/app/src/main/java/moe/yuuta/workmode/MainActivity.kt
+++ b/app/src/main/java/moe/yuuta/workmode/MainActivity.kt
@@ -171,6 +171,12 @@ class MainActivity : AppCompatActivity(), SwitchBar.OnSwitchChangeListener, View
// TODO
val canSafelyLoadAppInfoForO1 = Utils.canSafelyLoadAppInfo(o1, this@MainActivity)
val canSafelyLoadAppInfoForO2 = Utils.canSafelyLoadAppInfo(o2, this@MainActivity)
+ if ((canSafelyLoadAppInfoForO1 && !canSafelyLoadAppInfoForO2) ||
+ (!canSafelyLoadAppInfoForO1 && canSafelyLoadAppInfoForO2)) {
+ // A unsafe app is comparing to a safe app, just put the unsafe one in under the safe one.
+ return@sorted 1
+ }
+ // They are both unsafe requests.
if (!canSafelyLoadAppInfoForO1 ||
!canSafelyLoadAppInfoForO2) {
if (o1.userId > o2.userId) {
@@ -181,13 +187,8 @@ class MainActivity : AppCompatActivity(), SwitchBar.OnSwitchChangeListener, View
return@sorted 0
}
}
- if ((canSafelyLoadAppInfoForO1 && !canSafelyLoadAppInfoForO2) ||
- (!canSafelyLoadAppInfoForO1 && canSafelyLoadAppInfoForO2)) {
- // A unsafe app is comparing to a safe app, just put the unsafe one in under the safe one.
- return@sorted 1
- }
- return@sorted sCollator.compare(packageManager.getApplicationLabel(packageManager.getApplicationInfo(o1.packageName, 0)).toString()
- , packageManager.getApplicationLabel(packageManager.getApplicationInfo(o2.packageName, 0)))
+ return@sorted sCollator.compare(packageManager.getApplicationLabel(packageManager.getApplicationInfo(o1.packageName, PackageManager.MATCH_DISABLED_COMPONENTS)).toString()
+ , packageManager.getApplicationLabel(packageManager.getApplicationInfo(o2.packageName, PackageManager.MATCH_DISABLED_COMPONENTS)))
}
.collect(Collectors.toList())
}
@@ -397,7 +398,7 @@ private class Adapter : RecyclerView.Adapter<Adapter.VH>() {
context
.packageManager
.getApplicationLabel(
- context.packageManager.getApplicationInfo(packageInfo.packageName, 0)
+ context.packageManager.getApplicationInfo(packageInfo.packageName, PackageManager.MATCH_DISABLED_COMPONENTS)
)
else
packageInfo.packageName
diff --git a/app/src/main/java/moe/yuuta/workmode/access/AccessLayer.kt b/app/src/main/java/moe/yuuta/workmode/access/AccessLayer.kt
index d3fccb6..ed6e75b 100644
--- a/app/src/main/java/moe/yuuta/workmode/access/AccessLayer.kt
+++ b/app/src/main/java/moe/yuuta/workmode/access/AccessLayer.kt
@@ -49,7 +49,7 @@ internal class AccessLayer(internal val mContext: Context) {
* Create a new process and access it.
*/
fun getSuspendedPackageAppExtras(packageName: String, userId: Int): PersistableBundle? {
- Os.setuid(mPM.getPackageUid(packageName, 0))
+ Os.setuid(mPM.getPackageUid(packageName, PackageManager.MATCH_DISABLED_COMPONENTS))
// ApplicationPackageManager ALWAYS uses hostContext.getOpPackageName() as the package name
// F**k Google
val func: Method = Class.forName("android.content.pm.IPackageManager")
@@ -78,7 +78,7 @@ internal class AccessLayer(internal val mContext: Context) {
mContext.getSystemService(LauncherApps::class.java).getSuspendedPackageLauncherExtras(packageName,
createUserHandleWithUserID(userId))
- fun getInstalledApplicationsAsUser(flags: Int, userId: Int): List<ApplicationInfo> =
+ fun getInstalledApplicationsAsUser(@PackageManager.ApplicationInfoFlags flags: Int, userId: Int): List<ApplicationInfo> =
mPM.getInstalledApplicationsAsUser(flags, userId)
companion object {
diff --git a/app/src/main/java/moe/yuuta/workmode/access/AccessLayerUtil.kt b/app/src/main/java/moe/yuuta/workmode/access/AccessLayerUtil.kt
index 7248198..08aed19 100644
--- a/app/src/main/java/moe/yuuta/workmode/access/AccessLayerUtil.kt
+++ b/app/src/main/java/moe/yuuta/workmode/access/AccessLayerUtil.kt
@@ -1,6 +1,7 @@
package moe.yuuta.workmode.access
import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager
import android.os.*
import com.elvishew.xlog.XLog
import moe.yuuta.workmode.R
@@ -80,10 +81,10 @@ internal class AccessLayerUtil(private val accessLayer: AccessLayer) {
accessLayer.getSuspendedPackageLauncherExtras(packageName = packageInfo.packageName,
userId = packageInfo.userId)
- fun getInstalledApplicationsAsUser(flags: Int, userId: Int): List<ApplicationInfo> =
+ fun getInstalledApplicationsAsUser(@PackageManager.ApplicationInfoFlags flags: Int, userId: Int): List<ApplicationInfo> =
accessLayer.getInstalledApplicationsAsUser(flags, userId)
- fun getInstalledApplicationsAnyUser(flags: Int): List<ApplicationInfo> {
+ fun getInstalledApplicationsAnyUser(@PackageManager.ApplicationInfoFlags flags: Int): List<ApplicationInfo> {
val userManager = accessLayer.mContext.getSystemService(UserManager::class.java)
val finalResult = mutableListOf<ApplicationInfo>()
val ids = userManager.getUsers(false)
diff --git a/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt b/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt
index af60701..7bfe2f4 100644
--- a/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt
+++ b/app/src/main/java/moe/yuuta/workmode/access/WorkModeAccessor.kt
@@ -5,6 +5,7 @@ import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.pm.ApplicationInfo
+import android.content.pm.PackageManager
import android.os.Bundle
import android.os.PersistableBundle
import android.os.UserHandle
@@ -87,7 +88,7 @@ class WorkModeAccessor {
return result
}
- private fun _getInstalledApplicationsAcrossUser(pmAccess: AccessLayerUtil, hostInfo: HostInfo, flags: Int): MutableList<TransferableSuspendedApp> {
+ private fun _getInstalledApplicationsAcrossUser(pmAccess: AccessLayerUtil, hostInfo: HostInfo, @PackageManager.ApplicationInfoFlags flags: Int): MutableList<TransferableSuspendedApp> {
val originalApplicationInfo = mutableMapOf<TransferableSuspendedApp, ApplicationInfo>()
val packages =
if (hostInfo.userId == UserHandle.USER_OWNER) {
@@ -110,7 +111,7 @@ class WorkModeAccessor {
for (userId in packagesWithUserIds.keys) {
// Create a hostContext to "enter" the target user without overriding "getUserId()" or
// access hidden api a lot.
- val appsInUser = pmAccess.getInstalledApplicationsAsUser(0, userId)
+ val appsInUser = pmAccess.getInstalledApplicationsAsUser(flags, userId)
val firstApp = appsInUser[0]
val targetContext = mSystemContext.createPackageContextAsUser(firstApp.packageName,
0,
@@ -230,7 +231,7 @@ class WorkModeAccessor {
// We use these two lists to determine whatever an app is suspended
// It it is suspended but not appears in systemSuspendedList, we know that
// it is suspended by other apps, like D**ital Wellbeing, we can just override it.
- val systemAllAppList = _getInstalledApplicationsAcrossUser(pmAccess, hostInfo, 0)
+ val systemAllAppList = _getInstalledApplicationsAcrossUser(pmAccess, hostInfo, PackageManager.MATCH_DISABLED_COMPONENTS)
val systemSuspendedList = _getPackagesSuspendedByWorkMode(pmAccess, systemAllAppList)
val listMode = when (rawListMode) {
1 -> ListMode.BLACKLIST
diff --git a/app/src/main/java/moe/yuuta/workmode/suspend/data/TransferableSuspendedApp.kt b/app/src/main/java/moe/yuuta/workmode/suspend/data/TransferableSuspendedApp.kt
index 03bf842..498a400 100644
--- a/app/src/main/java/moe/yuuta/workmode/suspend/data/TransferableSuspendedApp.kt
+++ b/app/src/main/java/moe/yuuta/workmode/suspend/data/TransferableSuspendedApp.kt
@@ -40,7 +40,7 @@ data class TransferableSuspendedApp(
@SystemApi
fun fillData(pm: PackageManager, ignoreLargeData: Boolean) {
val info = pm.getApplicationInfoAsUser(packageName,
- 0,
+ PackageManager.MATCH_DISABLED_COMPONENTS,
userId)
label = if (ignoreLargeData) null
else pm.getApplicationLabel(info)
diff --git a/app/src/main/java/moe/yuuta/workmode/utils/ByteArraySerializer.kt b/app/src/main/java/moe/yuuta/workmode/utils/ByteArraySerializer.kt
deleted file mode 100644
index 8792e04..0000000
--- a/app/src/main/java/moe/yuuta/workmode/utils/ByteArraySerializer.kt
+++ /dev/null
@@ -1,26 +0,0 @@
-package moe.yuuta.workmode.utils
-
-object ByteArraySerializer {
- fun serialize(array: ByteArray): String {
- val builder = StringBuilder()
- array.toList().stream()
- .forEachOrdered {
- builder.append(it)
- builder.append(',')
- }
- var result = builder.toString()
- result = result.substring(0, result.length - 1)
- return result
- }
-
- fun deserialize(value: String): ByteArray {
- val list = value.split(',').toList()
- var array = ByteArray(0)
-
- list.stream()
- .forEachOrdered {
- array = array.plus(it.toByte())
- }
- return array
- }
-} \ No newline at end of file
diff --git a/app/src/main/java/moe/yuuta/workmode/utils/Utils.kt b/app/src/main/java/moe/yuuta/workmode/utils/Utils.kt
index 75a98e9..10bef07 100644
--- a/app/src/main/java/moe/yuuta/workmode/utils/Utils.kt
+++ b/app/src/main/java/moe/yuuta/workmode/utils/Utils.kt
@@ -61,7 +61,7 @@ object Utils {
fun buildGeneralApplicationInfoFilter(context: Context): Predicate<ApplicationInfo> {
val i = Intent(Intent.ACTION_MAIN)
i.addCategory(Intent.CATEGORY_HOME)
- val launchers = context.packageManager.queryIntentActivities(i, 0)
+ val launchers = context.packageManager.queryIntentActivities(i, PackageManager.MATCH_DISABLED_COMPONENTS)
.stream()
.map {
return@map it.resolvePackageName
@@ -99,7 +99,7 @@ object Utils {
fun buildGeneralSuspendedAppInfoFilter(context: Context): Predicate<TransferableSuspendedApp> {
val i = Intent(Intent.ACTION_MAIN)
i.addCategory(Intent.CATEGORY_HOME)
- val launchers = context.packageManager.queryIntentActivitiesAsUser(i, 0, context.userId)
+ val launchers = context.packageManager.queryIntentActivitiesAsUser(i, PackageManager.MATCH_DISABLED_COMPONENTS, context.userId)
.stream()
.map {
return@map it.resolvePackageName
@@ -144,7 +144,7 @@ object Utils {
val intentToResolve = Intent(Intent.ACTION_MAIN)
intentToResolve.addCategory(Intent.CATEGORY_INFO)
intentToResolve.setPackage(packageName)
- var ris: List<ResolveInfo>? = pm.queryIntentActivitiesAsUser(intentToResolve, 0, userId)
+ var ris: List<ResolveInfo>? = pm.queryIntentActivitiesAsUser(intentToResolve, PackageManager.MATCH_DISABLED_COMPONENTS, userId)
// Otherwise, try to find a main launcher activity.
if (ris == null || ris.size <= 0) {
@@ -152,7 +152,7 @@ object Utils {
intentToResolve.removeCategory(Intent.CATEGORY_INFO)
intentToResolve.addCategory(Intent.CATEGORY_LAUNCHER)
intentToResolve.setPackage(packageName)
- ris = pm.queryIntentActivitiesAsUser(intentToResolve, 0, userId)
+ ris = pm.queryIntentActivitiesAsUser(intentToResolve, PackageManager.MATCH_DISABLED_COMPONENTS, userId)
}
if (ris == null || ris.size <= 0) {
return null
@@ -206,12 +206,12 @@ object Utils {
}
fun canSafelyLoadAppInfo(packageInfo: PersistableSuspendedApp, context: Context): Boolean {
- return packageInfo.userId == Process.myUserHandle().hashCode() ||
+ return packageInfo.userId == Process.myUserHandle().hashCode() &&
isAppInstalledInCurrentUser(packageInfo.packageName, context)
}
fun canSafelyLoadAppInfo(packageInfo: TransferableSuspendedApp, userId: Int, context: Context): Boolean {
- return packageInfo.userId == userId ||
+ return packageInfo.userId == userId &&
isAppInstalledInUser(packageInfo.packageName, context, userId)
}
@@ -221,11 +221,11 @@ object Utils {
@SystemApi
fun isAppInstalledInUser(packageName: String, context: Context, userId: Int): Boolean {
- try {
+ return try {
context.packageManager.getPackageInfoAsUser(packageName, PackageManager.GET_DISABLED_COMPONENTS, userId)
- return true
+ true
} catch (e: PackageManager.NameNotFoundException) {
- return false
+ false
}
}
} \ No newline at end of file