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

Commit 6e1b67a8 authored by Haiyang Liu's avatar Haiyang Liu
Browse files

SystemUI: Redesign the scheme of selecting icons on signal cluster

1. Define icons arrays in res/values/arrays.xml, e.g. arrays for
   signal strength, data type, data activity, etc., so that these
   arrays are able to be overlayed.
2. Enhance TelephonyIcons.java, get the arrays defined in arrays.xml,
   and provide APIs to get icons.
3. Using new interface to get icons inside NetworkController and
   MSimNetworkController.

CRs-Fixed: 627830

Change-Id: I5e735a43a7448a658dc621b24fffb29f56c133f9
parent e3a82231
Loading
Loading
Loading
Loading
+76 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
<!--
/* apps/common/assets/default/default/skins/StatusBar.xml
**
** Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
** Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
** Not a Contribution.
** Copyright 2011 The Android Open Source Project
**
@@ -75,6 +75,23 @@
            />
    </FrameLayout>
    -->
    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/data_combo"
        android:visibility="gone"
        >
        <View
            android:layout_width="6dp"
            android:layout_height="6dp"
            android:visibility="invisible"
            />
        <ImageView
            android:id="@+id/data_inout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </FrameLayout>
    <FrameLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
@@ -89,6 +106,30 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
            <LinearLayout
                android:id="@+id/mobile_signal_cdma"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="gone"
                >
                <ImageView
                    android:id="@+id/mobile_signal_3g"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
                <ImageView
                    android:id="@+id/mobile_signal_1x"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
            </LinearLayout>
            <ImageView
                android:id="@+id/mobile_signal_1x_only"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:visibility="gone"
                />
            <ImageView
                android:id="@+id/mobile_signal"
                android:layout_height="wrap_content"
@@ -120,6 +161,23 @@
        android:visibility="gone"
        android:id="@+id/spacer"
        />
    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/data_combo_sub2"
        android:visibility="gone"
        >
        <View
            android:layout_width="6dp"
            android:layout_height="6dp"
            android:visibility="invisible"
            />
        <ImageView
            android:id="@+id/data_inout_sub2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </FrameLayout>
    <FrameLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
@@ -165,6 +223,23 @@
        android:visibility="gone"
        android:id="@+id/spacer"
        />
    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/data_combo_sub3"
        android:visibility="gone"
        >
        <View
            android:layout_width="6dp"
            android:layout_height="6dp"
            android:visibility="invisible"
            />
        <ImageView
            android:id="@+id/data_inout_sub3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </FrameLayout>
    <FrameLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
+47 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
<!--
/* apps/common/assets/default/default/skins/StatusBar.xml
**
** Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
** Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
** Not a Contribution.
** Copyright 2011, The Android Open Source Project
**
@@ -41,6 +41,11 @@
            android:layout_centerVertical="true"
            android:scaleType="center"
            />
        <ImageView
            android:id="@+id/wifi_inout"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            />
    </FrameLayout>
    <View
        android:layout_height="6dp"
@@ -64,6 +69,23 @@
            />
    </FrameLayout>
    -->
    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/data_combo"
        android:visibility="gone"
        >
        <View
            android:layout_width="6dp"
            android:layout_height="6dp"
            android:visibility="invisible"
            />
        <ImageView
            android:id="@+id/data_inout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </FrameLayout>
    <FrameLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
@@ -78,6 +100,30 @@
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >
            <LinearLayout
                android:id="@+id/mobile_signal_cdma"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:visibility="gone"
                >
                <ImageView
                    android:id="@+id/mobile_signal_3g"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
                <ImageView
                    android:id="@+id/mobile_signal_1x"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    />
            </LinearLayout>
            <ImageView
                android:id="@+id/mobile_signal_1x_only"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:visibility="gone"
            />
            <ImageView
                android:id="@+id/mobile_signal"
                android:layout_height="wrap_content"
+642 −0

File changed.

Preview size limit exceeded, changes collapsed.

+13 −0
Original line number Diff line number Diff line
@@ -118,5 +118,18 @@
    <bool name="config_showApnSwitch">false</bool>
    <bool name="config_showRoamingSetting">false</bool>
    <bool name="config_enableDataSwitch">false</bool>
    <!-- style of status bar:
        0: Default Android style
        1: Show data activity with data type at the left side of
           signal icon, and signal icon on slot 0 may be two icons
           stacked, the upper one is to show 3G, and the lower one
           is to show 1X.
        2: Do not show data activity besides signal icon, instead,
           it shows data activity within signal view.
        3: Show data activity with data type at the left side
           of signal icon, and do not show two stacked icon on
           one slot.
    -->
    <integer name="status_bar_style">0</integer>
</resources>
+209 −17
Original line number Diff line number Diff line
/*
 * Copyright (c) 2012-2013 The Linux Foundation. All rights reserved.
 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
 * Not a Contribution.
 * Copyright (C) 2011 The Android Open Source Project
 *
@@ -43,6 +43,13 @@ public class MSimSignalClusterView
    static final boolean DEBUG = false;
    static final String TAG = "MSimSignalClusterView";

    private final int STATUS_BAR_STYLE_ANDROID_DEFAULT = 0;
    private final int STATUS_BAR_STYLE_CDMA_1X_COMBINED = 1;
    private final int STATUS_BAR_STYLE_DEFAULT_DATA = 2;
    private final int STATUS_BAR_STYLE_DATA_VOICE = 3;

    private int mStyle = 0;

    MSimNetworkController mMSimNC;

    private boolean mWifiVisible = false;
@@ -64,7 +71,24 @@ public class MSimSignalClusterView
    ImageView[] mMobile;
    ImageView[] mMobileActivity;
    ImageView[] mMobileType;
    View mSpacer;
    //cdma and 1x
    private boolean mMobileCdmaVisible = false;
    private boolean mMobileCdma1xOnlyVisible = false;
    private int mMobileCdma3gId = 0;
    private int mMobileCdma1xId = 0;
    private int mMobileCdma1xOnlyId = 0;
    private ViewGroup mMobileCdmaGroup;
    private ImageView mMobileCdma3g, mMobileCdma1x, mMobileCdma1xOnly;

    //data
    private boolean mDataVisible[];
    private int mDataActivityId[];
    private ViewGroup mDataGroup[];
    private ImageView mDataActivity[];

    //spacer
    private View mSpacer;

    private int[] mMobileGroupResourceId = {R.id.mobile_combo, R.id.mobile_combo_sub2,
                                        R.id.mobile_combo_sub3};
    private int[] mMobileResourceId = {R.id.mobile_signal, R.id.mobile_signal_sub2,
@@ -74,7 +98,11 @@ public class MSimSignalClusterView
    private int[] mMobileTypeResourceId = {R.id.mobile_type, R.id.mobile_type_sub2,
                                        R.id.mobile_type_sub3};
    private int[] mNoSimSlotResourceId = {R.id.no_sim, R.id.no_sim_slot2, R.id.no_sim_slot3};
    private int mNumPhones = MSimTelephonyManager.getDefault().getPhoneCount();
    private int[] mDataGroupResourceId = {R.id.data_combo, R.id.data_combo_sub2,
                                        R.id.data_combo_sub3};
    private int[] mDataActResourceId = {R.id.data_inout, R.id.data_inout_sub2,
                                        R.id.data_inout_sub3};
    private final int mNumPhones = MSimTelephonyManager.getDefault().getPhoneCount();

    public MSimSignalClusterView(Context context) {
        this(context, null);
@@ -96,12 +124,18 @@ public class MSimSignalClusterView
        mMobile = new ImageView[mNumPhones];
        mMobileActivity = new ImageView[mNumPhones];
        mMobileType = new ImageView[mNumPhones];
        mDataVisible = new boolean[mNumPhones];
        mDataActivityId = new int[mNumPhones];
        mDataGroup = new ViewGroup[mNumPhones];
        mDataActivity = new ImageView[mNumPhones];
        for(int i=0; i < mNumPhones; i++) {
            mMobileStrengthId[i] = 0;
            mMobileTypeId[i] = 0;
            mMobileActivityId[i] = 0;
            mNoSimIconId[i] = 0;
        }

        mStyle = context.getResources().getInteger(R.integer.status_bar_style);
    }

    public void setNetworkController(MSimNetworkController nc) {
@@ -125,7 +159,16 @@ public class MSimSignalClusterView
            mMobileActivity[i] = (ImageView) findViewById(mMobileActResourceId[i]);
            mMobileType[i]     = (ImageView) findViewById(mMobileTypeResourceId[i]);
            mNoSimSlot[i]      = (ImageView) findViewById(mNoSimSlotResourceId[i]);

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

        mMobileCdmaGroup    = (ViewGroup) findViewById(R.id.mobile_signal_cdma);
        mMobileCdma3g       = (ImageView) findViewById(R.id.mobile_signal_3g);
        mMobileCdma1x       = (ImageView) findViewById(R.id.mobile_signal_1x);
        mMobileCdma1xOnly   = (ImageView) findViewById(R.id.mobile_signal_1x_only);

        applySubscription(MSimTelephonyManager.getDefault().getDefaultSubscription());
    }

@@ -142,13 +185,22 @@ public class MSimSignalClusterView
            mMobileActivity[i] = null;
            mMobileType[i]     = null;
            mNoSimSlot[i]      = null;
            mDataGroup[i]      = null;
            mDataActivity[i]   = null;
        }
        mMobileCdmaGroup    = null;
        mMobileCdma3g       = null;
        mMobileCdma1x       = null;
        mMobileCdma1xOnly   = null;

        super.onDetachedFromWindow();
    }

    @Override
    public void setWifiIndicators(boolean visible, int strengthIcon, String contentDescription) {
    public void setWifiIndicators(boolean visible, int strengthIcon, int activityIcon,
            String contentDescription) {
        mWifiVisible = visible;
        mWifiActivityId = activityIcon;
        mWifiStrengthId = strengthIcon;
        mWifiDescription = contentDescription;

@@ -156,16 +208,46 @@ public class MSimSignalClusterView
    }

    @Override
    public void setMobileDataIndicators(boolean visible, int strengthIcon,
    public void setMobileDataIndicators(boolean visible, int strengthIcon, int activityIcon,
            int typeIcon, String contentDescription, String typeContentDescription,
            int noSimIcon, int subscription) {
        mMobileVisible = visible;
        mMobileStrengthId[subscription] = strengthIcon;
        mMobileTypeId[subscription] = typeIcon;
        mMobileActivityId[subscription] = activityIcon;
        mMobileDescription[subscription] = contentDescription;
        mMobileTypeDescription = typeContentDescription;
        mNoSimIconId[subscription] = noSimIcon;

        if (showMobileActivity()) {
            mMobileActivityId[subscription] = 0;
            mDataActivityId[subscription] = 0;
            mDataVisible[subscription] = false;
        } else {
            mMobileActivityId[subscription] = 0;
            mDataActivityId[subscription] = activityIcon;
            mDataVisible[subscription] = (activityIcon != 0) ? true : false;
        }

        if (mStyle == STATUS_BAR_STYLE_CDMA_1X_COMBINED) {
            if (showBoth3gAnd1x()) {
                mMobileCdmaVisible = true;
                mMobileCdma1xOnlyVisible = false;

                mMobileCdma1xId = strengthIcon;
                mMobileCdma3gId = getMobileCdma3gId(mMobileCdma1xId);
            } else if (show1xOnly() || isRoaming()) {
                //when it is roaming, just show one icon, rather than two icons for CT.
                mMobileCdmaVisible = false;
                mMobileCdma1xOnlyVisible = true;

                mMobileCdma1xOnlyId = strengthIcon;
            }
        }else {
            mMobileCdmaVisible = false;
            mMobileCdma1xOnlyVisible = false;
        }

        applySubscription(subscription);
    }

@@ -197,7 +279,9 @@ public class MSimSignalClusterView
        if (mWifiVisible) {
            mWifiGroup.setVisibility(View.VISIBLE);
            mWifi.setImageResource(mWifiStrengthId);
            if (mStyle != STATUS_BAR_STYLE_ANDROID_DEFAULT) {
                mWifiActivity.setImageResource(mWifiActivityId);
            }
            mWifiGroup.setContentDescription(mWifiDescription);
        } else {
            mWifiGroup.setVisibility(View.GONE);
@@ -208,15 +292,10 @@ public class MSimSignalClusterView
                (mWifiVisible ? "VISIBLE" : "GONE"), mWifiStrengthId, mWifiActivityId));

        if (mMobileVisible && !mIsAirplaneMode) {
            updateMobile(subscription);
            updateCdma();
            updateData(subscription);
            mMobileGroup[subscription].setVisibility(View.VISIBLE);
            mMobile[subscription].setImageResource(mMobileStrengthId[subscription]);
            mMobileGroup[subscription].setContentDescription(mMobileTypeDescription + " "
                + mMobileDescription[subscription]);
            mMobileActivity[subscription].setImageResource(mMobileActivityId[subscription]);
            mMobileType[subscription].setImageResource(mMobileTypeId[subscription]);
            mMobileType[subscription].setVisibility(
                !mWifiVisible ? View.VISIBLE : View.GONE);
            mNoSimSlot[subscription].setImageResource(mNoSimIconId[subscription]);
        } else {
            mMobileGroup[subscription].setVisibility(View.GONE);
        }
@@ -228,6 +307,24 @@ public class MSimSignalClusterView
            mAirplane.setVisibility(View.GONE);
        }

        if (DEBUG) Slog.d(TAG,
                String.format("mobile[%d]: %s sig=%d type=%d", subscription,
                    (mMobileVisible ? "VISIBLE" : "GONE"),
                    mMobileStrengthId[subscription], mMobileTypeId[subscription]));

        if (mStyle == STATUS_BAR_STYLE_ANDROID_DEFAULT) {
            mMobileType[subscription].setVisibility(
                    !mWifiVisible ? View.VISIBLE : View.GONE);
        } else {
            mMobileType[subscription].setVisibility(View.GONE);
        }

        if (mStyle != STATUS_BAR_STYLE_ANDROID_DEFAULT
                && mNoSimIconId[subscription] != 0) {
            mNoSimSlot[subscription].setVisibility(View.VISIBLE);
            mMobile[subscription].setVisibility(View.GONE);
        }

        if (subscription != 0) {
            if (mMobileVisible && mWifiVisible && ((mIsAirplaneMode) ||
                    (mNoSimIconId[subscription] != 0))) {
@@ -238,5 +335,100 @@ public class MSimSignalClusterView
        }

    }

    private void updateMobile(int sub) {
        mMobile[sub].setImageResource(mMobileStrengthId[sub]);
        mMobileGroup[sub].setContentDescription(mMobileTypeDescription + " "
            + mMobileDescription[sub]);
        mMobileActivity[sub].setImageResource(mMobileActivityId[sub]);
        mMobileType[sub].setImageResource(mMobileTypeId[sub]);
        mNoSimSlot[sub].setImageResource(mNoSimIconId[sub]);
    }

    private void updateCdma() {
        if (mMobileCdmaVisible) {
            mMobileCdma3g.setImageResource(mMobileCdma3gId);
            mMobileCdma1x.setImageResource(mMobileCdma1xId);
            mMobileCdmaGroup.setVisibility(View.VISIBLE);
        } else {
            mMobileCdmaGroup.setVisibility(View.GONE);
        }

        if (mMobileCdma1xOnlyVisible) {
            mMobileCdma1xOnly.setImageResource(mMobileCdma1xOnlyId);
            mMobileCdma1xOnly.setVisibility(View.VISIBLE);
        } else {
            mMobileCdma1xOnly.setVisibility(View.GONE);
        }
    }

    private void updateData(int sub) {
        if (mDataVisible[sub]) {
            mDataActivity[sub].setImageResource(mDataActivityId[sub]);
            mDataGroup[sub].setVisibility(View.VISIBLE);
        } else {
            mDataGroup[sub].setVisibility(View.GONE);
        }
    }

    private boolean showBoth3gAnd1x() {
        return mStyle == STATUS_BAR_STYLE_CDMA_1X_COMBINED
            &&((mMobileTypeId[0] == R.drawable.stat_sys_data_connected_3g)
                ||(mMobileTypeId[0] == R.drawable.stat_sys_data_fully_connected_3g));
    }

    private boolean show1xOnly() {
        return mStyle == STATUS_BAR_STYLE_CDMA_1X_COMBINED
            &&((mMobileTypeId[0] == R.drawable.stat_sys_data_connected_1x)
                ||(mMobileTypeId[0] == R.drawable.stat_sys_data_fully_connected_1x));
    }

    private boolean showMobileActivity() {
        return mStyle == STATUS_BAR_STYLE_DEFAULT_DATA
                || (mStyle == STATUS_BAR_STYLE_ANDROID_DEFAULT);
    }

    private boolean isRoaming() {
        return mMobileTypeId[0] == R.drawable.stat_sys_data_fully_connected_roam;
    }

    private int getMobileCdma3gId(int icon){
        int returnVal = 0;
        switch(icon){
            case R.drawable.stat_sys_signal_0_1x:
                returnVal = R.drawable.stat_sys_signal_0_3g;
                break;
            case R.drawable.stat_sys_signal_1_1x:
                returnVal = R.drawable.stat_sys_signal_1_3g;
                break;
            case R.drawable.stat_sys_signal_2_1x:
                returnVal = R.drawable.stat_sys_signal_2_3g;
                break;
            case R.drawable.stat_sys_signal_3_1x:
                returnVal = R.drawable.stat_sys_signal_3_3g;
                break;
            case R.drawable.stat_sys_signal_4_1x:
                returnVal = R.drawable.stat_sys_signal_4_3g;
                break;
            case R.drawable.stat_sys_signal_0_1x_fully:
                returnVal = R.drawable.stat_sys_signal_0_3g_fully;
                break;
            case R.drawable.stat_sys_signal_1_1x_fully:
                returnVal = R.drawable.stat_sys_signal_1_3g_fully;
                break;
            case R.drawable.stat_sys_signal_2_1x_fully:
                returnVal = R.drawable.stat_sys_signal_2_3g_fully;
                break;
            case R.drawable.stat_sys_signal_3_1x_fully:
                returnVal = R.drawable.stat_sys_signal_3_3g_fully;
                break;
            case R.drawable.stat_sys_signal_4_1x_fully:
                returnVal = R.drawable.stat_sys_signal_4_3g_fully;
                break;
            default:
                break;
        }
        return returnVal;
    }
}
Loading