diff --git a/src/com/android/settings/deviceinfo/FeedbackPreferenceController.java b/src/com/android/settings/deviceinfo/FeedbackPreferenceController.java index 2d8941dbe3a..e2e2e2afb3e 100644 --- a/src/com/android/settings/deviceinfo/FeedbackPreferenceController.java +++ b/src/com/android/settings/deviceinfo/FeedbackPreferenceController.java @@ -38,6 +38,7 @@ public class FeedbackPreferenceController extends AbstractPreferenceController i intent = new Intent("android.intent.action.BUG_REPORT"); } + @Override public boolean isAvailable() { return !TextUtils.isEmpty(DeviceInfoUtils.getFeedbackReporterPackage(mContext)); } @@ -47,6 +48,15 @@ public class FeedbackPreferenceController extends AbstractPreferenceController i super.updateState(preference); intent.setPackage(DeviceInfoUtils.getFeedbackReporterPackage(mContext)); preference.setIntent(intent); + + // In some cases, cannot retrieve the report package from package manager, + // For example, launched from lock screen. + // Update this preference visibility after updateState. + if (isAvailable() && !preference.isVisible()) { + preference.setVisible(true); + } else if (!isAvailable() && preference.isVisible()){ + preference.setVisible(false); + } } public String getPreferenceKey() { diff --git a/tests/robotests/src/com/android/settings/deviceinfo/FeedbackPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/FeedbackPreferenceControllerTest.java index 45cfb282d89..7a75cd5cbb0 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/FeedbackPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/FeedbackPreferenceControllerTest.java @@ -21,6 +21,8 @@ import static org.mockito.Mockito.when; import android.app.Fragment; import android.content.Context; +import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceScreen; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -38,12 +40,19 @@ public class FeedbackPreferenceControllerTest { private Fragment mFragment; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; + @Mock + private Preference mPreference; + @Mock + private PreferenceScreen mScreen; + private FeedbackPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); mController = new FeedbackPreferenceController(mFragment, mContext); + final String prefKey = mController.getPreferenceKey(); + when(mScreen.findPreference(prefKey)).thenReturn(mPreference); } @Test @@ -51,4 +60,10 @@ public class FeedbackPreferenceControllerTest { when(mContext.getResources().getString(anyInt())).thenReturn(""); assertThat(mController.isAvailable()).isFalse(); } + + @Test + public void isVisible_afterUpdateState_shouldBeSameAsIsAvailable() { + mController.updateState(mPreference); + assertThat(mPreference.isVisible()).isEqualTo(mController.isAvailable()); + } }