[FAQ11506][SIM]如何客制化SIM默认颜色

[DESCRIPTION]

为新卡分配颜色客制化,由于这方面需求格式各样,无法罗列各种改法,以下为一个客制化范例,请参考此范例,在根据自身需求定制。

 [SOLUTION]

1.       资源

L之前版本:

PhoneConstants.TOTAL_SIM_COLOR_COUNT  4  默认4个颜色

定义了相应的资源数组如下: 0 蓝色; 1 橙色;  绿色;  紫色

path: alps\mediatek\frameworks\base\telephony\java\com\mediatek\telephony\SimInfoManager.java

    public static final int[] SimBackgroundRes = new int[] {

        com.mediatek.internal.R.drawable.sim_background_blue,

        com.mediatek.internal.R.drawable.sim_background_orange,

        com.mediatek.internal.R.drawable.sim_background_green,

        com.mediatek.internal.R.drawable.sim_background_purple

    };

 

L0版本上:

setSimResource() 中定义了使用到的4种资源.

黄色橙色;  绿色;  紫色

alps/frameworks/opt/telephony/src/java/com/android/internal/telephony/SubscriptionController.java

    private static int[] setSimResource(int type) {

        // Return same images for all types.

        int[] simResource = new int[] {

                    com.mediatek.internal.R.drawable.sim_indicator_yellow,

                    com.mediatek.internal.R.drawable.sim_indicator_orange,

                    com.mediatek.internal.R.drawable.sim_indicator_green,

                    com.mediatek.internal.R.drawable.sim_indicator_purple

                };

 

        return simResource;

    }

 

L1版本上:

 alps/frameworks/opt/telephony/src/java/com/android/internal/telephony/SubscriptionController.java

在L1 颜色是通过资源文件获取并保存在一个int[] 中如下:

2. 设置

L0版本之前:

为新卡分配颜色的函数是setColorForNewSim(),按照要求修改该函数即可。

Path: alsp/mediatek/frameworks/base/telephony/jva/com/mediatek/telephony/SiminfoUpdate.java

默认规则是如果当前卡的颜色值有效则不更改如果无效则simInfoId 4,设置一个默认值。

在检查当前已处理的所有卡,颜色如果有冲突则颜色值在加一。

 

为新卡分配颜色code如下:

    private static void setColorForNewSim(List<SimInfoRecord> simInfos) {

        int nSimInsert = (simInfos == null ? 0 : simInfos.size());

        boolean isNeedChangeColor = false;

        int pivotSimColor = -1;

        int totalColorNum = PhoneConstants.TOTAL_SIM_COLOR_COUNT;

        logd("[setColorForNewSim] SIM num = " + nSimInsert);

        for (int i=0; i<nSimInsert; i++) {

            SimInfoRecord pivotSimInfo = simInfos.get(i);

            if (pivotSimInfo != null) {

                do {

                    isNeedChangeColor = false;

                    logd("[setColorForNewSim] i = " + i + " slot" + pivotSimInfo.mSimSlotId

                            + " simId " + pivotSimInfo.mSimInfoId + " needChange:" + isNeedChangeColor);

                    // set valid SIM color to pivot SIM, temporally set to blue if not valid

                    if (!(0 <= pivotSimInfo.mColor

                                && pivotSimInfo.mColor < totalColorNum)) {

                    //a. 如果卡槽当前的颜色值无效simInfoId 4,设置一个默认值

                        pivotSimColor = (int)(pivotSimInfo.mSimInfoId-1) % totalColorNum;

                    } else {

                   //b. 当前卡的颜色值有效则不更改

                        pivotSimColor = pivotSimInfo.mColor;

                    }

                    // make sure the color will be different with others for consistent UI

                     // c. 在检查当前已处理的所有卡,颜色如果有冲突则颜色值在加一。

                    for(int j=0; j<i; j++) {

                        SimInfoRecord tmpSimInfo = simInfos.get(j);

                        if(tmpSimInfo != null && 0 <= tmpSimInfo.mColor

                                && tmpSimInfo.mColor < totalColorNum && pivotSimColor == tmpSimInfo.mColor) {

                            pivotSimColor = (pivotSimColor+1) % totalColorNum;

                            pivotSimInfo.mColor = pivotSimColor;

                            isNeedChangeColor = true;

                            logd("[setColorForNewSim] conflict slot" + tmpSimInfo.mSimSlotId + " change slot"

                                    + pivotSimInfo.mSimSlotId + " to color " + pivotSimColor);

                            break;

                        }

                    }

                } while (isNeedChangeColor == true);

                ContentValues valueColor = new ContentValues(1);

                valueColor.put(SimInfoManager.COLOR, pivotSimColor);

                mContext.getContentResolver().update(ContentUris.withAppendedId(SimInfoManager.CONTENT_URI, pivotSimInfo.mSimInfoId),

                        valueColor, null, null);  

                logd("[setColorForNewSim] set slot" + pivotSimInfo.mSimSlotId + " SimInfoId:" + pivotSimInfo.mSimInfoId + " color=" + pivotSimColor);

            }

        }

    }

 

L0版本上:

新卡颜色固定用slotid指定,且没有去判断是否设置相同的颜色.

在addSubInfoRecord() 中新增一个record时,设置COLOR字段是按照要求修改即可。

alps/frameworks/opt/telephony/src/java/com/android/internal/telephony/SubscriptionController.java

    public int addSubInfoRecord(String iccId, int slotId) {

……

if (cursor == null || !cursor.moveToFirst()) {

                ContentValues value = new ContentValues();

                value.put(SubscriptionManager.ICC_ID, iccId);

                // default SIM color differs between slots

                value.put(SubscriptionManager.COLOR, slotId);

                value.put(SubscriptionManager.SIM_ID, slotId);

                value.put(SubscriptionManager.DISPLAY_NAME, nameToSet);

                uri = resolver.insert(SubscriptionManager.CONTENT_URI, value);

                logdl("[addSubInfoRecord]- New record created: " + uri);

 

                newRecord = new SubInfoRecord();

                newRecord.subId = Long.valueOf(uri.getLastPathSegment());

newRecord.iccId = iccId;

                newRecord.slotId = slotId;

                newRecord.color = slotId;         

newRecord.displayName = nameToSet;

newRecord.simIconRes[RES_TYPE_BACKGROUND_DARK] = sSimBackgroundDarkRes[newRecord.color];

newRecord.simIconRes[RES_TYPE_BACKGROUND_LIGHT] = sSimBackgroundLightRes[newRecord.color];

} else {

L1版本上:

新卡颜色固定设置与L0上有所不同时给对应SubscriptionInfo中的成员mIconTint变量设值addSubInfoRecord() 中新增一个record时,设置COLOR字段是按照要求修改即可。

alps/frameworks/opt/telephony/src/java/com/android/internal/telephony/SubscriptionController.java

你可能感兴趣的:([FAQ11506][SIM]如何客制化SIM默认颜色)