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

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

StatusBar: Add support for CMCC DSDS feature

1. Add an layout to show stacked data and voice signal icons.
2. Add controlling logic in Java files to show icons only for
   CMCC.

CRs-Fixed: 644921

Change-Id: I95089b5d2f7a5e31d0de39328506cab52c38d3cf
parent 14149db1
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
@@ -130,6 +130,24 @@
                android:layout_height="wrap_content"
                android:visibility="gone"
                />
            <LinearLayout
                android:id="@+id/mobile_data_voice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="gone"
                >
                <ImageView
                    android:id="@+id/mobile_signal_data"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
                <ImageView
                    android:id="@+id/mobile_signal_voice"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
            </LinearLayout>
            <ImageView
                android:id="@+id/mobile_signal"
                android:layout_height="wrap_content"
@@ -192,6 +210,24 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
            <LinearLayout
                android:id="@+id/mobile_data_voice_sub2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="gone"
                >
                <ImageView
                    android:id="@+id/mobile_signal_data_sub2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
                <ImageView
                    android:id="@+id/mobile_signal_voice_sub2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
            </LinearLayout>
            <ImageView
                android:id="@+id/mobile_signal_sub2"
                android:layout_height="wrap_content"
@@ -254,6 +290,24 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
            <LinearLayout
                android:id="@+id/mobile_data_voice_sub3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="gone"
                >
                <ImageView
                    android:id="@+id/mobile_signal_data_sub3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
                <ImageView
                    android:id="@+id/mobile_signal_voice_sub3"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
            </LinearLayout>
            <ImageView
                android:id="@+id/mobile_signal_sub3"
                android:layout_height="wrap_content"
+18 −0
Original line number Diff line number Diff line
@@ -124,6 +124,24 @@
                android:layout_height="wrap_content"
                android:visibility="gone"
            />
            <LinearLayout
                android:id="@+id/mobile_data_voice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="gone"
                >
                <ImageView
                    android:id="@+id/mobile_signal_data"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
                <ImageView
                    android:id="@+id/mobile_signal_voice"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
            </LinearLayout>
            <ImageView
                android:id="@+id/mobile_signal"
                android:layout_height="wrap_content"
+116 −0
Original line number Diff line number Diff line
@@ -80,6 +80,13 @@ public class MSimSignalClusterView
    private ViewGroup mMobileCdmaGroup;
    private ImageView mMobileCdma3g, mMobileCdma1x, mMobileCdma1xOnly;

    //data & voice
    private boolean[] mMobileDataVoiceVisible;
    private int[] mMobileSignalDataId;
    private int[] mMobileSignalVoiceId;
    private ViewGroup[] mMobileDataVoiceGroup;
    private ImageView[] mMobileSignalData, mMobileSignalVoice;

    //data
    private boolean mDataVisible[];
    private int mDataActivityId[];
@@ -102,6 +109,12 @@ public class MSimSignalClusterView
                                        R.id.data_combo_sub3};
    private int[] mDataActResourceId = {R.id.data_inout, R.id.data_inout_sub2,
                                        R.id.data_inout_sub3};
    private int[] mMobileDataVoiceGroupResourceId = {R.id.mobile_data_voice,
            R.id.mobile_data_voice_sub2, R.id.mobile_data_voice_sub3};
    private int[] mMobileSignalDataResourceId = {R.id.mobile_signal_data,
            R.id.mobile_signal_data_sub2, R.id.mobile_signal_data_sub3};
    private int[] mMobileSignalVoiceResourceId = {R.id.mobile_signal_voice,
            R.id.mobile_signal_voice_sub2, R.id.mobile_signal_voice_sub3};
    private final int mNumPhones = MSimTelephonyManager.getDefault().getPhoneCount();

    public MSimSignalClusterView(Context context) {
@@ -128,11 +141,23 @@ public class MSimSignalClusterView
        mDataActivityId = new int[mNumPhones];
        mDataGroup = new ViewGroup[mNumPhones];
        mDataActivity = new ImageView[mNumPhones];
        mMobileDataVoiceVisible = new boolean[mNumPhones];
        mMobileSignalDataId = new int[mNumPhones];
        mMobileSignalVoiceId = new int[mNumPhones];
        mMobileDataVoiceGroup = new ViewGroup[mNumPhones];
        mMobileSignalData = new ImageView[mNumPhones];
        mMobileSignalVoice = new ImageView[mNumPhones];
        for(int i=0; i < mNumPhones; i++) {
            mMobileStrengthId[i] = 0;
            mMobileTypeId[i] = 0;
            mMobileActivityId[i] = 0;
            mNoSimIconId[i] = 0;

            mDataVisible[i] = false;
            mMobileDataVoiceVisible[i] = false;
            mDataActivityId[i] = 0;
            mMobileSignalDataId[i] = 0;
            mMobileSignalVoiceId[i] = 0;
        }

        mStyle = context.getResources().getInteger(R.integer.status_bar_style);
@@ -162,6 +187,13 @@ public class MSimSignalClusterView

            mDataGroup[i]      = (ViewGroup) findViewById(mDataGroupResourceId[i]);
            mDataActivity[i]   = (ImageView) findViewById(mDataActResourceId[i]);

            mMobileDataVoiceGroup[i] =
                    (ViewGroup) findViewById(mMobileDataVoiceGroupResourceId[i]);
            mMobileSignalData[i] =
                    (ImageView) findViewById(mMobileSignalDataResourceId[i]);
            mMobileSignalVoice[i] =
                    (ImageView) findViewById(mMobileSignalVoiceResourceId[i]);
        }

        mMobileCdmaGroup    = (ViewGroup) findViewById(R.id.mobile_signal_cdma);
@@ -187,6 +219,9 @@ public class MSimSignalClusterView
            mNoSimSlot[i]      = null;
            mDataGroup[i]      = null;
            mDataActivity[i]   = null;
            mMobileDataVoiceGroup[i] = null;
            mMobileSignalData[i] = null;
            mMobileSignalVoice[i] = null;
        }
        mMobileCdmaGroup    = null;
        mMobileCdma3g       = null;
@@ -247,9 +282,22 @@ public class MSimSignalClusterView
                mMobileCdmaVisible = false;
                mMobileCdma1xOnlyVisible = false;
            }
        } else if (mStyle == STATUS_BAR_STYLE_DATA_VOICE) {
            if (showBothDataAndVoice(subscription)
                    || getMobileVoiceId(strengthIcon) != 0) {
                mMobileStrengthId[subscription] = 0;
                mMobileDataVoiceVisible[subscription] = true;
                mMobileSignalDataId[subscription] = strengthIcon;
                mMobileSignalVoiceId[subscription]
                        = getMobileVoiceId(mMobileSignalDataId[subscription]);
            } else {
                mMobileDataVoiceVisible[subscription] = false;
            }
        } else {
            mMobileCdmaVisible = false;
            mMobileCdma1xOnlyVisible = false;

            mMobileDataVoiceVisible[subscription] = false;
        }

        applySubscription(subscription);
@@ -297,6 +345,7 @@ public class MSimSignalClusterView
            updateMobile(subscription);
            updateCdma();
            updateData(subscription);
            updateDataVoice(subscription);
            mMobileGroup[subscription].setVisibility(View.VISIBLE);
        } else {
            mMobileGroup[subscription].setVisibility(View.GONE);
@@ -373,6 +422,24 @@ public class MSimSignalClusterView
        }
    }

    private void updateDataVoice(int sub) {
        if (mMobileDataVoiceVisible[sub]) {
            mMobileSignalData[sub].setImageResource(mMobileSignalDataId[sub]);
            mMobileSignalVoice[sub].setImageResource(mMobileSignalVoiceId[sub]);
            mMobileDataVoiceGroup[sub].setVisibility(View.VISIBLE);
        } else {
            mMobileDataVoiceGroup[sub].setVisibility(View.GONE);
        }
    }

    private boolean showBothDataAndVoice(int sub) {
        return mStyle == STATUS_BAR_STYLE_DATA_VOICE
            &&((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));
    }

    private boolean showBoth3gAnd1x() {
        return mStyle == STATUS_BAR_STYLE_CDMA_1X_COMBINED
            &&((mMobileTypeId[0] == R.drawable.stat_sys_data_connected_3g)
@@ -394,6 +461,55 @@ public class MSimSignalClusterView
        return mMobileTypeId[0] == R.drawable.stat_sys_data_fully_connected_roam;
    }

    private int getMobileVoiceId(int icon) {
        int returnVal = 0;
        switch(icon){
            case R.drawable.stat_sys_signal_0_3g:
            case R.drawable.stat_sys_signal_0_4g:
                returnVal = R.drawable.stat_sys_signal_0_gsm;
                break;
            case R.drawable.stat_sys_signal_1_3g:
            case R.drawable.stat_sys_signal_1_4g:
                returnVal = R.drawable.stat_sys_signal_1_gsm;
                break;
            case R.drawable.stat_sys_signal_2_3g:
            case R.drawable.stat_sys_signal_2_4g:
                returnVal = R.drawable.stat_sys_signal_2_gsm;
                break;
            case R.drawable.stat_sys_signal_3_3g:
            case R.drawable.stat_sys_signal_3_4g:
                returnVal = R.drawable.stat_sys_signal_3_gsm;
                break;
            case R.drawable.stat_sys_signal_4_3g:
            case R.drawable.stat_sys_signal_4_4g:
                returnVal = R.drawable.stat_sys_signal_4_gsm;
                break;
            case R.drawable.stat_sys_signal_0_3g_fully:
            case R.drawable.stat_sys_signal_0_4g_fully:
                returnVal = R.drawable.stat_sys_signal_0_gsm_fully;
                break;
            case R.drawable.stat_sys_signal_1_3g_fully:
            case R.drawable.stat_sys_signal_1_4g_fully:
                returnVal = R.drawable.stat_sys_signal_1_gsm_fully;
                break;
            case R.drawable.stat_sys_signal_2_3g_fully:
            case R.drawable.stat_sys_signal_2_4g_fully:
                returnVal = R.drawable.stat_sys_signal_2_gsm_fully;
                break;
            case R.drawable.stat_sys_signal_3_3g_fully:
            case R.drawable.stat_sys_signal_3_4g_fully:
                returnVal = R.drawable.stat_sys_signal_3_gsm_fully;
                break;
            case R.drawable.stat_sys_signal_4_3g_fully:
            case R.drawable.stat_sys_signal_4_4g_fully:
                returnVal = R.drawable.stat_sys_signal_4_gsm_fully;
                break;
            default:
                break;
        }
        return returnVal;
    }

    private int getMobileCdma3gId(int icon){
        int returnVal = 0;
        switch(icon){
+95 −2
Original line number Diff line number Diff line
@@ -64,6 +64,13 @@ public class SignalClusterView
    private ViewGroup mMobileCdmaGroup;
    private ImageView mMobileCdma3g, mMobileCdma1x, mMobileCdma1xOnly;

    //data & voice
    private boolean mMobileDataVoiceVisible = false;
    private int mMobileSignalDataId = 0;
    private int mMobileSignalVoiceId = 0;
    private ViewGroup mMobileDataVoiceGroup;
    private ImageView mMobileSignalData, mMobileSignalVoice;

    //data
    private boolean mDataVisible = false;
    private int mDataActivityId = 0;
@@ -115,6 +122,11 @@ public class SignalClusterView
        mMobileCdma1x       = (ImageView) findViewById(R.id.mobile_signal_1x);
        mMobileCdma1xOnly   = (ImageView) findViewById(R.id.mobile_signal_1x_only);

        //data & voice
        mMobileDataVoiceGroup = (ViewGroup) findViewById(R.id.mobile_data_voice);
        mMobileSignalData     = (ImageView) findViewById(R.id.mobile_signal_data);
        mMobileSignalVoice    = (ImageView) findViewById(R.id.mobile_signal_voice);

        //data
        mDataGroup          = (ViewGroup) findViewById(R.id.data_combo);
        mDataActivity       = (ImageView) findViewById(R.id.data_inout);
@@ -145,6 +157,10 @@ public class SignalClusterView
        mAirplane           = null;
        mSpacer             = null;

        mMobileDataVoiceGroup = null;
        mMobileSignalData     = null;
        mMobileSignalVoice    = null;

        super.onDetachedFromWindow();
    }

@@ -188,8 +204,7 @@ public class SignalClusterView

                mMobileCdma1xId = strengthIcon;
                mMobileCdma3gId = getMobileCdma3gId(mMobileCdma1xId);
            } else if (mStyle == STATUS_BAR_STYLE_CDMA_1X_COMBINED
                    && (show1xOnly() || isRoaming())) {
            } else if (show1xOnly() || isRoaming()) {
                mMobileCdmaVisible = false;
                mMobileCdma1xOnlyVisible = true;
                mMobileStrengthId = 0;
@@ -199,9 +214,19 @@ public class SignalClusterView
                mMobileCdmaVisible = false;
                mMobileCdma1xOnlyVisible = false;
            }
        } else if (mStyle == STATUS_BAR_STYLE_DATA_VOICE) {
            if (showBothDataAndVoice() || getMobileVoiceId(strengthIcon) != 0) {
                mMobileStrengthId = 0;
                mMobileDataVoiceVisible = true;
                mMobileSignalDataId = strengthIcon;
                mMobileSignalVoiceId = getMobileVoiceId(mMobileSignalDataId);
            } else {
                mMobileDataVoiceVisible = false;
            }
        } else {
            mMobileCdmaVisible = false;
            mMobileCdma1xOnlyVisible = false;
            mMobileDataVoiceVisible = false;
        }

        apply();
@@ -272,6 +297,7 @@ public class SignalClusterView
            updateMobile();
            updateCdma();
            updateData();
            updateDataVoice();
            mMobileGroup.setVisibility(View.VISIBLE);
        } else {
            mMobileGroup.setVisibility(View.GONE);
@@ -344,6 +370,24 @@ public class SignalClusterView
        }
    }

    private void updateDataVoice() {
        if (mMobileDataVoiceVisible) {
            mMobileSignalData.setImageResource(mMobileSignalDataId);
            mMobileSignalVoice.setImageResource(mMobileSignalVoiceId);
            mMobileDataVoiceGroup.setVisibility(View.VISIBLE);
        } else {
            mMobileDataVoiceGroup.setVisibility(View.GONE);
        }
    }

    private boolean showBothDataAndVoice() {
        return mStyle == STATUS_BAR_STYLE_DATA_VOICE
            &&((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));
    }

    private boolean showBoth3gAnd1x() {
        return mStyle == STATUS_BAR_STYLE_CDMA_1X_COMBINED
            &&((mMobileTypeId == R.drawable.stat_sys_data_connected_3g)
@@ -365,6 +409,55 @@ public class SignalClusterView
        return mMobileTypeId == R.drawable.stat_sys_data_fully_connected_roam;
    }

    private int getMobileVoiceId(int icon) {
        int returnVal = 0;
        switch(icon){
            case R.drawable.stat_sys_signal_0_3g:
            case R.drawable.stat_sys_signal_0_4g:
                returnVal = R.drawable.stat_sys_signal_0_gsm;
                break;
            case R.drawable.stat_sys_signal_1_3g:
            case R.drawable.stat_sys_signal_1_4g:
                returnVal = R.drawable.stat_sys_signal_1_gsm;
                break;
            case R.drawable.stat_sys_signal_2_3g:
            case R.drawable.stat_sys_signal_2_4g:
                returnVal = R.drawable.stat_sys_signal_2_gsm;
                break;
            case R.drawable.stat_sys_signal_3_3g:
            case R.drawable.stat_sys_signal_3_4g:
                returnVal = R.drawable.stat_sys_signal_3_gsm;
                break;
            case R.drawable.stat_sys_signal_4_3g:
            case R.drawable.stat_sys_signal_4_4g:
                returnVal = R.drawable.stat_sys_signal_4_gsm;
                break;
            case R.drawable.stat_sys_signal_0_3g_fully:
            case R.drawable.stat_sys_signal_0_4g_fully:
                returnVal = R.drawable.stat_sys_signal_0_gsm_fully;
                break;
            case R.drawable.stat_sys_signal_1_3g_fully:
            case R.drawable.stat_sys_signal_1_4g_fully:
                returnVal = R.drawable.stat_sys_signal_1_gsm_fully;
                break;
            case R.drawable.stat_sys_signal_2_3g_fully:
            case R.drawable.stat_sys_signal_2_4g_fully:
                returnVal = R.drawable.stat_sys_signal_2_gsm_fully;
                break;
            case R.drawable.stat_sys_signal_3_3g_fully:
            case R.drawable.stat_sys_signal_3_4g_fully:
                returnVal = R.drawable.stat_sys_signal_3_gsm_fully;
                break;
            case R.drawable.stat_sys_signal_4_3g_fully:
            case R.drawable.stat_sys_signal_4_4g_fully:
                returnVal = R.drawable.stat_sys_signal_4_gsm_fully;
                break;
            default:
                break;
        }
        return returnVal;
    }

    private int getMobileCdma3gId(int icon){
        int returnVal = 0;
        switch(icon){