summaryrefslogtreecommitdiff
path: root/java/tests
diff options
context:
space:
mode:
author Joshua Trask <joshtrask@google.com> 2023-10-05 17:16:40 +0000
committer Joshua Trask <joshtrask@google.com> 2023-10-05 18:34:35 +0000
commitc2f1d0cc70ef6083fd47e055a421fd74f620ea33 (patch)
tree7fd772af3eaa95e2c561fc3405baab2d527d1c56 /java/tests
parent989de76169699beee2c92a8ce41bc636896a66b6 (diff)
"Bottom padding overrides" -> EmptyStateUiHelper
As part of ongoing work to pull low-level empty state responsibilities out of the pager adapter, this CL generally replicates the change prototyped in ag/24516421/4..5, in smaller incremental steps to "show the work." As originally described in that CL: "... moves ownership/usage of the 'container bottom padding override supplier' over to the UI helper; this PagerAdapter dependency is really only used in empty-state logic, so it can be handed over to the extracted component *instead of* retaining it as an ivar in the PagerAdapter." As presented in this CL, the "incremental steps" per-snapshot are: 1. Move `getActiveEmptyStateView()` from `ChooserActivity` to `MultiProfilePagerAdapter`, and expose it in favor of the broader `getEmptyStateView()` method that `ChooserActivity` previously used to implement the lower-level logic. 2. Remove `MultiProfilePagerAdapter.setupContainerPadding()` parameters since they're just derived from a combination of a single hard-coded (resource) symbol, and a concern that already belonged to the pager-adapter (`getActiveEmptyStateView()`). Switch tests to using one of our real layouts so that we can find an empty-state container with the expected View ID. Also update method visibility to show `setupContainerPadding()` isn't intended to be overridden in the more-modern "generic pager" design, and update Javadoc accordingly. 3. Inline `ChooserMultiProfilePagerAdapter.setupContainerPadding()` as part of its `setEmptyStateBottomOffset()`, since the latter method is never called anywhere else (and both concerns already belonged to the specialized pager-adapter). 4. Refactor the internal `setupContainerPadding()` to operate on profile descriptors instead of container Views. This is based on the observation that both callers of `setupContainerPadding()` were passing containers that they had to query from the descriptor's empty-state view anyways, and the lookup used the same View ID in both cases. This change encapsulates those shared concerns at a higher level of abstraction. 5. Move the implementation logic of `setupContainerPadding()` into the descriptor inner-class; given the override-supplier, the rest of the operation can be implemented just using the info available to the descriptor. 6. Move ownership of the override-supplier into the descriptor (to be shared among all descriptor instances). The outer pager-adapter had no remaining need to reference the supplier, and we can easily confirm that this results in `setupContainerPadding()` calls for each descriptor instance using the same supplier instance they would've used before. 7. Moves implementation logic (including [shared] ownership of the override-supplier) from the descriptor down to the empty-state helper which now encapsulates the entire `setupContainerPadding()` operation with zero args. This may require *slightly* more of a leap-of-faith than the other "steps," but note the extensive test coverage: the existing `MultiProfilePagerAdapterTest` covers this exact functionality as integrated into a broader config; parallel unit tests are newly-added in `EmptyStateUiHelper`; and even our "broad-scope" integration tests exercise empty-state logic to _some_ degree. 8. Inlines some client usages to simplify scaffolding that we don't really need after the earlier refactoring changes. Bug: 302311217 Test: IntentResolverUnitTests Change-Id: Icc460ede5b8a0314d5c807dd884e6e2b7044bee9
Diffstat (limited to 'java/tests')
-rw-r--r--java/tests/src/com/android/intentresolver/v2/MultiProfilePagerAdapterTest.kt49
-rw-r--r--java/tests/src/com/android/intentresolver/v2/emptystate/EmptyStateUiHelperTest.kt36
2 files changed, 61 insertions, 24 deletions
diff --git a/java/tests/src/com/android/intentresolver/v2/MultiProfilePagerAdapterTest.kt b/java/tests/src/com/android/intentresolver/v2/MultiProfilePagerAdapterTest.kt
index f1af9790..f5dc0935 100644
--- a/java/tests/src/com/android/intentresolver/v2/MultiProfilePagerAdapterTest.kt
+++ b/java/tests/src/com/android/intentresolver/v2/MultiProfilePagerAdapterTest.kt
@@ -26,7 +26,6 @@ import com.android.intentresolver.MultiProfilePagerAdapter.PROFILE_PERSONAL
import com.android.intentresolver.MultiProfilePagerAdapter.PROFILE_WORK
import com.android.intentresolver.R
import com.android.intentresolver.ResolverListAdapter
-import com.android.intentresolver.any
import com.android.intentresolver.emptystate.EmptyStateProvider
import com.android.intentresolver.mock
import com.android.intentresolver.whenever
@@ -35,8 +34,6 @@ import com.google.common.truth.Truth.assertThat
import java.util.Optional
import java.util.function.Supplier
import org.junit.Test
-import org.mockito.Mockito.never
-import org.mockito.Mockito.verify
class MultiProfilePagerAdapterTest {
private val PERSONAL_USER_HANDLE = UserHandle.of(10)
@@ -158,20 +155,15 @@ class MultiProfilePagerAdapterTest {
@Test
fun testBottomPaddingDelegate_default() {
- val container =
- mock<View> {
- whenever(getPaddingLeft()).thenReturn(1)
- whenever(getPaddingTop()).thenReturn(2)
- whenever(getPaddingRight()).thenReturn(3)
- whenever(getPaddingBottom()).thenReturn(4)
- }
+ val personalListAdapter =
+ mock<ResolverListAdapter> { whenever(getUserHandle()).thenReturn(PERSONAL_USER_HANDLE) }
val pagerAdapter =
MultiProfilePagerAdapter(
{ listAdapter: ResolverListAdapter -> listAdapter },
{ listView: ListView, bindAdapter: ResolverListAdapter ->
listView.setAdapter(bindAdapter)
},
- ImmutableList.of(),
+ ImmutableList.of(personalListAdapter),
object : EmptyStateProvider {},
{ false },
PROFILE_PERSONAL,
@@ -180,26 +172,29 @@ class MultiProfilePagerAdapterTest {
inflater,
{ Optional.empty() }
)
- pagerAdapter.setupContainerPadding(container)
- verify(container, never()).setPadding(any(), any(), any(), any())
+ val container =
+ pagerAdapter
+ .getActiveEmptyStateView()
+ .requireViewById<View>(com.android.internal.R.id.resolver_empty_state_container)
+ container.setPadding(1, 2, 3, 4)
+ pagerAdapter.setupContainerPadding()
+ assertThat(container.paddingLeft).isEqualTo(1)
+ assertThat(container.paddingTop).isEqualTo(2)
+ assertThat(container.paddingRight).isEqualTo(3)
+ assertThat(container.paddingBottom).isEqualTo(4)
}
@Test
fun testBottomPaddingDelegate_override() {
- val container =
- mock<View> {
- whenever(getPaddingLeft()).thenReturn(1)
- whenever(getPaddingTop()).thenReturn(2)
- whenever(getPaddingRight()).thenReturn(3)
- whenever(getPaddingBottom()).thenReturn(4)
- }
+ val personalListAdapter =
+ mock<ResolverListAdapter> { whenever(getUserHandle()).thenReturn(PERSONAL_USER_HANDLE) }
val pagerAdapter =
MultiProfilePagerAdapter(
{ listAdapter: ResolverListAdapter -> listAdapter },
{ listView: ListView, bindAdapter: ResolverListAdapter ->
listView.setAdapter(bindAdapter)
},
- ImmutableList.of(),
+ ImmutableList.of(personalListAdapter),
object : EmptyStateProvider {},
{ false },
PROFILE_PERSONAL,
@@ -208,8 +203,16 @@ class MultiProfilePagerAdapterTest {
inflater,
{ Optional.of(42) }
)
- pagerAdapter.setupContainerPadding(container)
- verify(container).setPadding(1, 2, 3, 42)
+ val container =
+ pagerAdapter
+ .getActiveEmptyStateView()
+ .requireViewById<View>(com.android.internal.R.id.resolver_empty_state_container)
+ container.setPadding(1, 2, 3, 4)
+ pagerAdapter.setupContainerPadding()
+ assertThat(container.paddingLeft).isEqualTo(1)
+ assertThat(container.paddingTop).isEqualTo(2)
+ assertThat(container.paddingRight).isEqualTo(3)
+ assertThat(container.paddingBottom).isEqualTo(42)
}
@Test
diff --git a/java/tests/src/com/android/intentresolver/v2/emptystate/EmptyStateUiHelperTest.kt b/java/tests/src/com/android/intentresolver/v2/emptystate/EmptyStateUiHelperTest.kt
index 12943cd7..27ed7e38 100644
--- a/java/tests/src/com/android/intentresolver/v2/emptystate/EmptyStateUiHelperTest.kt
+++ b/java/tests/src/com/android/intentresolver/v2/emptystate/EmptyStateUiHelperTest.kt
@@ -22,12 +22,20 @@ import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.test.platform.app.InstrumentationRegistry
import com.google.common.truth.Truth.assertThat
+import java.util.Optional
+import java.util.function.Supplier
import org.junit.Before
import org.junit.Test
class EmptyStateUiHelperTest {
private val context = InstrumentationRegistry.getInstrumentation().getContext()
+ var shouldOverrideContainerPadding = false
+ val containerPaddingSupplier =
+ Supplier<Optional<Int>> {
+ Optional.ofNullable(if (shouldOverrideContainerPadding) 42 else null)
+ }
+
lateinit var rootContainer: ViewGroup
lateinit var emptyStateTitleView: View
lateinit var emptyStateSubtitleView: View
@@ -60,7 +68,7 @@ class EmptyStateUiHelperTest {
emptyStateDefaultTextView = rootContainer.requireViewById(com.android.internal.R.id.empty)
emptyStateContainerView =
rootContainer.requireViewById(com.android.internal.R.id.resolver_empty_state_container)
- emptyStateUiHelper = EmptyStateUiHelper(rootContainer)
+ emptyStateUiHelper = EmptyStateUiHelper(rootContainer, containerPaddingSupplier)
}
@Test
@@ -109,4 +117,30 @@ class EmptyStateUiHelperTest {
assertThat(emptyStateRootView.visibility).isEqualTo(View.GONE)
}
+
+ @Test
+ fun testBottomPaddingDelegate_default() {
+ shouldOverrideContainerPadding = false
+ emptyStateContainerView.setPadding(1, 2, 3, 4)
+
+ emptyStateUiHelper.setupContainerPadding()
+
+ assertThat(emptyStateContainerView.paddingLeft).isEqualTo(1)
+ assertThat(emptyStateContainerView.paddingTop).isEqualTo(2)
+ assertThat(emptyStateContainerView.paddingRight).isEqualTo(3)
+ assertThat(emptyStateContainerView.paddingBottom).isEqualTo(4)
+ }
+
+ @Test
+ fun testBottomPaddingDelegate_override() {
+ shouldOverrideContainerPadding = true // Set bottom padding to 42.
+ emptyStateContainerView.setPadding(1, 2, 3, 4)
+
+ emptyStateUiHelper.setupContainerPadding()
+
+ assertThat(emptyStateContainerView.paddingLeft).isEqualTo(1)
+ assertThat(emptyStateContainerView.paddingTop).isEqualTo(2)
+ assertThat(emptyStateContainerView.paddingRight).isEqualTo(3)
+ assertThat(emptyStateContainerView.paddingBottom).isEqualTo(42)
+ }
}