I hereby claim:
- I am ivaniskandar on github.
- I am ivaniskandar (https://keybase.io/ivaniskandar) on keybase.
- I have a public key ASAYZyLMAFWWHq8uqugLKb3m7HTKK7egjP9xrQf0N8VZSgo
To claim this, I am signing this object:
for (PackageInfo pi : context.getPackageManager().getInstalledPackages(0)) { | |
try { | |
Class piClass = pi.getClass(); | |
Field overlaytargetField = piClass.getDeclaredField("overlayTarget"); | |
overlaytargetField.setAccessible(true); | |
String target = overlaytargetField.get(pi).toString(); | |
if (target != null) { | |
Log.d("lmao", pi.packageName + " is overlaying: " + target); | |
} |
100% — FF (primary text dark) | |
99% — FC | |
98% — FA | |
97% — F7 | |
96% — F5 | |
95% — F2 | |
94% — F0 | |
93% — ED | |
92% — EB | |
91% — E8 |
I hereby claim:
To claim this, I am signing this object:
{ | |
"data":{ | |
"SYNO.API.Auth":{ | |
"maxVersion":6, | |
"minVersion":1, | |
"path":"auth.cgi" | |
}, | |
"SYNO.API.Encryption":{ | |
"maxVersion":1, | |
"minVersion":1, |
// https://stackoverflow.com/a/53407183 | |
fun Context.getApplicationSignature(packageName: String): List<String> { | |
val signatureList: List<String> | |
try { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { | |
// New signature | |
val sig = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES).signingInfo | |
signatureList = if (sig.hasMultipleSigners()) { | |
// Send all with apkContentsSigners | |
sig.apkContentsSigners.map { |
fun Context.getOneUiVersion(): Double { | |
if (!isSemAvailable()) { | |
return 1.0 | |
} | |
val semPlatformIntField: Field = Build.VERSION::class.java.getDeclaredField("SEM_PLATFORM_INT") | |
val version: Int = semPlatformIntField.getInt(null) - 90000 | |
return if (version < 0) { | |
1.0 | |
} else { | |
((version / 10000).toString() + "." + version % 10000 / 100).toDouble() |
/** | |
* ui_night_mode | ui_night_mode_override | |
* twilight-night-on 0 | 0 | |
* twilight-night-off 0 | 1 | |
* twilight-day-on 0 | 1 | |
* twilight-night-off 0 | 0 | |
* manual-on 2 | 1 | |
* manual-off 1 | 1 | |
* | |
* References: |
val appContext = context.createPackageContext(packageName, 0) | |
val res = appContext.resources | |
// val cookie = res.assets.findCookieForPath(appContext.applicationInfo.sourceDir) | |
val apkCount = appContext.applicationInfo.splitSourceDirs.count() + 1 | |
(0..apkCount).forEach { cookie -> | |
res.assets.openXmlResourceParser(cookie, "AndroidManifest.xml").use { | |
var eventType: Int | |
while (true) { | |
eventType = it.nextToken() | |
if (eventType == XmlPullParser.START_TAG && it.name == "application") { |
import androidx.activity.BackEventCompat | |
import androidx.activity.compose.PredictiveBackHandler | |
import androidx.compose.animation.AnimatedContent | |
import androidx.compose.animation.AnimatedContentTransitionScope | |
import androidx.compose.animation.ContentTransform | |
import androidx.compose.animation.EnterTransition | |
import androidx.compose.animation.ExitTransition | |
import androidx.compose.animation.SizeTransform | |
import androidx.compose.animation.core.AnimationSpec | |
import androidx.compose.animation.core.ExperimentalTransitionApi |