Loading res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -10264,4 +10264,7 @@ <!-- Available networks screen, summary when button disallowed due to permanent automatic mode [CHAR LIMIT=NONE] --> <string name="manual_mode_disallowed_summary">Unavailable when connected to <xliff:g id="carrier" example="verizon">%1$s</xliff:g></string> <!-- Used for EmergencyInfoSlice slice helper class --> <string name="emergency_info_contextual_card_summary" translatable="false">Medical info, emergency contacts</string> </resources> src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading src/com/android/settings/homepage/deviceinfo/EmergencyInfoSlice.java 0 → 100644 +77 −0 Original line number Diff line number Diff line /* * 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)); } } src/com/android/settings/slices/SettingsSliceProvider.java +5 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading Loading @@ -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); Loading tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java +8 −3 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -40,6 +41,7 @@ public class SettingsContextualCardProviderTest { private Context mContext; private ContentResolver mResolver; private Uri mUri; private SettingsContextualCardProvider mProvider; @Before public void setUp() { Loading @@ -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); assertThat(cards.getCardCount()).isEqualTo(actualNo); } } No newline at end of file Loading
res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -10264,4 +10264,7 @@ <!-- Available networks screen, summary when button disallowed due to permanent automatic mode [CHAR LIMIT=NONE] --> <string name="manual_mode_disallowed_summary">Unavailable when connected to <xliff:g id="carrier" example="verizon">%1$s</xliff:g></string> <!-- Used for EmergencyInfoSlice slice helper class --> <string name="emergency_info_contextual_card_summary" translatable="false">Medical info, emergency contacts</string> </resources>
src/com/android/settings/homepage/contextualcards/SettingsContextualCardProvider.java +7 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading
src/com/android/settings/homepage/deviceinfo/EmergencyInfoSlice.java 0 → 100644 +77 −0 Original line number Diff line number Diff line /* * 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)); } }
src/com/android/settings/slices/SettingsSliceProvider.java +5 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading Loading @@ -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); Loading
tests/robotests/src/com/android/settings/homepage/contextualcards/SettingsContextualCardProviderTest.java +8 −3 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -40,6 +41,7 @@ public class SettingsContextualCardProviderTest { private Context mContext; private ContentResolver mResolver; private Uri mUri; private SettingsContextualCardProvider mProvider; @Before public void setUp() { Loading @@ -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); assertThat(cards.getCardCount()).isEqualTo(actualNo); } } No newline at end of file