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

Commit 5784a6b6 authored by Evan Laird's avatar Evan Laird
Browse files

Allow for HTML styling in mobile data type content descriptions

This CL implements a (somewhat hacky) way to enable HTML attributes in
the mobile data type content description strings. This way we can use
some basic styling in the Quick Settings cellular data tile which uses
it in a TextView.

We do this by assuming that the content description is valid, escaped
HTML, and send two separate CharSequences to all of the listeners, all
of which can then decide if they need the regular content description or
the prettified version.

Test: atest SystemUITests; system ui demo mode
Bug: 141177147
Change-Id: Idf387111b0cdc34ad3762eac0ec6c2b484b393e3
parent c22d4531
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -487,6 +487,9 @@
    <!-- Content description of the data connection type 5Ge. [CHAR LIMIT=NONE] -->
    <string name="data_connection_5ge" translatable="false">5Ge</string>

    <!-- Content description of the data connection type 5Ge with HTML styling. DO NOT TRANSLATE [CHAR LIMIT=NONE] -->
    <string name="data_connection_5ge_html" translate="false"> &lt;i>5G &lt;small>E&lt;/small>&lt;/i> </string>

    <!-- Content description of the data connection type 5G. [CHAR LIMIT=NONE] -->
    <string name="data_connection_5g" translatable="false">5G</string>

+5 −3
Original line number Diff line number Diff line
@@ -69,8 +69,10 @@ public class QSCarrierGroupController {
                @Override
                public void setMobileDataIndicators(NetworkController.IconState statusIcon,
                        NetworkController.IconState qsIcon, int statusType, int qsType,
                        boolean activityIn, boolean activityOut, String typeContentDescription,
                        String description, boolean isWide, int subId, boolean roaming) {
                        boolean activityIn, boolean activityOut,
                        CharSequence typeContentDescription,
                        CharSequence typeContentDescriptionHtml, CharSequence description,
                        boolean isWide, int subId, boolean roaming) {
                    int slotIndex = getSlotIndex(subId);
                    if (slotIndex >= SIM_SLOTS) {
                        Log.w(TAG, "setMobileDataIndicators - slot: " + slotIndex);
@@ -83,7 +85,7 @@ public class QSCarrierGroupController {
                    mInfos[slotIndex].visible = statusIcon.visible;
                    mInfos[slotIndex].mobileSignalIconId = statusIcon.icon;
                    mInfos[slotIndex].contentDescription = statusIcon.contentDescription;
                    mInfos[slotIndex].typeContentDescription = typeContentDescription;
                    mInfos[slotIndex].typeContentDescription = typeContentDescription.toString();
                    mInfos[slotIndex].roaming = roaming;
                    mMainHandler.obtainMessage(H.MSG_UPDATE_STATE).sendToTarget();
                }
+11 −6
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.content.res.Resources;
import android.provider.Settings;
import android.service.quicksettings.Tile;
import android.telephony.SubscriptionManager;
import android.text.Html;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -209,12 +210,13 @@ public class CellularTile extends QSTileImpl<SignalState> {

    private CharSequence appendMobileDataType(CharSequence current, CharSequence dataType) {
        if (TextUtils.isEmpty(dataType)) {
            return current;
            return Html.fromHtml(current.toString(), 0);
        }
        if (TextUtils.isEmpty(current)) {
            return dataType;
            return Html.fromHtml(dataType.toString(), 0);
        }
        return mContext.getString(R.string.mobile_carrier_text_format, current, dataType);
        String concat = mContext.getString(R.string.mobile_carrier_text_format, current, dataType);
        return Html.fromHtml(concat, 0);
    }

    private CharSequence getMobileDataContentName(CallbackInfo cb) {
@@ -255,14 +257,17 @@ public class CellularTile extends QSTileImpl<SignalState> {

        @Override
        public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
                int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
                String description, boolean isWide, int subId, boolean roaming) {
                int qsType, boolean activityIn, boolean activityOut,
                CharSequence typeContentDescription,
                CharSequence typeContentDescriptionHtml, CharSequence description,
                boolean isWide, int subId, boolean roaming) {
            if (qsIcon == null) {
                // Not data sim, don't display.
                return;
            }
            mInfo.dataSubscriptionName = mController.getMobileDataNetworkName();
            mInfo.dataContentDescription = (description != null) ? typeContentDescription : null;
            mInfo.dataContentDescription =
                    (description != null) ? typeContentDescriptionHtml : null;
            mInfo.activityIn = activityIn;
            mInfo.activityOut = activityOut;
            mInfo.roaming = roaming;
+5 −3
Original line number Diff line number Diff line
@@ -177,8 +177,10 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba

    @Override
    public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
            int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
            String description, boolean isWide, int subId, boolean roaming) {
            int qsType, boolean activityIn, boolean activityOut,
            CharSequence typeContentDescription,
            CharSequence typeContentDescriptionHtml, CharSequence description,
            boolean isWide, int subId, boolean roaming) {
        MobileIconState state = getState(subId);
        if (state == null) {
            return;
@@ -387,7 +389,7 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
        public int typeId;
        public boolean roaming;
        public boolean needsLeadingPadding;
        public String typeContentDescription;
        public CharSequence typeContentDescription;

        private MobileIconState(int subId) {
            super();
+13 −18
Original line number Diff line number Diff line
@@ -111,30 +111,25 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa
    public void setWifiIndicators(final boolean enabled, final IconState statusIcon,
            final IconState qsIcon, final boolean activityIn, final boolean activityOut,
            final String description, boolean isTransient, String secondaryLabel) {
        post(new Runnable() {
            @Override
            public void run() {
        post(() -> {
            for (SignalCallback callback : mSignalCallbacks) {
                callback.setWifiIndicators(enabled, statusIcon, qsIcon, activityIn, activityOut,
                        description, isTransient, secondaryLabel);
            }
            }
        });
    }

    @Override
    public void setMobileDataIndicators(final IconState statusIcon, final IconState qsIcon,
            final int statusType, final int qsType, final boolean activityIn,
            final boolean activityOut, final String typeContentDescription,
            final String description, final boolean isWide, final int subId, boolean roaming) {
        post(new Runnable() {
            @Override
            public void run() {
            final boolean activityOut, final CharSequence typeContentDescription,
            CharSequence typeContentDescriptionHtml, final CharSequence description,
            final boolean isWide, final int subId, boolean roaming) {
        post(() -> {
            for (SignalCallback signalCluster : mSignalCallbacks) {
                signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType,
                            activityIn, activityOut, typeContentDescription, description, isWide,
                            subId, roaming);
                }
                        activityIn, activityOut, typeContentDescription,
                        typeContentDescriptionHtml, description, isWide, subId, roaming);
            }
        });
    }
Loading