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

Commit 7f8617cd authored by Manjunatha Prabhu's avatar Manjunatha Prabhu Committed by Gerrit - the friendly Code Review server
Browse files

SystemUI: Support forbidden and greyed data icons

1> Show data forbidden icons when data is disabled by
   user.
2> Show greyed data indicator on the non-DDS sub when
   data is ON.

Change-Id: I037c6b757f7b65a1cddb6b7feeb9c78be1a15164
CRs-Fixed: 1073039
parent 97163ff0
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -363,6 +363,26 @@
    <string-array name="telephony_data_activity_lte_sim3">
    </string-array>

    <!-- Array to show forbidden icons -->
    <string-array name="telephony_data_type_forbidden">
        <item>array/telephony_data_type_forbidden_icons</item>
        <item>array/telephony_data_type_forbidden_icons</item>
        <item>array/telephony_data_type_forbidden_icons</item>
    </string-array>

    <string-array name="telephony_data_type_forbidden_icons">
    </string-array>

    <!--Array to show greyed icons -->
    <string-array name="telephony_data_type_disconnected">
        <item>array/telephony_data_type_disconnected_icons</item>
        <item>array/telephony_data_type_disconnected_icons</item>
        <item>array/telephony_data_type_disconnected_icons</item>
    </string-array>

    <string-array name="telephony_data_type_disconnected_icons">
    </string-array>

    <!--signal strength-->
    <!--Add three items to support TSTS-->
    <string-array name="multi_signal_strength">
+2 −0
Original line number Diff line number Diff line
@@ -320,5 +320,7 @@

    <bool name="config_show_long_operator_name">false</bool>
    <bool name="config_show_long_operator_name_when_roaming">false</bool>
    <!-- Show forbidden and greyed data icon when data is disabled -->
    <bool name="config_data_signal_control">false</bool>
</resources>
+7 −0
Original line number Diff line number Diff line
@@ -778,6 +778,13 @@ public class SignalClusterView
                if (mContext.getResources().getBoolean(R.bool.show_roaming_and_network_icons)
                        &&(mTelephonyManager != null
                        && mTelephonyManager.isNetworkRoaming(mSubId))) {
                    if (!(mContext.getResources().getBoolean(R.bool.config_data_signal_control))) {
                         mRoaming.setImageDrawable(getContext().getResources().getDrawable(
                                R.drawable.stat_sys_data_fully_connected_roam));
                    } else {
                       mRoaming.setImageDrawable(null);
                    }

                    mRoaming.setImageDrawable(getContext().getResources().getDrawable(
                            R.drawable.stat_sys_data_fully_connected_roam));
                } else {
+84 −4
Original line number Diff line number Diff line
@@ -15,12 +15,16 @@
 */
package com.android.systemui.statusbar.policy;

import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.net.NetworkCapabilities;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemProperties;
import android.provider.Settings;
import android.telephony.CellLocation;
import android.telephony.gsm.GsmCellLocation;
import android.telephony.PhoneStateListener;
@@ -68,6 +72,8 @@ public class MobileSignalController extends SignalController<
    private String mLastDataSpn;
    private boolean mLastShowPlmn;
    private String mLastPlmn;
    private boolean mIsDataSignalControlEnabled;


    // Since some pieces of the phone state are interdependent we store it locally,
    // this could potentially become part of MobileState for simplification/complication
@@ -87,6 +93,7 @@ public class MobileSignalController extends SignalController<
    private final int STATUS_BAR_STYLE_DATA_VOICE = 3;
    private final int STATUS_BAR_STYLE_EXTENDED = 4;
    private int mStyle = STATUS_BAR_STYLE_ANDROID_DEFAULT;
    private DataEnabledSettingObserver mDataEnabledSettingObserver;

    // TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't
    // need listener lists anymore.
@@ -109,6 +116,14 @@ public class MobileSignalController extends SignalController<
        mNetworkNameSeparator = getStringIfExists(R.string.status_bar_network_name_separator);
        mNetworkNameDefault = getStringIfExists(
                com.android.internal.R.string.lockscreen_carrier_default);
        mIsDataSignalControlEnabled = mContext.getResources()
                .getBoolean(R.bool.config_data_signal_control);
        if (mIsDataSignalControlEnabled) {
            mDataEnabledSettingObserver =
                    new DataEnabledSettingObserver(new Handler(), context);
            mLastState.isForbidden = mCurrentState.isForbidden =
                  !(isMobileDataEnabled(mSubscriptionInfo.getSubscriptionId()));
        }

        if (config.readIconsFromXml) {
            TelephonyIcons.readIconsFromXml(context);
@@ -151,6 +166,11 @@ public class MobileSignalController extends SignalController<
        return getIcons().mDataContentDescription;
    }

    public void setForbiddenState(boolean isForbidden) {
        mCurrentState.isForbidden = isForbidden;
        notifyListenersIfNecessary();
    }

    public void setAirplaneMode(boolean airplaneMode) {
        mCurrentState.airplaneMode = airplaneMode;
        notifyListenersIfNecessary();
@@ -186,6 +206,9 @@ public class MobileSignalController extends SignalController<
                        | PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
                        | PhoneStateListener.LISTEN_DATA_ACTIVITY
                        | PhoneStateListener.LISTEN_CARRIER_NETWORK_CHANGE);
        if (mIsDataSignalControlEnabled) {
            mDataEnabledSettingObserver.register();
        }
    }

    /**
@@ -193,8 +216,10 @@ public class MobileSignalController extends SignalController<
     */
    public void unregisterListener() {
        mPhone.listen(mPhoneStateListener, 0);
        if (mIsDataSignalControlEnabled) {
            mDataEnabledSettingObserver.unregister();
       }
    }

    /**
     * Produce a mapping of data network types to icon groups for simple and quick use in
     * updateTelephony.
@@ -739,9 +764,14 @@ public class MobileSignalController extends SignalController<
            Log.d(mTag, "singleSignalIcon:" + getResourceName(singleSignalIcon));
        }

        if (mIsDataSignalControlEnabled) {
            dataActivityId = (mCurrentState.dataConnected && slotId >= 0) ?
                    TelephonyIcons.getDataActivity(slotId, mCurrentState.dataActivity) :
                    getCustomStatusBarIcon(slotId);
        } else {
            dataActivityId = (mCurrentState.dataConnected && slotId >= 0) ?
                    TelephonyIcons.getDataActivity(slotId, mCurrentState.dataActivity) : 0;

        }
        // Convert the icon to unstacked if necessary.
        int unstackedSignalIcon = TelephonyIcons.convertMobileStrengthIcon(singleSignalIcon);
        if (DEBUG) {
@@ -804,6 +834,24 @@ public class MobileSignalController extends SignalController<
                singleSignalIcon, stackedDataIcon, stackedVoiceIcon, dataActivityId);
    }

    private boolean isMobileDataEnabled(int subId) {
         //Checks for data enabled or not from the given subId.
         return TelephonyManager.getDefault().getDataEnabled(subId);
      }

    private int getCustomStatusBarIcon(int slotId) {
        int dataTypeIcon = 0 ;
        if (!mCurrentState.dataConnected &&  mCurrentState.isForbidden) {
            // Show Forbidden icon incase both data is Disabled and
            // disconnected
            dataTypeIcon = TelephonyIcons.getForbiddenDataIcon(slotId);
        } else {
            // Show greyed icon incase data is enabled and not preferred
            dataTypeIcon = TelephonyIcons.getDataDisconnectedIcon(slotId);
        }
        return dataTypeIcon;
    }

    private int getSimSlotIndex() {
        int slotId = -1;
        if (mSubscriptionInfo != null) {
@@ -1057,6 +1105,7 @@ public class MobileSignalController extends SignalController<
        boolean airplaneMode;
        boolean carrierNetworkChangeMode;
        boolean isDefault;
        boolean isForbidden;
        boolean userSetup;
        int dataActivity;
        int voiceLevel;
@@ -1072,6 +1121,7 @@ public class MobileSignalController extends SignalController<
            dataConnected = state.dataConnected;
            isDefault = state.isDefault;
            isEmergency = state.isEmergency;
            isForbidden = state.isForbidden;
            airplaneMode = state.airplaneMode;
            carrierNetworkChangeMode = state.carrierNetworkChangeMode;
            userSetup = state.userSetup;
@@ -1090,6 +1140,7 @@ public class MobileSignalController extends SignalController<
            builder.append("dataConnected=").append(dataConnected).append(',');
            builder.append("isDefault=").append(isDefault).append(',');
            builder.append("isEmergency=").append(isEmergency).append(',');
            builder.append("isForbidden= ").append(isForbidden).append(',');
            builder.append("airplaneMode=").append(airplaneMode).append(',');
            builder.append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode)
                    .append(',');
@@ -1107,6 +1158,7 @@ public class MobileSignalController extends SignalController<
                    && ((MobileState) o).dataSim == dataSim
                    && ((MobileState) o).dataConnected == dataConnected
                    && ((MobileState) o).isEmergency == isEmergency
                    && ((MobileState) o).isForbidden ==  isForbidden
                    && ((MobileState) o).airplaneMode == airplaneMode
                    && ((MobileState) o).carrierNetworkChangeMode == carrierNetworkChangeMode
                    && ((MobileState) o).userSetup == userSetup
@@ -1115,4 +1167,32 @@ public class MobileSignalController extends SignalController<
                    && ((MobileState) o).imsRadioTechnology == imsRadioTechnology;
        }
    }

   //Observer to moniter enabling and disabling of MobileData
    private class DataEnabledSettingObserver extends ContentObserver {
        ContentResolver mResolver;
        public DataEnabledSettingObserver(Handler handler, Context context) {
            super(handler);
            mResolver = context.getContentResolver();
        }

        public void register() {
            String contentUri;
            if (TelephonyManager.getDefault().getSimCount() == 1) {
                contentUri = Settings.Global.MOBILE_DATA;
            } else {
                contentUri = Settings.Global.MOBILE_DATA + mSubscriptionInfo.getSubscriptionId();
            }
            mResolver.registerContentObserver(Settings.Global.getUriFor(contentUri), false, this);
        }

        public void unregister() {
            mResolver.unregisterContentObserver(this);
        }

        @Override
        public void onChange(boolean selfChange) {
            setForbiddenState(!isMobileDataEnabled(mSubscriptionInfo.getSubscriptionId()));
        }
    }
}
+43 −1
Original line number Diff line number Diff line
@@ -295,6 +295,7 @@ class TelephonyIcons {
    static final String NS = "com.android.systemui";

    static String[] mDataTypeArray, mDataTypeGenerationArray;
    static String[] mForbiddenDataArray, mDataDisconnectedArray;
    static String[] mDataTypeDescriptionArray, mDataTypeGenerationDescArray;
    static String[] mDataActivityArray;
    static String[] mSignalStrengthArray, mSignalStrengthRoamingArray;
@@ -302,6 +303,8 @@ class TelephonyIcons {
    static String[] mSignalStrengthDesc;

    static int[] mSelectedDataTypeIcon;
    static int[] mForbiddenDataTypeIcon;
    static int[] mDataDisconnectedTypeIcon;
    static int[] mSelectedQSDataTypeIcon;
    static String[] mSelectedDataTypeDesc;
    static int[] mSelectedDataActivityIndex;
@@ -319,6 +322,8 @@ class TelephonyIcons {

        mRes = context.getResources();
        try {
            mForbiddenDataArray = mRes.getStringArray(R.array.telephony_data_type_forbidden);
            mDataDisconnectedArray = mRes.getStringArray(R.array.telephony_data_type_disconnected);
            mDataTypeArray = mRes.getStringArray(R.array.multi_data_type);
            mDataTypeDescriptionArray = mRes.getStringArray(
                    R.array.telephony_data_type_description);
@@ -343,6 +348,14 @@ class TelephonyIcons {
            && mDataTypeArray.length != 0) {
            mSelectedDataTypeIcon = new int[mDataTypeArray.length];
        }
        if (mForbiddenDataTypeIcon == null
                  && mForbiddenDataArray.length != 0) {
            mForbiddenDataTypeIcon = new int[mForbiddenDataArray.length];
        }
        if (mDataDisconnectedTypeIcon == null
                  && mDataDisconnectedArray.length != 0) {
            mDataDisconnectedTypeIcon = new int[mDataDisconnectedArray.length];
        }
        if (mSelectedQSDataTypeIcon == null
            && mDataTypeArray.length != 0) {
            mSelectedQSDataTypeIcon = new int[mDataTypeArray.length];
@@ -399,7 +412,16 @@ class TelephonyIcons {
        String resName = mDataTypeArray[slot];
        int resId = mRes.getIdentifier(resName, null, NS);
        String[] dataTypeArray = mRes.getStringArray(resId);

        if (mRes.getBoolean(R.bool.config_data_signal_control)) {
            String forbiddenresName = mForbiddenDataArray[slot];
            String dataDisconnectedResName = mDataDisconnectedArray[slot];
            int forbiddenresId = mRes.getIdentifier(forbiddenresName, null, NS);
            int dataDisconnectedResId = mRes.getIdentifier(dataDisconnectedResName , null, NS);
            String[] forbiddenTypeArray = mRes.getStringArray(forbiddenresId);
            String[] dataDisconnectedTypeArray = mRes.getStringArray(dataDisconnectedResId);
            setForbiddenResource(slot, type, forbiddenTypeArray);
            setDataDisconnectedResource(slot, type, dataDisconnectedTypeArray);
        }
        log(TAG, "data type item name: " + resName + " id:" + resId);

        switch (type) {
@@ -595,6 +617,26 @@ class TelephonyIcons {
        return mSelectedDataTypeIcon[slot];
    }

    private static void setForbiddenResource(int slot, int type,
           String[] forbiddenTypeArray) {
        mForbiddenDataTypeIcon[slot] = mRes.getIdentifier(forbiddenTypeArray[type], null, NS);
    }

    private static void setDataDisconnectedResource(int slot, int type,
           String[] disconnectedTypeArray) {
        mDataDisconnectedTypeIcon[slot] = mRes.getIdentifier(disconnectedTypeArray[type], null, NS);
    }

    public static int getForbiddenDataIcon(int slot) {
        log(TAG, "getForbiddenDataIcon " + String.format("sub=%d", slot));
        return mForbiddenDataTypeIcon[slot];
    }

    public static int getDataDisconnectedIcon(int slot) {
        log(TAG, "getDisconnectedDataIcon " + String.format("sub=%d", slot));
        return mDataDisconnectedTypeIcon[slot];
    }

    static int getDataTypeDesc(int slot) {
        return mRes.getIdentifier(mSelectedDataTypeDesc[slot], null, NS);
    }