diff options
author | Farruh Habibullaev <farruhh@google.com> | 2021-10-15 09:43:04 -0700 |
---|---|---|
committer | Farruh Habibullaev <farruhh@google.com> | 2021-10-20 19:00:24 +0000 |
commit | 8afe425dfbd75b8de1925df1586a49fb33dc154b (patch) | |
tree | f0c6aaa20a9bff4956aba8880ee26208cd041163 | |
parent | a67dcffa639174b24ef02ee71091dd2d1fbfd85c (diff) | |
download | setupwizard-8afe425dfbd75b8de1925df1586a49fb33dc154b.tar.gz |
Add the support for fragment use in carsetupwizard library
* modify setContentFragment & setContentFragmentWithBackstack
in the BaseSetupWizardActivity to support the fragment use
in split-nav implementation. It renders the fragment in the
viewStubContent instead of appending it.
* keep backward compatibility. It's backward compatible because
until splitnav is enabled, the user won't see the CX change. Once
split-nav is enabled, fragment renders within view stub, instead of being
appending into view, which is incorrect rendering.
Test: Unit tests by modifying BaseCompatActivityTest
Test: MANUALLY test for several different cases, including edge cases.
BUG: b/203109230
Change-Id: Iadf19e2c3b26487ded460705e0d5766bea8a87fb
3 files changed, 30 insertions, 4 deletions
diff --git a/library/main/res/layout/empty_fragment_frame_layout.xml b/library/main/res/layout/empty_fragment_frame_layout.xml new file mode 100644 index 0000000..0ea8da7 --- /dev/null +++ b/library/main/res/layout/empty_fragment_frame_layout.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/empty_fragment_frame_layout" + android:layout_width="match_parent" + android:layout_height="match_parent" />
\ No newline at end of file diff --git a/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java b/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java index c038375..ba7beb7 100644 --- a/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java +++ b/library/main/src/com/android/car/setupwizardlib/BaseSetupWizardActivity.java @@ -21,6 +21,7 @@ import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.View; +import android.view.ViewStub; import androidx.annotation.CallSuper; import androidx.annotation.LayoutRes; @@ -49,6 +50,8 @@ import com.android.car.setupwizardlib.util.CarWizardManagerHelper; * component attributes */ abstract class BaseSetupWizardActivity extends FragmentActivity { + private static final String TAG = BaseSetupWizardActivity.class.getSimpleName(); + @VisibleForTesting static final String CONTENT_FRAGMENT_TAG = "CONTENT_FRAGMENT_TAG"; /** @@ -94,7 +97,7 @@ abstract class BaseSetupWizardActivity extends FragmentActivity { mCarSetupWizardLayout.setBackButtonListener(v -> handleBackButtonEvent()); - mCarSetupWizardLayout.setCloseButtonListener(v-> handleCloseButton()); + mCarSetupWizardLayout.setCloseButtonListener(v -> handleCloseButton()); resetPrimaryToolbarButtonOnClickListener(); resetSecondaryToolbarButtonOnClickListener(); @@ -174,7 +177,7 @@ abstract class BaseSetupWizardActivity extends FragmentActivity { protected void setContentFragmentWithBackstack(Fragment fragment) { if (mAllowFragmentCommits) { getSupportFragmentManager().beginTransaction() - .replace(R.id.car_setup_wizard_layout, fragment, CONTENT_FRAGMENT_TAG) + .replace(getFragmentContainerViewId(), fragment, CONTENT_FRAGMENT_TAG) .addToBackStack(null) .commit(); getSupportFragmentManager().executePendingTransactions(); @@ -202,7 +205,7 @@ abstract class BaseSetupWizardActivity extends FragmentActivity { android.R.animator.fade_out, android.R.animator.fade_in, android.R.animator.fade_out) - .replace(R.id.car_setup_wizard_layout, fragment, CONTENT_FRAGMENT_TAG) + .replace(getFragmentContainerViewId(), fragment, CONTENT_FRAGMENT_TAG) .commitNow(); onContentFragmentSet(getContentFragment()); } @@ -530,6 +533,21 @@ abstract class BaseSetupWizardActivity extends FragmentActivity { } @VisibleForTesting + int getFragmentContainerViewId() { + if (isSplitNavLayoutSupported()) { + ViewStub viewStub = findViewById(R.id.layout_content_stub); + viewStub.setLayoutResource(R.layout.empty_fragment_frame_layout); + viewStub.inflate(); + Log.v(TAG, "fragmentContainerViewId: " + + getResources().getResourceEntryName(R.id.empty_fragment_frame_layout)); + return R.id.empty_fragment_frame_layout; + } + Log.v(TAG, "fragmentContainerViewId: " + + getResources().getResourceEntryName(R.id.car_setup_wizard_layout)); + return R.id.car_setup_wizard_layout; + } + + @VisibleForTesting boolean getAllowFragmentCommits() { return mAllowFragmentCommits; } diff --git a/library/main/tests/robotests/src/com/android/car/setupwizardlib/BaseCompatActivityTest.java b/library/main/tests/robotests/src/com/android/car/setupwizardlib/BaseCompatActivityTest.java index 7209fc9..f0427d9 100644 --- a/library/main/tests/robotests/src/com/android/car/setupwizardlib/BaseCompatActivityTest.java +++ b/library/main/tests/robotests/src/com/android/car/setupwizardlib/BaseCompatActivityTest.java @@ -38,7 +38,6 @@ import androidx.fragment.app.Fragment; import com.android.car.setupwizardlib.robolectric.BaseRobolectricTest; import com.android.car.setupwizardlib.robolectric.TestHelper; import com.android.car.setupwizardlib.shadows.ShadowCar; -import com.android.car.setupwizardlib.test.R; import org.junit.Before; import org.junit.Test; @@ -194,6 +193,7 @@ public class BaseCompatActivityTest extends BaseRobolectricTest { .isEqualTo(0); // Verify that onContentFragmentSet is called with the test fragment verify(spyBaseCompatActivity).onContentFragmentSet(fragment); + verify(spyBaseCompatActivity).getFragmentContainerViewId(); } /** @@ -213,6 +213,7 @@ public class BaseCompatActivityTest extends BaseRobolectricTest { .isEqualTo(0); // Verify that onContentFragmentSet is not called verify(spyBaseCompatActivity, times(0)).onContentFragmentSet(fragment); + verify(spyBaseCompatActivity, times(0)).getFragmentContainerViewId(); } /** @@ -232,6 +233,7 @@ public class BaseCompatActivityTest extends BaseRobolectricTest { .isEqualTo(1); // Verify that onContentFragmentSet is called with the test fragment verify(spyBaseCompatActivity).onContentFragmentSet(fragment); + verify(spyBaseCompatActivity).getFragmentContainerViewId(); } /** @@ -251,6 +253,7 @@ public class BaseCompatActivityTest extends BaseRobolectricTest { .isEqualTo(0); // Verify that onContentFragmentSet is not called verify(spyBaseCompatActivity, times(0)).onContentFragmentSet(fragment); + verify(spyBaseCompatActivity, times(0)).getFragmentContainerViewId(); } /** |