微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 如何客制化SIM默认颜色

如何客制化SIM默认颜色

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]
为新卡分配颜色客制化,由于这方面需求格式各样,无法罗列各种改法,以下为一个客制化范例,请参考此范例,在根据自身需求定制。
[SOLUTION]
1. 资源
L之前版本:
PhoneConstants.TOTAL_SIM_COLOR_COUNT 4 默认4个颜色
定义了相应的资源数组如下: 0 蓝色; 1 橙色; 2 绿色; 3 紫色
path:
alps\mediatek\php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\base\telephony\java\com\mediatek\telephony\SimInf
oManager.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种资源.
0 黄色; 1 橙色; 2 绿色; 3 紫色
alps/frameworks/opt/telephony/src/java/com/android/internal/telephony/SubscriptionContr
oller.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/SubscriptionContr
oller.java
在L1 颜色是通过资源文件获取并保存在一个int[] 中如下:



2.设置
L0版本之前:
为新卡分配颜色的函数是setColorForNewSim(),按照要求修改该函数即可。
Path:
alsp/mediatek/frameworks/base/telephony/jva/com/mediatek/telephony/Siminfo
Update.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(SimInfoMan
ager.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/SubscriptionContr
oller.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/SubscriptionContr
oller.java

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top