Prevent crashes on null intent in Slice Builder

Change-Id: Ia429dd00fce785bc9d23ac8cf15f6855d7fca7c2
Fixes: 79147458
Test: Robotests
This commit is contained in:
Matthew Fritze
2018-05-08 14:56:00 -07:00
parent 99902e1faf
commit c301964167
2 changed files with 16 additions and 2 deletions

View File

@@ -30,13 +30,16 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.Uri; import android.net.Uri;
import android.provider.Settings;
import android.provider.SettingsSlicesContract; import android.provider.SettingsSlicesContract;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import android.util.Pair; import android.util.Pair;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.SubSettings; import com.android.settings.SubSettings;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.SliderPreferenceController; import com.android.settings.core.SliderPreferenceController;
@@ -75,6 +78,7 @@ public class SliceBuilderUtils {
* {@param sliceData} is an inline controller. * {@param sliceData} is an inline controller.
*/ */
public static Slice buildSlice(Context context, SliceData sliceData) { public static Slice buildSlice(Context context, SliceData sliceData) {
Log.d(TAG, "Creating slice for: " + sliceData.getPreferenceController());
final BasePreferenceController controller = getPreferenceController(context, sliceData); final BasePreferenceController controller = getPreferenceController(context, sliceData);
final Pair<Integer, Object> sliceNamePair = final Pair<Integer, Object> sliceNamePair =
Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_NAME, sliceData.getKey()); Pair.create(MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_NAME, sliceData.getKey());
@@ -177,8 +181,7 @@ public class SliceBuilderUtils {
* @return {@link PendingIntent} to the Settings home page. * @return {@link PendingIntent} to the Settings home page.
*/ */
public static PendingIntent getSettingsIntent(Context context) { public static PendingIntent getSettingsIntent(Context context) {
final PackageManager manager = context.getPackageManager(); final Intent intent = new Intent(Settings.ACTION_SETTINGS);
final Intent intent = manager.getLaunchIntentForPackage(context.getPackageName());
return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */); return PendingIntent.getActivity(context, 0 /* requestCode */, intent, 0 /* flags */);
} }

View File

@@ -24,6 +24,7 @@ import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import android.app.PendingIntent;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@@ -405,6 +406,16 @@ public class SliceBuilderUtilsTest {
assertThat(intentData).isEqualTo(expectedUri); assertThat(intentData).isEqualTo(expectedUri);
} }
@Test
public void getSettingsIntent_createsIntentToSettings() {
final Intent intent = new Intent(Settings.ACTION_SETTINGS);
final PendingIntent expectedIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
final PendingIntent settingsIntent = SliceBuilderUtils.getSettingsIntent(mContext);
assertThat(expectedIntent).isEqualTo(settingsIntent);
}
private SliceData getDummyData() { private SliceData getDummyData() {
return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH); return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH);
} }