Merge "Fix "Send feedback about this device" option is missing issue." into pi-dev

am: 2d230e1431

Change-Id: Ic35475537f0764b442142b32fc4d29e7771890cd
This commit is contained in:
WAYNE YANG
2018-03-22 04:07:56 +00:00
committed by android-build-merger
2 changed files with 25 additions and 0 deletions

View File

@@ -38,6 +38,7 @@ public class FeedbackPreferenceController extends AbstractPreferenceController i
intent = new Intent("android.intent.action.BUG_REPORT"); intent = new Intent("android.intent.action.BUG_REPORT");
} }
@Override
public boolean isAvailable() { public boolean isAvailable() {
return !TextUtils.isEmpty(DeviceInfoUtils.getFeedbackReporterPackage(mContext)); return !TextUtils.isEmpty(DeviceInfoUtils.getFeedbackReporterPackage(mContext));
} }
@@ -47,6 +48,15 @@ public class FeedbackPreferenceController extends AbstractPreferenceController i
super.updateState(preference); super.updateState(preference);
intent.setPackage(DeviceInfoUtils.getFeedbackReporterPackage(mContext)); intent.setPackage(DeviceInfoUtils.getFeedbackReporterPackage(mContext));
preference.setIntent(intent); 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() { public String getPreferenceKey() {

View File

@@ -21,6 +21,8 @@ import static org.mockito.Mockito.when;
import android.app.Fragment; import android.app.Fragment;
import android.content.Context; import android.content.Context;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -38,12 +40,19 @@ public class FeedbackPreferenceControllerTest {
private Fragment mFragment; private Fragment mFragment;
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Context mContext; private Context mContext;
@Mock
private Preference mPreference;
@Mock
private PreferenceScreen mScreen;
private FeedbackPreferenceController mController; private FeedbackPreferenceController mController;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mController = new FeedbackPreferenceController(mFragment, mContext); mController = new FeedbackPreferenceController(mFragment, mContext);
final String prefKey = mController.getPreferenceKey();
when(mScreen.findPreference(prefKey)).thenReturn(mPreference);
} }
@Test @Test
@@ -51,4 +60,10 @@ public class FeedbackPreferenceControllerTest {
when(mContext.getResources().getString(anyInt())).thenReturn(""); when(mContext.getResources().getString(anyInt())).thenReturn("");
assertThat(mController.isAvailable()).isFalse(); assertThat(mController.isAvailable()).isFalse();
} }
@Test
public void isVisible_afterUpdateState_shouldBeSameAsIsAvailable() {
mController.updateState(mPreference);
assertThat(mPreference.isVisible()).isEqualTo(mController.isAvailable());
}
} }