From 3526f666a8da7a27574d8fc301aa43fd9f157984 Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Wed, 2 Oct 2019 17:40:25 +0800 Subject: [PATCH] Fix the display abnormal of Tap & pay screen in landscape mode - Add a new layout for the landscape mode. - Update the logic to show image when has no any visible preference. Bug: 141559275 Test: manual view make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.nfc Change-Id: Ib59ad3347e0635c07d61d557d75f8feaf78ff23c --- res/layout-land/nfc_payment_empty.xml | 36 +++++++++++++++++++ .../android/settings/nfc/PaymentSettings.java | 24 ++++++++++--- .../settings/nfc/PaymentSettingsTest.java | 32 +++++++++++++++++ 3 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 res/layout-land/nfc_payment_empty.xml diff --git a/res/layout-land/nfc_payment_empty.xml b/res/layout-land/nfc_payment_empty.xml new file mode 100644 index 00000000000..842792cdb7d --- /dev/null +++ b/res/layout-land/nfc_payment_empty.xml @@ -0,0 +1,36 @@ + + + + + + + diff --git a/src/com/android/settings/nfc/PaymentSettings.java b/src/com/android/settings/nfc/PaymentSettings.java index 560ddbf1cd4..bbe5f29d9ae 100644 --- a/src/com/android/settings/nfc/PaymentSettings.java +++ b/src/com/android/settings/nfc/PaymentSettings.java @@ -30,6 +30,10 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.VisibleForTesting; +import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; + import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; @@ -70,10 +74,11 @@ public class PaymentSettings extends DashboardFragment { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - - View emptyView = getActivity().getLayoutInflater().inflate( - R.layout.nfc_payment_empty, null, false); - ((ViewGroup) view.findViewById(android.R.id.list_container)).addView(emptyView); + if (isShowEmptyImage(getPreferenceScreen())) { + View emptyView = getActivity().getLayoutInflater().inflate( + R.layout.nfc_payment_empty, null, false); + ((ViewGroup) view.findViewById(android.R.id.list_container)).addView(emptyView); + } } @Override @@ -97,6 +102,17 @@ public class PaymentSettings extends DashboardFragment { menuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_NEVER); } + @VisibleForTesting + boolean isShowEmptyImage(PreferenceScreen screen) { + for (int i = 0; i < screen.getPreferenceCount(); i++) { + final Preference preference = screen.getPreference(i); + if(preference.isVisible()) { + return false; + } + } + return true; + } + public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider(R.xml.nfc_payment_settings) { diff --git a/tests/robotests/src/com/android/settings/nfc/PaymentSettingsTest.java b/tests/robotests/src/com/android/settings/nfc/PaymentSettingsTest.java index 1293ee4d0ff..513da65e3cb 100644 --- a/tests/robotests/src/com/android/settings/nfc/PaymentSettingsTest.java +++ b/tests/robotests/src/com/android/settings/nfc/PaymentSettingsTest.java @@ -29,6 +29,10 @@ import android.content.pm.UserInfo; import android.os.UserHandle; import android.os.UserManager; +import androidx.preference.Preference; +import androidx.preference.PreferenceManager; +import androidx.preference.PreferenceScreen; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -113,6 +117,34 @@ public class PaymentSettingsTest { assertThat(niks).containsAllOf(FOREGROUND_KEY, PAYMENT_KEY, PAYMENT_SCREEN_KEY); } + @Test + public void isShowEmptyImage_hasVisiblePreference_returnFalse() { + final PaymentSettings paymentSettings = new PaymentSettings(); + final PreferenceManager preferenceManager = new PreferenceManager(mContext); + final PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext); + final Preference preference1 = new Preference(mContext); + screen.addPreference(preference1); + final Preference preference2 = new Preference(mContext); + screen.addPreference(preference2); + + assertThat(paymentSettings.isShowEmptyImage(screen)).isFalse(); + } + + @Test + public void isShowEmptyImage_hasNoVisiblePreference_returnTrue() { + final PaymentSettings paymentSettings = new PaymentSettings(); + final PreferenceManager preferenceManager = new PreferenceManager(mContext); + final PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext); + final Preference preference1 = new Preference(mContext); + preference1.setVisible(false); + screen.addPreference(preference1); + final Preference preference2 = new Preference(mContext); + screen.addPreference(preference2); + preference2.setVisible(false); + + assertThat(paymentSettings.isShowEmptyImage(screen)).isTrue(); + } + @Implements(PaymentBackend.class) public static class ShadowPaymentBackend { private ArrayList mAppInfos;