Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0057c412 authored by Sunny Shao's avatar Sunny Shao
Browse files

Added the EmergencyInfoSlice for ContextualHomepage

- Generated a simple EmergencyInfo slice with fixed string in title and summary.
- Moved hardcode string into strings.xml
- Modified the contentProviderCall_returnCorrectSize test case for general version

Bug: 114793520
Test: compile and manual test
Change-Id: Ia3444c61b0f7e4c04794fe3590dc0731885cf062
parent 89d44bff
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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>
+7 −0
Original line number Diff line number Diff line
@@ -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;
+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));
    }
}
+5 −0
Original line number Diff line number Diff line
@@ -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);
+8 −3
Original line number Diff line number Diff line
@@ -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);
        assertThat(cards.getCardCount()).isEqualTo(actualNo);
    }
}
 No newline at end of file