Status Update
Comments
md...@google.com <md...@google.com> #2
<transition xmlns:android="
<item android:drawable="@drawable/test_drawable_blue"/>
<item android:drawable="@drawable/test_drawable_green"/>
</transition>
where blue/green drawables look like this:
<shape
xmlns:android="
android:shape="rectangle">
<size
android:width="@dimen/drawable_large_size"
android:height="@dimen/drawable_small_size" />
<solid
android:color="@color/test_blue" />
</shape>
Then added this test:
@Test
public void testMutateTransitionDrawable() {
Drawable drawable = ResourcesCompat.getDrawable(mResources,
R.drawable.test_transition_drawable, null);
assertTrue(drawable instanceof TransitionDrawable);
Drawable mutated = drawable.mutate();
assertTrue(drawable instanceof TransitionDrawable);
assertTrue(mutated instanceof TransitionDrawable);
}
It passes on the device. Going to also try on other earlier devices a bit later in the day once they are charged.
ni...@google.com <ni...@google.com>
al...@google.com <al...@google.com> #3
md...@google.com <md...@google.com> #4
md...@google.com <md...@google.com> #5
Accidentally submitted my previous comment too early.
to continue,
android.os.Process
has legitimate public APIs for this for 24+.
al...@google.com <al...@google.com> #6
Is androidx allowed to use non-SDK, but technically public APIs
To the same extent that apps can, yes. We have the same non-SDK usage restrictions as apps starting in P as well, which means no hidden APIs are accessible in P or later.
We also have a policy that requires any reflective non-SDK usage prior to P to be paired with a new platform API, so this would have to start as a platform feature request before it could be added to Jetpack. And even then, it wouldn't work on P, Q, or R.
Is Process.isApplicationUid(Process.myUid())
the full extent of the API that you need? Could you provide a pointer to code that uses reflective non-SDK access to get the same result on SDK < 24?
al...@google.com <al...@google.com> #8
Meets the criteria for a backport as androidx.core.os.ProcessCompat.isApplicationUid(int uid)
Reference implementation:
if (Build.VERSION.SDK_INT >= 24) {
return android.os.Process.isApplicationUid(uid);
} else if (Build.VERSION.SDK_INT >= 17) {
// Should be available in all APIs >= 17, unless there were OEM modifications.
try {
Method isAppMethod = UserHandle.class.getDeclaredMethod("isApp", int.class);
return (Boolean) isAppMethod.invoke(null, uid);
} catch (Exception e) {
return true;
}
} else if (Build.VERSION.SDK_INT == 16) {
// In Android J MR1, UserHandle was a private API in android.os.UserId.
try {
Method isAppMethod =
Class.forName("android.os.UserId").getDeclaredMethod("isApp", int.class);
return (Boolean) isAppMethod.invoke(null, uid);
} catch (Exception e) {
return true;
}
} else {
// Application UIDs and IsolatedProcess did not exist in Android 15 and below. Isolated
// Services were introduced in API 16:
// https://developer.android.com/about/versions/android-4.1.html#Isolated
return true;
}
al...@google.com <al...@google.com>
ap...@google.com <ap...@google.com> #9
Branch: androidx-master-dev
commit 95db2f90691a9094412fd092fbbc4797f8279e86
Author: Alan Viverette <alanv@google.com>
Date: Fri Apr 03 16:33:59 2020
Backport android.os.Process.isApplicationUid(int)
Fixes: 153014822
Test: ProcessCompatTest
Change-Id: I4c83a3aad2bb791f066a85f9051134510aa4f159
M core/core/api/1.4.0-alpha01.txt
M core/core/api/current.txt
M core/core/api/public_plus_experimental_1.4.0-alpha01.txt
M core/core/api/public_plus_experimental_current.txt
M core/core/api/restricted_1.4.0-alpha01.txt
M core/core/api/restricted_current.txt
A core/core/src/androidTest/java/androidx/core/os/ProcessCompatTest.java
A core/core/src/main/java/androidx/core/os/ProcessCompat.java
ls...@gmail.com <ls...@gmail.com> #10
if (sMethodUserHandleIsAppMethod != null) {
Boolean result = (Boolean) sMethodUserHandleIsAppMethod.invoke(null, uid);
if (result == null) {
// This should never happen, as the method returns a boolean primitive.
throw new NullPointerException();
}
}
Is API17 implementation work as expected? Looks like the result is not used here
Description