1707912926291 true 1709331752476 8 15 true 11 Clock 2095 0 <StringArray sr=""/> [Ljava.lang.String; 60000 1707386129905 true 1707386152702 8 22 41 Battery Charging 10 1707386157665 true 1707863956112 8 24 41 Battery Discharging 10 true 1707389508703 true 1707865911421 8 27 25 RAM info 2095 0 <StringArray sr=""/> [Ljava.lang.String; 30000 1709331623536 true 1709331642189 8 30 11 Clock Odd 1709331669130 true 1709331680207 8 31 11 Clock Even 1709331723825 true 1709331748010 8 32 11 Clock Midnight 1709331839212 true 1709331950977 8 33 41 Battery Level Lockscreen 208 1707073594603 true 1707863988664 8 36 34 Headphones Plugged 30 1707073602421 true 1707863997516 8 37 35 Headset Plugged 30 1707073664697 true 1707864005571 8 40 39 Headset Unplugged 30 true 1707073778135 true 1707452020620 8 42 41 Battery Level 203 1707073194944 SystemUI Icons 36,27,32,24,33,30,31,42,40,37,15,22 41,25,34,29,10,11,35,38,39 net.lonelytransistor.notificationinsystem.ui.ApkSelectorActivity net.lonelytransistor.notificationinsystem 1707183315548 1709367630745 10 Battery Circle Dismiss 100 779 RAM 779 Battery Level0 779 Battery Level+RAM 1707910836787 1709398262380 11 Clock 100 129 var canvas_image=(function(h,p,t,d,dd){ const enc=[0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F]; function drawSegment(c,x,y,w,h,d,hz) { if (hz) { x+=d; w-=d*2; c.moveTo(x,y-h/2); c.lineTo(x+h/2,y-h); c.lineTo(x+w-h/2,y-h); c.lineTo(x+w,y-h/2); c.lineTo(x+w-h/2,y); c.lineTo(x+h/2,y); } else { y+=d; h-=d*2; c.moveTo(x+w/2,y); c.lineTo(x+w,y+w/2); c.lineTo(x+w,y+h-w/2); c.lineTo(x+w/2,y+h); c.lineTo(x,y+h-w/2); c.lineTo(x,y+w/2); } c.fill(); } function drawSegments(c,x,y,w,h,t,d,n) { if (n&0b1000000) drawSegment(c,x+t/2,y+h/2+t/2,w-t,t,d,1); if (n&0b0000010) drawSegment(c,x+w-t,y+t/2,t,h/2-t/2,d); if (n&0b0000100) drawSegment(c,x+w-t,y+h/2,t,h/2-t/2,d); if (n&0b0001000) drawSegment(c,x+t/2,y+h,w-t,t,1,d); if (n&0b0100000) drawSegment(c,x,y+t/2,t,h/2-t/2,d); if (n&0b0010000) drawSegment(c,x,y+h/2,t,h/2-t/2,d); if (n&0b0000001) drawSegment(c,x+t/2,y+t,w-t,t,1,d); } function drawTime(c,x,y,h,t,d,dd,p) { var tm=new Date().toLocaleTimeString('en-US', {hour12: false, hour: "numeric", minute: "numeric"}); var x=0; var w=h/2; if (tm[0]=='2' && tm[1]=='4') tm="00:"+tm[3]+tm[4]; if (tm[0]!='0') { drawSegments(c,0,0,w,h,t,d,enc[tm[0]*1]); } x+=w+dd; drawSegments(c,x,0,w,h,t,d,enc[tm[1]*1]); x+=w+dd*2; w=h/2-h*(p-0.5); h-=h*(p-0.5)*2; drawSegments(c,x,0,w,h,t,d,enc[tm[3]*1]); x+=w+dd; drawSegments(c,x,0,w,h,t,d,enc[tm[4]*1]); x+=w+dd; return x; } var cv=document.createElement("canvas"); cv.width=h*(3+4*dd-2*p); cv.height=h; var c=cv.getContext("2d"); c.fillStyle="#000"; drawTime(c,0,0,h,h*t,h*d,h*dd,p); return cv.toDataURL(); })(47*2,0.65,0.09,0.03,0.06); 523 Clock SystemUI Clock %canvas_image 1707388501859 1709413530442 25 RAM Info 100 123 free | tail -n1 | awk '{printf "%.0f", ($3*100/$2)}' %ram 129 var canvas_image = (function(ram, w, h){ var c = document.createElement('canvas'); c.width = w; c.height = h; var ctx = c.getContext('2d'); ctx.fillStyle = "grey"; ctx.fillRect(0,0,w,h); ctx.fillStyle = "white"; ctx.fillRect(0,100-h*ram/100,w,100); return c.toDataURL(); })(local("ram"), 10, 100); 523 RAM SystemUI Bars %canvas_image 1707473641068 1709367678860 29 RAM Info Dismiss 100 779 RAM 1707073488361 1709367972479 34 Headset Mic 100 523 Headset SystemUI Status mw_hardware_headset_m 1707073529570 1709367977385 35 Headset NoMic 100 523 Headset SystemUI Status mw_hardware_headset 1707183315548 1709367633799 38 Clock Dismiss 100 779 Clock 1707073636342 1709367641252 39 Headset Dismiss 100 779 Headset 1707073721685 1709463785354 41 Battery Circle 100 424 <StringArray sr=""><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0>%bi_level 01. Level The current battery level, from 0 to scale</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES0><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1>%bi_scale 02. Scale The maximum battery level</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2>%bi_status 03. Status 1=Unknown; 2=Charging; 3=Discharging; 4=Not Charging; 5=Full;</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3>%bi_status_string 04. Status Description </_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES4>%bi_temperature 05. Temperature Current battery temperature in degree Celsius. May always show as 0 on some devices.</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES4><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES5>%bi_power_source 06. Power Source 1=AC; 2=USB; 4=Wireless; 8=Dock;</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES5><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES6>%bi_power_source_string 07. Power Source Description </_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES6><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES7>%bi_health 08. Battery Health 1=Unknown; 2=Good; 3=Overheat; 4=Dead; 5=Over Voltage; 6=Failure;</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES7><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES8>%bi_time_until_charged 08. Time Until Charged Approximate time (MS) remaining until the battery is fully charged or -1 if not possible to get</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES8><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES9>%bi_health_string 09. Battery Health Description </_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES9><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES10>%bi_battery_low 10. Battery Low true if device battery level is low (corresponds to the Low battery warning system dialog), false otherwise</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES10><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES11>%bi_voltage 11. Voltage Current battery voltage in millivolts</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES11><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES12>%bi_present 12. Present true if device has a battery, false otherwise</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES12><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES13>%bi_technology 13. Technology Description of the technology of the current battery</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES13><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES14>%bi_capacity_percentage 14. Capacity Percentage Remaining battery capacity percentage</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES14><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES15>%bi_capacity 15. Capacity Battery capacity in microampere-hours</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES15><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES16>%bi_current_average 16. Average Current Average battery current in microamperes. Can be positive (charging) or negative (discharging)</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES16><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES17>%bi_current_now 17. Instantaneous Current Instantaneous battery current in microamperes. Can be positive (charging) or negative (discharging)</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES17><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES18>%bi_energy_counter 18. Energy Counter Battery remaining energy in nanowatt-hours</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES18><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES19>%bi_adaptive_charging_enabled 19. Adaptive Charging Enabled true if adaptive charging is enabled on your device, false if not. May not be correct on all devices.</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES19><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES20>%bi_manufacturing_date 19. Battery Manufacturing Date Seconds Since Epoch</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES20><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES21>%bi_adaptive_battery_management_enabled 20. Adaptive Battery Enabled true if the "Adaptive Battery" setting is enabled on your phone, false if not. May not be correct on all devices.</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES21><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES22>%bi_first_usage_date 20. Battery First Usage Date Seconds Since Epoch</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES22><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES23>%bi_charging_policy 21. Battery Charging Policy 1=Default; 2=Adaptive Static; 3=Adaptive Dynamic; 4=Adaptive Long Life;</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES23><_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES24>%bi_state_of_health 22. Battery State of Health Percentage representing the measured battery state of health (remaining estimated full charge capacity relative to the rated capacity in %)</_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES24></StringArray> [Ljava.lang.String; 129 var canvas_image = (function(batt, charging, low, r){ var c = document.createElement('canvas'); c.width = r; c.height = r; var ctx = c.getContext('2d'); ctx.fillStyle = "white"; ctx.setLineDash([r/16,r/24]); if (charging) { ctx.strokeStyle = "lightgreen"; ctx.setLineDash([]); } else if (low) { ctx.strokeStyle = "tomato"; } else { ctx.strokeStyle = "lightsteelblue"; } ctx.lineWidth = r/8; ctx.beginPath(); ctx.arc(r/2, r/2, r/2-ctx.lineWidth/2, -0.5*Math.PI, batt*2*Math.PI/100-0.5*Math.PI); ctx.stroke(); ctx.closePath(); ctx.globalAlpha = 0.15; ctx.beginPath(); ctx.arc(r/2, r/2, r/2-ctx.lineWidth/2, 0, 2*Math.PI); ctx.stroke(); if (low && !charging) { ctx.globalAlpha = 0.1; ctx.fill(); } ctx.closePath(); ctx.globalAlpha = 1.0; ctx.fillStyle = "white"; ctx.font = "bold " + r*0.6 + "px monospace"; var meas = ctx.measureText(batt); ctx.fillText(batt < 100 ? batt : "", (r-meas.width)/2, 0.725*r); if (low) { ctx.fillText("!", r-20, 0.725*r); } return c.toDataURL(); })(global("BATT"), local("bi_status")==2, global("BATT") <= 15, 47*2); 523 Battery Level0 SystemUI Battery %canvas_image