Status Update
Comments
md...@google.com <md...@google.com> #2
Branch: androidx-master-dev
commit c60f33e229e31ab328ef6b59dab63b264954831c
Author: Alexandre Elias <aelias@google.com>
Date: Fri Jul 10 16:23:09 2020
Semantics no-op cleanups
Partly in response to lmr's broad code review, I did a pass of
superficial API/implementation cleanup. The main changes are:
- I changed each Boolean SemanticsProperty where false is equivalent to
not being present to take "Unit" instead. This is conceptually
clearer: it avoids questions like "can I cancel out a semantics from a
merged child by setting it to false?" Because "property = Unit" looks
weird, I also changed the style of these to "property()".
- I moved the Semantics id generator closer to where it's used, in
SemanticsModifierCore. I made it internal and an AtomicInt.
(Note that integer ids are heavily used in the Android
AccessibilityNodeInfo APIs so I can't simply remove them entirely.)
- I deleted dead code. Some examples include SemanticsHintOverrides,
a public API not connected to anything, and SemanticsPropertyKey
merge() open method which is never called. (In both cases I have
a different plan in mind for accessibility.)
Fixes: 145951226
Fixes: 145955412
Test: existing tests
Relnote: "Single-value semantics properties now use a calling style.
For example, 'semantics { hidden = true }' is now written as:
'semantics { hidden() }'."
Change-Id: Ic1afd12ea22c926babc9662f1804d80b33aa0cfc
M ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/LayoutNodeModifierBenchmark.kt
M ui/ui-core/api/0.1.0-dev15.txt
M ui/ui-core/api/current.txt
M ui/ui-core/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-core/api/public_plus_experimental_current.txt
M ui/ui-core/api/restricted_0.1.0-dev15.txt
M ui/ui-core/api/restricted_current.txt
M ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/graphics/vector/VectorTest.kt
M ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/semantics/SemanticsTests.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidActuals.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
M ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Expect.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsConfiguration.kt
D ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsHintOverrides.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsModifier.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsOwner.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsWrapper.kt
M ui/ui-core/src/commonMain/kotlin/androidx/ui/semantics/SemanticsProperties.kt
M ui/ui-foundation/api/0.1.0-dev15.txt
M ui/ui-foundation/api/current.txt
M ui/ui-foundation/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-foundation/api/public_plus_experimental_current.txt
M ui/ui-foundation/api/restricted_0.1.0-dev15.txt
M ui/ui-foundation/api/restricted_current.txt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Clickable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Dialog.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/Scroller.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Selectable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/selection/Toggleable.kt
M ui/ui-foundation/src/main/java/androidx/ui/foundation/semantics/FoundationSemanticsProperties.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ButtonTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/CardTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/CheckboxScreenshotTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/RadioButtonScreenshotTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ScaffoldTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/SnackbarTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/SurfaceTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/ripple/RippleIndicationTest.kt
M ui/ui-material/src/androidTest/java/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
M ui/ui-material/src/main/java/androidx/ui/material/AppBar.kt
M ui/ui-material/src/main/java/androidx/ui/material/TextFieldImpl.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/CallSemanticsActionTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/ScrollToTest.kt
M ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
M ui/ui-test/src/main/java/androidx/ui/test/Actions.kt
M ui/ui-test/src/main/java/androidx/ui/test/Filters.kt
M ui/ui-text/api/0.1.0-dev15.txt
M ui/ui-text/api/current.txt
M ui/ui-text/api/public_plus_experimental_0.1.0-dev15.txt
M ui/ui-text/api/public_plus_experimental_current.txt
M ui/ui-text/api/restricted_0.1.0-dev15.txt
M ui/ui-text/api/restricted_current.txt
M ui/ui-text/src/commonMain/kotlin/androidx/ui/text/CoreTextField.kt
M ui/ui-text/src/commonMain/kotlin/androidx/ui/text/TextSemanticsProperties.kt
ni...@google.com <ni...@google.com>
al...@google.com <al...@google.com> #3
AFAIK, there are no public Android APIs by which we can check for this.
If there are no public APIs, there is nothing we can do in Jetpack.
md...@google.com <md...@google.com> #4
*There are no APIs visible to apps.
Is androidx allowed to use non-SDK, but technically public APIs (@hide
or @UnsupportedAppUsage
)? If so, android.os.UserHandle
can be be used for this at least as far back as API 17, and again `android.os.Process
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