aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/moe/yuuta/workmode/utils/Utils.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/moe/yuuta/workmode/utils/Utils.kt')
-rw-r--r--app/src/main/java/moe/yuuta/workmode/utils/Utils.kt127
1 files changed, 127 insertions, 0 deletions
diff --git a/app/src/main/java/moe/yuuta/workmode/utils/Utils.kt b/app/src/main/java/moe/yuuta/workmode/utils/Utils.kt
new file mode 100644
index 0000000..2ac68e9
--- /dev/null
+++ b/app/src/main/java/moe/yuuta/workmode/utils/Utils.kt
@@ -0,0 +1,127 @@
+package moe.yuuta.workmode.utils
+
+import android.content.Context
+import android.content.Intent
+import android.content.pm.ApplicationInfo
+import android.os.Bundle
+import android.os.Process
+import android.view.ViewGroup
+import android.widget.LinearLayout
+import androidx.core.view.children
+import com.google.android.material.tabs.TabLayout
+import moe.yuuta.workmode.BuildConfig
+import java.util.function.Predicate
+import java.util.stream.Collectors
+
+
+object Utils {
+ private val PROTECTED_UIDS = arrayOf(Process.SYSTEM_UID,
+ Process.myUid(),
+ Process.PHONE_UID,
+ 0,
+ 2000,
+ 1007,
+ 1010,
+ 1013,
+ 1019,
+ 1016,
+ 1017,
+ 1027,
+ 1002,
+ 1023,
+ 1032,
+ 1037,
+ 1041,
+ 1047,
+ 1053,
+ 1061,
+ 1067,
+ 1068,
+ 9999)
+
+ private val PROTECTED_PACKAGES = arrayOf(
+ "android",
+ BuildConfig.APPLICATION_ID
+ )
+
+ private val PROTECTED_PACKAGES_WIDE_MATCH = arrayOf(
+ "com.android."
+ )
+
+ private val WHITELIST_PKGS = arrayOf(
+ "com.android.chrome"
+ )
+
+ fun buildGeneralApplicationInfoFilter(context: Context): Predicate<ApplicationInfo> {
+ val i = Intent(Intent.ACTION_MAIN)
+ i.addCategory(Intent.CATEGORY_HOME)
+ val launchers = context.packageManager.queryIntentActivities(i, 0)
+ .stream()
+ .map {
+ return@map it.resolvePackageName
+ }
+ .collect(Collectors.toList())
+ return object : Predicate<ApplicationInfo> {
+ override fun test(it: ApplicationInfo): Boolean {
+ for (pkg in WHITELIST_PKGS)
+ if (pkg == it.packageName) {
+ return true
+ }
+ for (pkg in PROTECTED_PACKAGES)
+ if (pkg == it.packageName) {
+ return false
+ }
+ for (pkg in PROTECTED_PACKAGES_WIDE_MATCH)
+ if (it.packageName.startsWith(pkg)) {
+ return false
+ }
+ for (uid in PROTECTED_UIDS)
+ if (uid == it.uid) {
+ return false
+ }
+ if (launchers.contains(it.packageName)) {
+ return false
+ }
+ if (it.uid < Process.FIRST_APPLICATION_UID || it.uid > Process.LAST_APPLICATION_UID) {
+ return false
+ }
+ return context.packageManager.getLaunchIntentForPackage(it.packageName) != null
+ }
+ }
+ }
+
+ fun dumpExtras(bundle: Bundle?): String {
+ val builder = StringBuilder()
+ if (bundle != null) {
+ for (key in bundle.keySet()) {
+ val value = bundle.get(key)
+ builder.append("value: ")
+ builder.append(value?.toString())
+ builder.append(" key: ")
+ builder.append(key)
+ builder.append(" type: ")
+ builder.append(value.javaClass.name)
+ }
+ }
+ return builder.toString()
+ }
+
+ fun setViewTreeEnable(viewGroup: ViewGroup, isEnabled: Boolean) {
+ for (child in viewGroup.children) {
+ if (child is ViewGroup)
+ setViewTreeEnable(child, isEnabled)
+ else
+ child.isEnabled = isEnabled
+ }
+ }
+
+ /**
+ * Thanks to https://stackoverflow.com/questions/31702725/disable-tablayout
+ */
+ fun makeTabLayoutDisable(tabLayout: TabLayout, enable: Boolean) {
+ val tabStrip = tabLayout.getChildAt(0) as LinearLayout
+ for (i in 0 until tabStrip.childCount) {
+ tabStrip.getChildAt(i).setOnTouchListener { v, event -> !enable }
+ }
+ }
+} \ No newline at end of file