From a6eb37b215ab6c7a52cc5bf0c45325ad8fc1f8d6 Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Thu, 10 Jun 2021 15:46:58 +0800 Subject: [PATCH] Fix Learn more link placement is wrong problem - Use the new style of the FooterPreference. Fixes: 189389674 Test: Robo test Change-Id: I1529952181cca0eccd18f911eaa265b19dbb97f7 --- ...erpriseDisclosurePreferenceController.java | 37 ++++++++++++++----- .../EnterprisePrivacyFeatureProviderImpl.java | 3 -- ...iseDisclosurePreferenceControllerTest.java | 24 ++++++++---- 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java b/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java index b4dbf3d2c8a..238e93790d3 100644 --- a/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java +++ b/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceController.java @@ -17,16 +17,19 @@ package com.android.settings.accounts; import android.content.Context; +import android.content.Intent; +import android.provider.Settings; import androidx.annotation.VisibleForTesting; -import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; +import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider; import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.widget.FooterPreference; public class EnterpriseDisclosurePreferenceController extends BasePreferenceController { - private final EnterprisePrivacyFeatureProvider mFeatureProvider; public EnterpriseDisclosurePreferenceController(Context context, String key) { @@ -36,6 +39,16 @@ public class EnterpriseDisclosurePreferenceController extends BasePreferenceCont .getEnterprisePrivacyFeatureProvider(mContext); } + @Override + public void displayPreference(PreferenceScreen screen) { + super.displayPreference(screen); + final CharSequence disclosure = getDisclosure(); + if (disclosure == null) { + return; + } + updateFooterPreference(screen, disclosure); + } + @Override public int getAvailabilityStatus() { if (getDisclosure() == null) { @@ -49,12 +62,18 @@ public class EnterpriseDisclosurePreferenceController extends BasePreferenceCont return mFeatureProvider.getDeviceOwnerDisclosure(); } - @Override - public void updateState(Preference preference) { - final CharSequence disclosure = getDisclosure(); - if (disclosure == null) { - return; - } - preference.setTitle(disclosure); + void updateFooterPreference(PreferenceScreen screen, CharSequence disclosure) { + final FooterPreference footerPreference = screen.findPreference(getPreferenceKey()); + footerPreference.setTitle(disclosure); + footerPreference.setLearnMoreAction(view -> { + mContext.startActivity(new Intent(Settings.ACTION_ENTERPRISE_PRIVACY_SETTINGS)); + }); + final String learnMoreContentDescription = mContext.getString( + R.string.footer_learn_more_content_description, getLabelName()); + footerPreference.setLearnMoreContentDescription(learnMoreContentDescription); + } + + private String getLabelName() { + return mContext.getString(R.string.header_add_an_account); } } diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java index f461fe1e556..7d722fcd1b0 100644 --- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java +++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java @@ -100,9 +100,6 @@ public class EnterprisePrivacyFeatureProviderImpl implements EnterprisePrivacyFe } else { disclosure.append(mResources.getString(R.string.do_disclosure_generic)); } - disclosure.append(mResources.getString(R.string.do_disclosure_learn_more_separator)); - disclosure.append(mResources.getString(R.string.learn_more), - new EnterprisePrivacySpan(mContext), 0); return disclosure; } diff --git a/tests/robotests/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceControllerTest.java index b10a7292b5f..8860cfe9b75 100644 --- a/tests/robotests/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/accounts/EnterpriseDisclosurePreferenceControllerTest.java @@ -19,20 +19,25 @@ package com.android.settings.accounts; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; import android.content.Context; -import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; import com.android.settings.core.BasePreferenceController; +import com.android.settingslib.widget.FooterPreference; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -42,13 +47,18 @@ public class EnterpriseDisclosurePreferenceControllerTest { private Context mContext; private EnterpriseDisclosurePreferenceController mController; - private Preference mPreference; + private FooterPreference mPreference; + + @Mock + private PreferenceScreen mPreferenceScreen; @Before public void setUp() { + MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; mController = spy(new EnterpriseDisclosurePreferenceController(mContext, "my_key")); - mPreference = spy(new Preference(mContext)); + mPreference = spy(new FooterPreference(mContext)); + when(mPreferenceScreen.findPreference(anyString())).thenReturn(mPreference); } @Test @@ -68,19 +78,19 @@ public class EnterpriseDisclosurePreferenceControllerTest { } @Test - public void updateState_hasDisclosure_shouldSetTitle() { + public void displayPreference_hasDisclosure_shouldSetTitle() { doReturn(TEST_DISCLOSURE).when(mController).getDisclosure(); - mController.updateState(mPreference); + mController.displayPreference(mPreferenceScreen); assertThat(mPreference.getTitle()).isEqualTo(TEST_DISCLOSURE); } @Test - public void updateState_noDisclosure_shouldBeInvisible() { + public void displayPreference_noDisclosure_shouldBeInvisible() { doReturn(null).when(mController).getDisclosure(); - mController.updateState(mPreference); + mController.displayPreference(mPreferenceScreen); verify(mPreference, never()).setTitle(any()); }