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

Commit 50c7a699 authored by Haiyang Liu's avatar Haiyang Liu Committed by Gerrit - the friendly Code Review server
Browse files

StatusBar: Show one tier signal icons in CSFB mode

There should be only one signal icon under CSFB mode,
and two icons shown for dds sub under SGLTE mode.

In SGLTE mode, when data network type is TDS-CDMA or
LTE and voice network type is GSM, both data signal
icon and voice signal icon are shown with separete
signal level.

Change-Id: I1f42272ba0749850b80a1583127e44e88c3bb8ba
CRs-Fixed: 670724
parent 6faad0d5
Loading
Loading
Loading
Loading
+78 −18
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
package com.android.systemui.statusbar;

import android.content.Context;
import android.telephony.SignalStrength;
import android.telephony.MSimTelephonyManager;
import android.telephony.TelephonyManager;
import android.util.AttributeSet;
@@ -288,13 +289,14 @@ public class MSimSignalClusterView
            }
        } else if (mStyle == STATUS_BAR_STYLE_DATA_VOICE) {
            if (showBothDataAndVoice(subscription)
                    || getMobileVoiceId(strengthIcon) != 0) {
                    && getMobileVoiceId(subscription) != 0) {
                mMobileStrengthId[subscription] = 0;
                mMobileDataVoiceVisible[subscription] = true;
                mMobileSignalDataId[subscription] = strengthIcon;
                mMobileSignalVoiceId[subscription]
                        = getMobileVoiceId(mMobileSignalDataId[subscription]);
                        = getMobileVoiceId(subscription);
            } else {
                mMobileStrengthId[subscription] = convertMobileStrengthIcon(mMobileStrengthId[subscription]);
                mMobileDataVoiceVisible[subscription] = false;
            }
        } else {
@@ -454,10 +456,19 @@ public class MSimSignalClusterView
            return false;
        }

        return (mMobileTypeId[sub] == R.drawable.stat_sys_data_connected_3g)
                || (mMobileTypeId[sub] == R.drawable.stat_sys_data_connected_4g)
                || (mMobileTypeId[sub] == R.drawable.stat_sys_data_fully_connected_3g)
                || (mMobileTypeId[sub] == R.drawable.stat_sys_data_fully_connected_4g);
        if (mMSimNC == null) {
            return false;
        }

        boolean ret = false;
        int dataType = mMSimNC.getDataNetworkType(sub);
        int voiceType = mMSimNC.getVoiceNetworkType(sub);
        if ((dataType == TelephonyManager.NETWORK_TYPE_TD_SCDMA
                || dataType == TelephonyManager.NETWORK_TYPE_LTE)
            && voiceType == TelephonyManager.NETWORK_TYPE_GSM) {
            ret = true;
        }
        return ret;
    }

    private boolean showBoth3gAnd1x() {
@@ -481,48 +492,97 @@ public class MSimSignalClusterView
        return mMobileTypeId[0] == R.drawable.stat_sys_data_fully_connected_roam;
    }

    private int getMobileVoiceId(int icon) {
        int returnVal = 0;
    private int getMobileVoiceId(int sub) {
        if (mMSimNC == null) {
            return 0;
        }

        int retValue = 0;
        int level = mMSimNC.getGsmSignalLevel(sub);
        switch(level){
            case SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN:
                retValue = R.drawable.stat_sys_signal_0_gsm;
                break;
            case SignalStrength.SIGNAL_STRENGTH_POOR:
                retValue = R.drawable.stat_sys_signal_1_gsm;
                break;
            case SignalStrength.SIGNAL_STRENGTH_MODERATE:
                retValue = R.drawable.stat_sys_signal_2_gsm;
                break;
            case SignalStrength.SIGNAL_STRENGTH_GOOD:
                retValue = R.drawable.stat_sys_signal_3_gsm;
                break;
            case SignalStrength.SIGNAL_STRENGTH_GREAT:
                retValue = R.drawable.stat_sys_signal_4_gsm;
                break;
            default:
                break;
        }
        return retValue;
    }

    private int convertMobileStrengthIcon(int icon) {
        int returnVal = icon;
        switch(icon){
            case R.drawable.stat_sys_signal_0_3g:
                returnVal = R.drawable.stat_sys_signal_0_3g_default;
                break;
            case R.drawable.stat_sys_signal_0_4g:
                returnVal = R.drawable.stat_sys_signal_0_gsm;
                returnVal = R.drawable.stat_sys_signal_0_4g_default;
                break;
            case R.drawable.stat_sys_signal_1_3g:
                returnVal = R.drawable.stat_sys_signal_1_3g_default;
                break;
            case R.drawable.stat_sys_signal_1_4g:
                returnVal = R.drawable.stat_sys_signal_1_gsm;
                returnVal = R.drawable.stat_sys_signal_1_4g_default;
                break;
            case R.drawable.stat_sys_signal_2_3g:
                returnVal = R.drawable.stat_sys_signal_2_3g_default;
                break;
            case R.drawable.stat_sys_signal_2_4g:
                returnVal = R.drawable.stat_sys_signal_2_gsm;
                returnVal = R.drawable.stat_sys_signal_2_4g_default;
                break;
            case R.drawable.stat_sys_signal_3_3g:
                returnVal = R.drawable.stat_sys_signal_3_3g_default;
                break;
            case R.drawable.stat_sys_signal_3_4g:
                returnVal = R.drawable.stat_sys_signal_3_gsm;
                returnVal = R.drawable.stat_sys_signal_3_4g_default;
                break;
            case R.drawable.stat_sys_signal_4_3g:
                returnVal = R.drawable.stat_sys_signal_4_3g_default;
                break;
            case R.drawable.stat_sys_signal_4_4g:
                returnVal = R.drawable.stat_sys_signal_4_gsm;
                returnVal = R.drawable.stat_sys_signal_4_4g_default;
                break;
            case R.drawable.stat_sys_signal_0_3g_fully:
                returnVal = R.drawable.stat_sys_signal_0_3g_default_fully;
                break;
            case R.drawable.stat_sys_signal_0_4g_fully:
                returnVal = R.drawable.stat_sys_signal_0_gsm_fully;
                returnVal = R.drawable.stat_sys_signal_0_4g_default_fully;
                break;
            case R.drawable.stat_sys_signal_1_3g_fully:
                returnVal = R.drawable.stat_sys_signal_1_3g_default_fully;
                break;
            case R.drawable.stat_sys_signal_1_4g_fully:
                returnVal = R.drawable.stat_sys_signal_1_gsm_fully;
                returnVal = R.drawable.stat_sys_signal_1_4g_default_fully;
                break;
            case R.drawable.stat_sys_signal_2_3g_fully:
                returnVal = R.drawable.stat_sys_signal_2_3g_default_fully;
                break;
            case R.drawable.stat_sys_signal_2_4g_fully:
                returnVal = R.drawable.stat_sys_signal_2_gsm_fully;
                returnVal = R.drawable.stat_sys_signal_2_4g_default_fully;
                break;
            case R.drawable.stat_sys_signal_3_3g_fully:
                returnVal = R.drawable.stat_sys_signal_3_3g_default_fully;
                break;
            case R.drawable.stat_sys_signal_3_4g_fully:
                returnVal = R.drawable.stat_sys_signal_3_gsm_fully;
                returnVal = R.drawable.stat_sys_signal_3_4g_default_fully;
                break;
            case R.drawable.stat_sys_signal_4_3g_fully:
                returnVal = R.drawable.stat_sys_signal_4_3g_default_fully;
                break;
            case R.drawable.stat_sys_signal_4_4g_fully:
                returnVal = R.drawable.stat_sys_signal_4_gsm_fully;
                returnVal = R.drawable.stat_sys_signal_4_4g_default_fully;
                break;
            default:
                break;
+79 −18
Original line number Diff line number Diff line
@@ -30,6 +30,9 @@ import android.widget.LinearLayout;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.NetworkController;

import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;

// Intimately tied to the design of res/layout/signal_cluster_view.xml
public class SignalClusterView
        extends LinearLayout
@@ -218,12 +221,13 @@ public class SignalClusterView
                mMobileCdma1xOnlyVisible = false;
            }
        } else if (mStyle == STATUS_BAR_STYLE_DATA_VOICE) {
            if (showBothDataAndVoice() || getMobileVoiceId(strengthIcon) != 0) {
            if (showBothDataAndVoice() && getMobileVoiceId() != 0) {
                mMobileStrengthId = 0;
                mMobileDataVoiceVisible = true;
                mMobileSignalDataId = strengthIcon;
                mMobileSignalVoiceId = getMobileVoiceId(mMobileSignalDataId);
                mMobileSignalVoiceId = getMobileVoiceId();
            } else {
                mMobileStrengthId = convertMobileStrengthIcon(mMobileStrengthId);
                mMobileDataVoiceVisible = false;
            }
        } else {
@@ -400,10 +404,19 @@ public class SignalClusterView
            return false;
        }

        return (mMobileTypeId == R.drawable.stat_sys_data_connected_3g)
                || (mMobileTypeId == R.drawable.stat_sys_data_connected_4g)
                || (mMobileTypeId == R.drawable.stat_sys_data_fully_connected_3g)
                || (mMobileTypeId == R.drawable.stat_sys_data_fully_connected_4g);
        if (mNC == null) {
            return false;
        }

        boolean ret = false;
        int dataType = mNC.getDataNetworkType();
        int voiceType = mNC.getVoiceNetworkType();
        if ((dataType == TelephonyManager.NETWORK_TYPE_TD_SCDMA
                || dataType == TelephonyManager.NETWORK_TYPE_LTE)
            && voiceType == TelephonyManager.NETWORK_TYPE_GSM) {
            ret = true;
        }
        return ret;
    }

    private boolean showBoth3gAnd1x() {
@@ -427,48 +440,96 @@ public class SignalClusterView
        return mMobileTypeId == R.drawable.stat_sys_data_fully_connected_roam;
    }

    private int getMobileVoiceId(int icon) {
        int returnVal = 0;
    private int getMobileVoiceId() {
        if (mNC == null) {
            return 0;
        }
        int retValue = 0;
        int level = mNC.getGsmSignalLevel();
        switch(level){
            case SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN:
                retValue = R.drawable.stat_sys_signal_0_gsm;
                break;
            case SignalStrength.SIGNAL_STRENGTH_POOR:
                retValue = R.drawable.stat_sys_signal_1_gsm;
                break;
            case SignalStrength.SIGNAL_STRENGTH_MODERATE:
                retValue = R.drawable.stat_sys_signal_2_gsm;
                break;
            case SignalStrength.SIGNAL_STRENGTH_GOOD:
                retValue = R.drawable.stat_sys_signal_3_gsm;
                break;
            case SignalStrength.SIGNAL_STRENGTH_GREAT:
                retValue = R.drawable.stat_sys_signal_4_gsm;
                break;
            default:
                break;
        }
        return retValue;
    }

    private int convertMobileStrengthIcon(int icon) {
        int returnVal = icon;
        switch(icon){
            case R.drawable.stat_sys_signal_0_3g:
                returnVal = R.drawable.stat_sys_signal_0_3g_default;
                break;
            case R.drawable.stat_sys_signal_0_4g:
                returnVal = R.drawable.stat_sys_signal_0_gsm;
                returnVal = R.drawable.stat_sys_signal_0_4g_default;
                break;
            case R.drawable.stat_sys_signal_1_3g:
                returnVal = R.drawable.stat_sys_signal_1_3g_default;
                break;
            case R.drawable.stat_sys_signal_1_4g:
                returnVal = R.drawable.stat_sys_signal_1_gsm;
                returnVal = R.drawable.stat_sys_signal_1_4g_default;
                break;
            case R.drawable.stat_sys_signal_2_3g:
                returnVal = R.drawable.stat_sys_signal_2_3g_default;
                break;
            case R.drawable.stat_sys_signal_2_4g:
                returnVal = R.drawable.stat_sys_signal_2_gsm;
                returnVal = R.drawable.stat_sys_signal_2_4g_default;
                break;
            case R.drawable.stat_sys_signal_3_3g:
                returnVal = R.drawable.stat_sys_signal_3_3g_default;
                break;
            case R.drawable.stat_sys_signal_3_4g:
                returnVal = R.drawable.stat_sys_signal_3_gsm;
                returnVal = R.drawable.stat_sys_signal_3_4g_default;
                break;
            case R.drawable.stat_sys_signal_4_3g:
                returnVal = R.drawable.stat_sys_signal_4_3g_default;
                break;
            case R.drawable.stat_sys_signal_4_4g:
                returnVal = R.drawable.stat_sys_signal_4_gsm;
                returnVal = R.drawable.stat_sys_signal_4_4g_default;
                break;
            case R.drawable.stat_sys_signal_0_3g_fully:
                returnVal = R.drawable.stat_sys_signal_0_3g_default_fully;
                break;
            case R.drawable.stat_sys_signal_0_4g_fully:
                returnVal = R.drawable.stat_sys_signal_0_gsm_fully;
                returnVal = R.drawable.stat_sys_signal_0_4g_default_fully;
                break;
            case R.drawable.stat_sys_signal_1_3g_fully:
                returnVal = R.drawable.stat_sys_signal_1_3g_default_fully;
                break;
            case R.drawable.stat_sys_signal_1_4g_fully:
                returnVal = R.drawable.stat_sys_signal_1_gsm_fully;
                returnVal = R.drawable.stat_sys_signal_1_4g_default_fully;
                break;
            case R.drawable.stat_sys_signal_2_3g_fully:
                returnVal = R.drawable.stat_sys_signal_2_3g_default_fully;
                break;
            case R.drawable.stat_sys_signal_2_4g_fully:
                returnVal = R.drawable.stat_sys_signal_2_gsm_fully;
                returnVal = R.drawable.stat_sys_signal_2_4g_default_fully;
                break;
            case R.drawable.stat_sys_signal_3_3g_fully:
                returnVal = R.drawable.stat_sys_signal_3_3g_default_fully;
                break;
            case R.drawable.stat_sys_signal_3_4g_fully:
                returnVal = R.drawable.stat_sys_signal_3_gsm_fully;
                returnVal = R.drawable.stat_sys_signal_3_4g_default_fully;
                break;
            case R.drawable.stat_sys_signal_4_3g_fully:
                returnVal = R.drawable.stat_sys_signal_4_3g_default_fully;
                break;
            case R.drawable.stat_sys_signal_4_4g_fully:
                returnVal = R.drawable.stat_sys_signal_4_gsm_fully;
                returnVal = R.drawable.stat_sys_signal_4_4g_default_fully;
                break;
            default:
                break;
+21 −0
Original line number Diff line number Diff line
@@ -1211,6 +1211,27 @@ public class MSimNetworkController extends NetworkController {
        setCarrierText();
    }

    public int getVoiceNetworkType(int sub) {
        if (mMSimServiceState[sub] == null) {
            return TelephonyManager.NETWORK_TYPE_UNKNOWN;
        }
        return mMSimServiceState[sub].getVoiceNetworkType();
    }

    public int getDataNetworkType(int sub) {
        if (mMSimServiceState[sub] == null) {
            return TelephonyManager.NETWORK_TYPE_UNKNOWN;
        }
        return mMSimServiceState[sub].getDataNetworkType();
    }

    public int getGsmSignalLevel(int sub) {
        if (mMSimSignalStrength[sub] == null) {
            return mMSimSignalStrength[sub].SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
        }
        return mMSimSignalStrength[sub].getGsmLevel();
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args, int subscription) {
        pw.println("NetworkController for SUB : " + subscription + " state:");
        pw.println(String.format("  %s network type %d (%s)",
+21 −0
Original line number Diff line number Diff line
@@ -1400,6 +1400,27 @@ public class NetworkController extends BroadcastReceiver implements DemoMode {
        setCarrierText();
    }

    public int getVoiceNetworkType() {
        if (mServiceState == null) {
            return TelephonyManager.NETWORK_TYPE_UNKNOWN;
        }
        return mServiceState.getVoiceNetworkType();
    }

    public int getDataNetworkType() {
        if (mServiceState == null) {
            return TelephonyManager.NETWORK_TYPE_UNKNOWN;
        }
        return mServiceState.getDataNetworkType();
    }

    public int getGsmSignalLevel() {
        if (mSignalStrength == null) {
            return SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
        }
        return mSignalStrength.getGsmLevel();
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("NetworkController state:");
        pw.println(String.format("  %s network type %d (%s)",