diff --git a/res/values/strings.xml b/res/values/strings.xml
index ac8f305dbf1..183eca4295d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10264,4 +10264,7 @@
Unavailable when connected to %1$s
+
+
+ Medical info, emergency contacts
diff --git a/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java b/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java
index d1c633f423c..26f86b9da5e 100644
--- a/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java
+++ b/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java
@@ -23,6 +23,7 @@ import android.annotation.Nullable;
import com.android.settings.homepage.deviceinfo.DataUsageSlice;
import com.android.settings.homepage.deviceinfo.DeviceInfoSlice;
import com.android.settings.homepage.deviceinfo.StorageSlice;
+import com.android.settings.homepage.deviceinfo.EmergencyInfoSlice;
import com.android.settings.intelligence.ContextualCardProto.ContextualCard;
import com.android.settings.intelligence.ContextualCardProto.ContextualCardList;
import com.android.settings.wifi.WifiSlice;
@@ -57,11 +58,17 @@ public class SettingsContextualCardProvider extends ContextualCardProvider {
.setSliceUri(StorageSlice.STORAGE_CARD_URI.toString())
.setCardName(StorageSlice.PATH_STORAGE_INFO)
.build();
+ final ContextualCard emergencyInfoCard =
+ ContextualCard.newBuilder()
+ .setSliceUri(EmergencyInfoSlice.EMERGENCY_INFO_CARD_URI.toString())
+ .setCardName(EmergencyInfoSlice.PATH_EMERGENCY_INFO_CARD)
+ .build();
final ContextualCardList cards = ContextualCardList.newBuilder()
.addCard(wifiCard)
.addCard(dataUsageCard)
.addCard(deviceInfoCard)
.addCard(storageInfoCard)
+ .addCard(emergencyInfoCard)
.build();
return cards;
diff --git a/src/com/android/settings/homepage/deviceinfo/EmergencyInfoSlice.java b/src/com/android/settings/homepage/deviceinfo/EmergencyInfoSlice.java
new file mode 100644
index 00000000000..62678b37516
--- /dev/null
+++ b/src/com/android/settings/homepage/deviceinfo/EmergencyInfoSlice.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.homepage.deviceinfo;
+
+import android.app.PendingIntent;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+
+import androidx.core.graphics.drawable.IconCompat;
+import androidx.slice.Slice;
+import androidx.slice.builders.ListBuilder;
+import androidx.slice.builders.SliceAction;
+
+import com.android.settings.R;
+import com.android.settings.slices.SettingsSliceProvider;
+
+// This is a slice helper class for EmergencyInfo
+public class EmergencyInfoSlice {
+ /**
+ * The path denotes the unique name of emergency info slice.
+ */
+ public static final String PATH_EMERGENCY_INFO_CARD = "emergency_info_card";
+
+ /**
+ * Backing Uri for the Emergency Info Slice.
+ */
+ public static final Uri EMERGENCY_INFO_CARD_URI = new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(SettingsSliceProvider.SLICE_AUTHORITY)
+ .appendPath(PATH_EMERGENCY_INFO_CARD)
+ .build();
+
+ private static final String ACTION_EDIT_EMERGENCY_INFO = "android.settings.EDIT_EMERGENCY_INFO";
+
+ public static Slice getSlice(Context context) {
+ final ListBuilder listBuilder = new ListBuilder(context, EMERGENCY_INFO_CARD_URI,
+ ListBuilder.INFINITY);
+ listBuilder.addRow(
+ new ListBuilder.RowBuilder()
+ .setTitle(context.getText(R.string.emergency_info_title))
+ .setSubtitle(
+ context.getText(R.string.emergency_info_contextual_card_summary))
+ .setPrimaryAction(generatePrimaryAction(context)));
+ return listBuilder.build();
+ }
+
+ private static SliceAction generatePrimaryAction(Context context) {
+ PendingIntent pendingIntent =
+ PendingIntent.getActivity(
+ context,
+ 0 /* requestCode */,
+ new Intent(ACTION_EDIT_EMERGENCY_INFO),
+ PendingIntent.FLAG_UPDATE_CURRENT);
+
+ return SliceAction.create(
+ pendingIntent,
+ IconCompat.createWithResource(context, R.drawable.empty_icon),
+ ListBuilder.SMALL_IMAGE,
+ context.getText(R.string.emergency_info_title));
+ }
+}
diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java
index 8b975b4c518..41c207bba34 100644
--- a/src/com/android/settings/slices/SettingsSliceProvider.java
+++ b/src/com/android/settings/slices/SettingsSliceProvider.java
@@ -41,6 +41,7 @@ import com.android.settings.R;
import com.android.settings.bluetooth.BluetoothSliceBuilder;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.flashlight.FlashlightSliceBuilder;
+import com.android.settings.homepage.deviceinfo.EmergencyInfoSlice;
import com.android.settings.location.LocationSliceBuilder;
import com.android.settings.network.telephony.Enhanced4gLteSliceHelper;
import com.android.settings.notification.ZenModeSliceBuilder;
@@ -178,6 +179,8 @@ public class SettingsSliceProvider extends SliceProvider {
registerIntentToUri(FlashlightSliceBuilder.INTENT_FILTER, sliceUri);
mRegisteredUris.add(sliceUri);
return;
+ } else if (EmergencyInfoSlice.EMERGENCY_INFO_CARD_URI.equals(sliceUri)) {
+ return;
}
// Start warming the slice, we expect someone will want it soon.
@@ -241,6 +244,8 @@ public class SettingsSliceProvider extends SliceProvider {
.createWifiCallingPreferenceSlice(sliceUri);
} else if (FlashlightSliceBuilder.FLASHLIGHT_URI.equals(sliceUri)) {
return FlashlightSliceBuilder.getSlice(getContext());
+ } else if (EmergencyInfoSlice.EMERGENCY_INFO_CARD_URI.equals(sliceUri)) {
+ return EmergencyInfoSlice.getSlice(getContext());
}
SliceData cachedSliceData = mSliceWeakDataCache.get(sliceUri);
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java
index fbc91114883..2c42379f86e 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java
@@ -32,6 +32,7 @@ import com.google.android.settings.intelligence.libs.contextualcards.ContextualC
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
@RunWith(SettingsRobolectricTestRunner.class)
@@ -40,6 +41,7 @@ public class SettingsContextualCardProviderTest {
private Context mContext;
private ContentResolver mResolver;
private Uri mUri;
+ private SettingsContextualCardProvider mProvider;
@Before
public void setUp() {
@@ -49,15 +51,18 @@ public class SettingsContextualCardProviderTest {
.scheme(ContentResolver.SCHEME_CONTENT)
.authority(SettingsContextualCardProvider.CARD_AUTHORITY)
.build();
+ mProvider = Robolectric.setupContentProvider(SettingsContextualCardProvider.class);
}
@Test
public void contentProviderCall_returnCorrectSize() throws Exception {
+ final int actualNo = mProvider.getContextualCards().getCardCount();
+
final Bundle returnValue =
mResolver.call(mUri, ContextualCardProvider.METHOD_GET_CARD_LIST, "", null);
final ContextualCardList cards =
- ContextualCardList.parseFrom(
- returnValue.getByteArray(ContextualCardProvider.BUNDLE_CARD_LIST));
- assertThat(cards.getCardCount()).isEqualTo(4);
+ ContextualCardList.parseFrom(
+ returnValue.getByteArray(ContextualCardProvider.BUNDLE_CARD_LIST));
+ assertThat(cards.getCardCount()).isEqualTo(actualNo);
}
}
\ No newline at end of file