miue-ui
Version:
ali miniProgram UI components for vehicle.
250 lines (229 loc) • 7.02 kB
JavaScript
/**
* systeminfo
* pixelRatio:1
* windowWidth:Nunber
* widdow Height:numbe
*
*
===alios 示例 ===
pixelRatio:1
windowWidth:
windowHeight:
titleBarHeight:
statusBarHeight:
screenWidth:
screenHeight:
theme:
fontSizeSetting
model:AS22L
brand:AS22L
app:aliauto
version:v1.2012281400.230511031,这个是容器的打包生成的时间????
storage:1.92G
currentBattery:
language:zh-CN
system:3.0.1-R-20230511.0018 ,这个是alios系统的版本号????
platform:Aliauto
===android 示例 jili ===
model:OneOS
brand:qti
app:AP
version:1.1.0.20230515041305-D-prod-parachute-andorid-geely
storage:7 + 80
system:9
platform:android
==android 示例 nisan ==
model:P33AMC
brand:NISSAN
app:AP
version:v1.2.2009251000.2009251000
storage:8 + 50
system:11
platform:android
DRIVICE_ID:
BM_brand+model+
*/
let _changeTheme=(theme)=>{
let reg = /\b(prefers-color-scheme-)(light|dark)\b/g;
};
let _read=(obj,key)=>{
return new Promise((resolve, reject) => {
if(my.MIUE_env.info){
//console.log('MIUE_env success 直接返回了 ');
resolve(my.MIUE_env.info);
return;
}
// 异步读取
my.getSystemInfo({
success: (res) => {
// 定义
let {fontSizeSetting=32,performance='unkonw',benchmarkLevel=-1,platform,storage,system,theme='dark'}=res;
// 对部份车机storage信息中取值
let [_memory=0,_storage=-1]=storage.replace(/\s/g,'').match(/[\d.]+/g);
if(_storage<0){
[_storage,_memory]=[_memory,_storage];
}
// 修正 app 统一为 aliauto;
res.app='aliauto';
// IDE 的模拟器并没准确,对windowsHeight 高度进行修正;
if(my.isIDE){
res.windowHeight=res.windowHeight-68;
}
//对平台名称进行统一修正
platform=platform.toLowerCase();
res.platform=platform=='aliauto'?'alios':platform;
// 设置偏好样式的数组
let prefers=[];
prefers.push('prefers-color-scheme-'+theme);
// 对内存不足4,或是 空间不足 32 的进行进级处理;
//console.warn(`_memory:${_memory},_storage:${_storage}`)
// 当内存大于4 或是 空间大于32 表示性能较高的车机;
if(_memory>4 || _storage>32){
prefers.push('prefers-reduced-motion-no-preference');
//prefers.push('prefers-reduced-motion-reduce');
}else{
prefers.push('prefers-reduced-motion-reduce');
}
res.prefers=prefers;
res.prefersClass=prefers.join(" ");
// 获取系统默认字号,并对字号进行处理,忽略18px以下的默认字号;
//console.warn(fontSizeSetting);
res.fontSizeSetting=fontSizeSetting<19?'':fontSizeSetting;
// performance为支付宝平台定义,有 unknown,low,middle:Android 设备运行内存大于等于 3GB 且 CPU 核心数大于 4,high,高性能。Android 设备运行内存大于等于 4GB。
// benchmarkLevel,微信定义:设备性能等级(仅 Android)。取值为:-2 或 0(该设备无法运行小游戏),-1(性能未知),>=1(设备性能值,该值越高,设备性能越好,目前最高不到50)
// 假定支付宝low= 1-10,middle(10-20),high > 20
// 假设 performance 和 benchmarkLevel 可用的情况下,输出一个可标记的结果;
if(benchmarkLevel==-1){
if(performance=='low'){
benchmarkLevel=2;
}
if(performance=='middle'){
benchmarkLevel=10;
}
if(performance=='high'){
benchmarkLevel=20;
}
}
res.benchmarkLevel=benchmarkLevel;
// res.__defineGetter__('c',()=>{});
if(res.theme==undefined){
res.theme='dark';
}
resolve(res);
my.MIUE_env.info=res;
//console.log(res);
},
fail:(res) => {
reject(res);
}
})
});
}
let guid=()=> {
return 'xxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0,v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
let GUID_KEY='GUID_KEY';
let _guid=()=>{
return new Promise((resolve, reject) => {
_read().then((res)=>{
//console.log(res);
let {brand,model,platform}=res;
let _random='Rxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0,v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
// GUID规则为 BM-平台-品牌-型号-随机位8-时间戳
let _id=`BM-${platform}-${brand}-${model}-${_random}-T${Date.now()}`;
_id=_id.replace(/[\u4e00-\u9fa5*]/g,'X');
my.setStorage({
key:GUID_KEY,
data:{data:_id},
success:()=>{ },
fail:()=>{},
});
resolve({data:_id});
});
})
}
let _getDeviceId=()=>{
return new Promise((resolve, reject) => {
my.getStorage({
key: GUID_KEY,
success: (res)=> { //获取成功
//console.log(res);
let _data=res.data;
if(_data==null){
//console.log('读取本地的数据为 null ')
_guid().then((re)=>{
//console.log(re);
resolve(re);
})
//reject({code:11,msg:'本地数据已格式已损坏'});
}else{
resolve(_data);
}
},
fail: (res)=>{//读取失败
_guid().then((re)=>{
resolve(re);
})
//reject({code:11,msg:'获取当前数据失败'});
}
});
})
}
//------------------------------------------走行限制接口:code>0 则限制,< 1 侧不限制;
// 定义走行限制信息
let drivinBlockInfo=(code)=>{
let errInfo="";
switch(code){
case 0:
errInfo="无操作限制。";
break;
case 1:
errInfo="当前操作限制,请注意行车安全。";
break;
case 2:
errInfo="当前显示限制,请注意行车安全。";
break;
case 3:
errInfo="当前操作/显示限制,请注意行车安全。";
break;
case 4:
errInfo="当前限制,请注意行车安全。";
break;
default:
errInfo="末知";
break;
}
return {code:code,msg:errInfo}
}
let _getDrivingBlock=()=>{
//获取走行限制的能力
return new Promise((resolve, reject) => {
if(my.aliauto.getDrivingBlock){
my.aliauto.getDrivingBlock({
success: (res) => {
let {type=0,code=0}=res || {};
let _code=parseInt(type || code);
resolve(drivinBlockInfo(_code));
},
fail: () => {
// 走行限制读取失败的情况
resolve(drivinBlockInfo(-1));
}
});
}else{
resolve(drivinBlockInfo(-1));
}
})
};
let INFO={};
INFO.read=_read;
INFO.getDeviceId=_getDeviceId;
INFO.getDrivingBlock=_getDrivingBlock;
my.MIUE_env=INFO;
export default INFO;