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

Commit f5e280e4 authored by Fan Zhang's avatar Fan Zhang Committed by Android (Google) Code Review
Browse files

Merge "Added the EmergencyInfoSlice for ContextualHomepage"

parents 4ae062b7 0057c412
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