intent = new Intent("android.intent.action.BUG_REPORT");
}
+ @Override
public boolean isAvailable() {
return !TextUtils.isEmpty(DeviceInfoUtils.getFeedbackReporterPackage(mContext));
}
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() {
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;
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
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());
+ }
}