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

Commit ae89ecf8 authored by Stanley Wang's avatar Stanley Wang Committed by Android (Google) Code Review
Browse files

Merge "Remove the unused slices."

parents 9fd20149 5ce53491
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -490,8 +490,6 @@
    <string name="activity_picker_label">Choose activity</string>
    <!-- Do not translate. -->
    <string name="debug_intent_sender_label">Debug intent sender</string>
    <!-- The title of the activity to see random device info. -->
    <string name="device_info_label">Device info</string>
    <!-- The title of the activity to adjust display settings -->
    <string name="display_label">Screen</string>
    <!-- The title of the activity to adjust SD card settings [CHAR LIMIT=25] -->
@@ -11215,9 +11213,6 @@
    <!-- 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 [CHAR LIMIT=NONE]-->
    <string name="emergency_info_contextual_card_summary">Medical info, emergency contacts</string>
    <!-- See more items in contextual homepage [CHAR LIMIT=30]-->
    <string name="see_more">See more</string>
    <!-- See less items in contextual homepage [CHAR LIMIT=30]-->
+0 −135
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.contextualcards.deviceinfo;

import android.app.PendingIntent;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.text.style.TextAppearanceSpan;

import androidx.core.graphics.drawable.IconCompat;
import androidx.slice.Slice;
import androidx.slice.builders.ListBuilder;
import androidx.slice.builders.SliceAction;

import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.SubSettings;
import com.android.settings.Utils;
import com.android.settings.datausage.DataUsageSummary;
import com.android.settings.datausage.DataUsageUtils;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.CustomSliceable;
import com.android.settings.slices.SliceBuilderUtils;
import com.android.settingslib.net.DataUsageController;

import java.util.concurrent.TimeUnit;

public class DataUsageSlice implements CustomSliceable {
    private static final String TAG = "DataUsageSlice";
    private static final long MILLIS_IN_A_DAY = TimeUnit.DAYS.toMillis(1);


    private final Context mContext;

    public DataUsageSlice(Context context) {
        mContext = context;
    }

    @Override
    public Uri getUri() {
        return CustomSliceRegistry.DATA_USAGE_SLICE_URI;
    }

    @Override
    public Slice getSlice() {
        final IconCompat icon = IconCompat.createWithResource(mContext,
                R.drawable.ic_settings_data_usage);
        final String title = mContext.getString(R.string.data_usage_summary_title);
        final SliceAction primaryAction = SliceAction.createDeeplink(getPrimaryAction(), icon,
                ListBuilder.ICON_IMAGE, title);
        final DataUsageController dataUsageController = new DataUsageController(mContext);
        final DataUsageController.DataUsageInfo info = dataUsageController.getDataUsageInfo();
        final ListBuilder listBuilder =
                new ListBuilder(mContext, CustomSliceRegistry.DATA_USAGE_SLICE_URI,
                        ListBuilder.INFINITY)
                        .setAccentColor(Utils.getColorAccentDefaultColor(mContext))
                        .setHeader(new ListBuilder.HeaderBuilder().setTitle(title));
        if (DataUsageUtils.hasSim(mContext)) {
            listBuilder.addRow(new ListBuilder.RowBuilder()
                    .setTitle(getDataUsageText(info))
                    .setSubtitle(getCycleTime(info))
                    .setPrimaryAction(primaryAction));
        } else {
            listBuilder.addRow(new ListBuilder.RowBuilder()
                    .setTitle(mContext.getText(R.string.no_sim_card))
                    .setPrimaryAction(primaryAction));
        }
        return listBuilder.build();
    }

    @Override
    public Intent getIntent() {
        final String screenTitle = mContext.getText(R.string.data_usage_wifi_title).toString();
        return SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                DataUsageSummary.class.getName(), "" /* key */, screenTitle,
                SettingsEnums.SLICE)
                .setClassName(mContext.getPackageName(), SubSettings.class.getName())
                .setData(CustomSliceRegistry.DATA_USAGE_SLICE_URI);
    }

    private PendingIntent getPrimaryAction() {
        final Intent intent = getIntent();
        return PendingIntent.getActivity(mContext, 0  /* requestCode */, intent, 0  /* flags */);
    }

    @VisibleForTesting
    CharSequence getDataUsageText(DataUsageController.DataUsageInfo info) {
        final Formatter.BytesResult usedResult = Formatter.formatBytes(mContext.getResources(),
                info.usageLevel, Formatter.FLAG_CALCULATE_ROUNDED | Formatter.FLAG_IEC_UNITS);
        final SpannableString usageNumberText = new SpannableString(usedResult.value);
        usageNumberText.setSpan(
                new TextAppearanceSpan(mContext, android.R.style.TextAppearance_Large), 0,
                usageNumberText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return TextUtils.expandTemplate(mContext.getText(R.string.data_used_formatted),
                usageNumberText, usedResult.units);
    }

    @VisibleForTesting
    CharSequence getCycleTime(DataUsageController.DataUsageInfo info) {
        final long millisLeft = info.cycleEnd - System.currentTimeMillis();
        if (millisLeft <= 0) {
            return mContext.getString(R.string.billing_cycle_none_left);
        } else {
            final int daysLeft = (int) (millisLeft / MILLIS_IN_A_DAY);
            return daysLeft < 1 ? mContext.getString(R.string.billing_cycle_less_than_one_day_left)
                    : mContext.getResources().getQuantityString(R.plurals.billing_cycle_days_left,
                            daysLeft, daysLeft);
        }
    }

    @Override
    public void onNotifyChange(Intent intent) {

    }
}
+0 −125
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.contextualcards.deviceinfo;

import android.app.PendingIntent;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.text.TextUtils;

import androidx.annotation.VisibleForTesting;
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.SubSettings;
import com.android.settings.Utils;
import com.android.settings.deviceinfo.HardwareInfoPreferenceController;
import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.CustomSliceable;
import com.android.settings.slices.SliceBuilderUtils;
import com.android.settingslib.DeviceInfoUtils;

import java.util.List;

public class DeviceInfoSlice implements CustomSliceable {
    private static final String TAG = "DeviceInfoSlice";

    private final Context mContext;
    private final SubscriptionManager mSubscriptionManager;

    public DeviceInfoSlice(Context context) {
        mContext = context;
        mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class);
    }

    @Override
    public Slice getSlice() {
        final IconCompat icon = IconCompat.createWithResource(mContext,
                R.drawable.ic_info_outline_24dp);
        final String title = mContext.getString(R.string.device_info_label);
        final SliceAction primaryAction = SliceAction.createDeeplink(getPrimaryAction(), icon,
                ListBuilder.ICON_IMAGE, title);
        return new ListBuilder(mContext, CustomSliceRegistry.DEVICE_INFO_SLICE_URI,
                ListBuilder.INFINITY)
                .setAccentColor((Utils.getColorAccentDefaultColor(mContext)))
                .setHeader(new ListBuilder.HeaderBuilder().setTitle(title))
                .addRow(new ListBuilder.RowBuilder()
                        .setTitle(getPhoneNumber())
                        .setSubtitle(getDeviceModel())
                        .setPrimaryAction(primaryAction))
                .build();
    }

    @Override
    public Uri getUri() {
        return CustomSliceRegistry.DEVICE_INFO_SLICE_URI;
    }

    @Override
    public Intent getIntent() {
        final String screenTitle = mContext.getText(R.string.device_info_label).toString();
        return SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                MyDeviceInfoFragment.class.getName(), "" /* key */, screenTitle,
                SettingsEnums.SLICE)
                .setClassName(mContext.getPackageName(), SubSettings.class.getName())
                .setData(CustomSliceRegistry.DEVICE_INFO_SLICE_URI);
    }

    private PendingIntent getPrimaryAction() {
        final Intent intent = getIntent();
        return PendingIntent.getActivity(mContext, 0  /* requestCode */, intent, 0  /* flags */);
    }

    @VisibleForTesting
    CharSequence getPhoneNumber() {
        final SubscriptionInfo subscriptionInfo = getFirstSubscriptionInfo();
        if (subscriptionInfo == null) {
            return mContext.getString(R.string.device_info_default);
        }
        final String phoneNumber = DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext,
                subscriptionInfo);
        return TextUtils.isEmpty(phoneNumber) ? mContext.getString(R.string.device_info_default)
                : phoneNumber;
    }

    private CharSequence getDeviceModel() {
        return HardwareInfoPreferenceController.getDeviceModel();
    }

    @VisibleForTesting
    SubscriptionInfo getFirstSubscriptionInfo() {
        final List<SubscriptionInfo> subscriptionInfoList =
                mSubscriptionManager.getActiveSubscriptionInfoList();
        if (subscriptionInfoList == null || subscriptionInfoList.isEmpty()) {
            return null;
        }
        return subscriptionInfoList.get(0);
    }

    @Override
    public void onNotifyChange(Intent intent) {

    }
}
+0 −85
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.contextualcards.deviceinfo;

import android.app.PendingIntent;
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.accounts.EmergencyInfoPreferenceController;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.CustomSliceable;

// This is a slice helper class for EmergencyInfo
public class EmergencyInfoSlice implements CustomSliceable {

    private final Context mContext;

    public EmergencyInfoSlice(Context context) {
        mContext = context;
    }

    @Override
    public Slice getSlice() {
        final ListBuilder listBuilder = new ListBuilder(mContext,
                CustomSliceRegistry.EMERGENCY_INFO_SLICE_URI,
                ListBuilder.INFINITY);
        listBuilder.addRow(
                new ListBuilder.RowBuilder()
                        .setTitle(mContext.getText(R.string.emergency_info_title))
                        .setSubtitle(
                                mContext.getText(R.string.emergency_info_contextual_card_summary))
                        .setPrimaryAction(createPrimaryAction()));
        return listBuilder.build();
    }

    @Override
    public Uri getUri() {
        return CustomSliceRegistry.EMERGENCY_INFO_SLICE_URI;
    }

    @Override
    public Intent getIntent() {
        return new Intent(EmergencyInfoPreferenceController.getIntentAction(mContext));
    }

    @Override
    public void onNotifyChange(Intent intent) {
    }

    private SliceAction createPrimaryAction() {
        final PendingIntent pendingIntent =
                PendingIntent.getActivity(
                        mContext,
                        0 /* requestCode */,
                        getIntent(),
                        PendingIntent.FLAG_UPDATE_CURRENT);

        return SliceAction.createDeeplink(
                pendingIntent,
                IconCompat.createWithResource(mContext, R.drawable.empty_icon),
                ListBuilder.ICON_IMAGE,
                mContext.getText(R.string.emergency_info_title));
    }
}
+0 −34
Original line number Diff line number Diff line
@@ -29,9 +29,6 @@ import androidx.annotation.VisibleForTesting;
import com.android.settings.display.AdaptiveSleepPreferenceController;
import com.android.settings.flashlight.FlashlightSlice;
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.homepage.contextualcards.deviceinfo.DataUsageSlice;
import com.android.settings.homepage.contextualcards.deviceinfo.DeviceInfoSlice;
import com.android.settings.homepage.contextualcards.deviceinfo.EmergencyInfoSlice;
import com.android.settings.homepage.contextualcards.deviceinfo.StorageSlice;
import com.android.settings.homepage.contextualcards.slices.BatteryFixSlice;
import com.android.settings.homepage.contextualcards.slices.BluetoothDevicesSlice;
@@ -117,34 +114,6 @@ public class CustomSliceRegistry {
            .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
            .appendPath("contextual_wifi")
            .build();

    /**
     * Backing Uri for the Data usage Slice.
     */
    public static final Uri DATA_USAGE_SLICE_URI = new Uri.Builder()
            .scheme(ContentResolver.SCHEME_CONTENT)
            .authority(SettingsSliceProvider.SLICE_AUTHORITY)
            .appendPath(SettingsSlicesContract.PATH_SETTING_ACTION)
            .appendPath("data_usage_card")
            .build();
    /**
     * Backing Uri for the Device info Slice.
     */
    public static final Uri DEVICE_INFO_SLICE_URI = new Uri.Builder()
            .scheme(ContentResolver.SCHEME_CONTENT)
            .authority(SettingsSliceProvider.SLICE_AUTHORITY)
            .appendPath(SettingsSlicesContract.PATH_SETTING_INTENT)
            .appendPath("device_info_card")
            .build();
    /**
     * Backing Uri for the Emergency Info Slice.
     */
    public static final Uri EMERGENCY_INFO_SLICE_URI = new Uri.Builder()
            .scheme(ContentResolver.SCHEME_CONTENT)
            .authority(SettingsSliceProvider.SLICE_AUTHORITY)
            .appendPath(SettingsSlicesContract.PATH_SETTING_INTENT)
            .appendPath("emergency_info_card")
            .build();
    /**
     * Slice Uri for Enhanced 4G slice
     */
@@ -355,9 +324,6 @@ public class CustomSliceRegistry {
        sUriToSlice.put(CONTEXTUAL_NOTIFICATION_CHANNEL_SLICE_URI,
                ContextualNotificationChannelSlice.class);
        sUriToSlice.put(CONTEXTUAL_WIFI_SLICE_URI, ContextualWifiSlice.class);
        sUriToSlice.put(DATA_USAGE_SLICE_URI, DataUsageSlice.class);
        sUriToSlice.put(DEVICE_INFO_SLICE_URI, DeviceInfoSlice.class);
        sUriToSlice.put(EMERGENCY_INFO_SLICE_URI, EmergencyInfoSlice.class);
        sUriToSlice.put(FACE_ENROLL_SLICE_URI, FaceSetupSlice.class);
        sUriToSlice.put(FLASHLIGHT_SLICE_URI, FlashlightSlice.class);
        sUriToSlice.put(LOCATION_SLICE_URI, LocationSlice.class);
Loading