From 1002eb48666645dfebe8fd81b8a8dd6eecd5c708 Mon Sep 17 00:00:00 2001 From: pawkakol1 Date: Tue, 11 Oct 2022 21:20:51 +0200 Subject: [PATCH 1/3] android_custom_keyboard - init commit --- .../android_custom_keyboard/icn-backspace.png | Bin 0 -> 469 bytes .../android_custom_keyboard/icn-enter.png | Bin 0 -> 363 bytes .../android_custom_keyboard/remote-html.js | 231 ++++++++++++++++++ 3 files changed, 231 insertions(+) create mode 100644 dist/remotes/android_custom_keyboard/icn-backspace.png create mode 100644 dist/remotes/android_custom_keyboard/icn-enter.png create mode 100644 dist/remotes/android_custom_keyboard/remote-html.js diff --git a/dist/remotes/android_custom_keyboard/icn-backspace.png b/dist/remotes/android_custom_keyboard/icn-backspace.png new file mode 100644 index 0000000000000000000000000000000000000000..ec08f65fd63c7fd9a5b7b3d3b91ae726ad838638 GIT binary patch literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^xBu@q-kF zWR~QlGB`Opdj|(NI=lXl@^NBdU^Mr1aSZY3e0y!Lmu#TO(T}En2QpMOSXx5LxNhBa zot*9=DDP-6!CWAFt6(jIsEf<&DK9TQX*PLT!x(?Si^aZ9)27j}XfgA3>)zGYZ%Wht zTAs1{t#ZC9%s=$+9|^HZIVvlob7rq!^=g~%x$dx#|AKZZH@%CdJ^9Z3&FW;#q?L6~ zw~N_5WV>(p@r3Q_cP3x1)O>Hw&YAu}xW^0)G=IcLx^jEcRW%?>AZgKRr-opJ;4xDAL`F*tf9*f@AM(6#9))!qmZEK^w z)Y8AOb-u)Vo?R_{kBa;2f8{Q=Z2u@X-QtbNE|%*{Z$6OFm)@#+rT43~PZ{4`h9A}b z^~Md=yYiD|ygkc4@93PNa@jL&(v{rf75neYb$ed>d?df${=0N@p`Ns^EiiN$JYD@< J);T3K0RY^_ze)fA literal 0 HcmV?d00001 diff --git a/dist/remotes/android_custom_keyboard/icn-enter.png b/dist/remotes/android_custom_keyboard/icn-enter.png new file mode 100644 index 0000000000000000000000000000000000000000..2acff66219d507dbd01f74f65f848373c548d93c GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^xBuaf1|v zWR~QlGPwGMxCWJ2c~1rkU-Wcw4DslEJ7sSclcR*|`5<oa7V|HcUzo){eY!{3CBo z-=59{VGqS++c$dYupHEi$f(TO7E_v-#(B{8s>tWN)jMm9FI>3rp<+dLsnp_&UZQLc zwL#&p-W=O1zCir(WSuR)cyt;WKg{&n-s8t5_*HZUbFKovV$ISEd)-Pdzhe2p;CCSU zZlmI+OjBmD1Clow-@n?s@x`K~>x+3?9^F}Mv6*Gt#C?S;W>$sl?>_#+KEVBz6wlW2W$~$coVYZU#WlF?hQAxvX { + newDiv = document.createElement("div"); + newDiv.setAttribute("id", itemId); + newDiv.setAttribute("class", "buttonsLine"); + mainDiv.appendChild(newDiv); + }); + + var hyperlink = document.createElement("a"); + hyperlink.setAttribute("id", "hyperlink"); + hyperlink.setAttribute("href", "#"); + hyperlink.setAttribute("title", ""); + mainDiv.appendChild(hyperlink); + + //all letters' buttons printing + lineTable.forEach((lineLetters, index) => { + lineLetters.forEach((item) => { + createDivWithContent( + linesNames[index], + "btn-" + String(item), + "keyButton", + "sub-" + String(item), + "letter", + getContent(item, true) + ); + }); + }); + + //creates Button with Key name as a content + function createDivWithContent( + parentId, + mainId, + mainClass, + subId, + subClass, + content + ) { + var parentObj = mainContainer.querySelector("#" + parentId); + if (parentObj != null) { + var newDiv = document.createElement("div"); + newDiv.setAttribute("id", mainId); + newDiv.setAttribute("class", mainClass); + newDiv.classList.add("myButton-" + String(template)); + if (subId != null && subId != "") { + var subDiv = document.createElement("div"); + subDiv.setAttribute("id", subId); + subDiv.setAttribute("class", "letter"); + subDiv.appendChild(content); + newDiv.appendChild(subDiv); + } else newDiv.appendChild(content); + parentObj.appendChild(newDiv); + } else + console.log( + "createDivWithContent function couldn't create new div, because parent object with ID: " + + String(parentId) + + " doesn't exist." + ); + } + + function getContent(item, condition) { + if (item === "BACKSPACE") { + var content = document.createElement("img"); + content.setAttribute("src", base_url + "icn-backspace.png"); + } else if (item === "COMMA") var content = document.createTextNode(","); + else if (item === "SPACE") var content = document.createTextNode(" "); + else if (item === "DOTT") var content = document.createTextNode("."); + else if (item === "ENTER") { + var content = document.createElement("img"); + content.setAttribute("src", base_url + "icn-enter.png"); + } else + var content = document.createTextNode( + condition ? String(item).toUpperCase() : String(item).toLowerCase() + ); + return content; + } + return mainContainer.outerHTML; +} From 4b31b5d1eb59da4746efbeaf4eb34ac0566e5d9b Mon Sep 17 00:00:00 2001 From: pawkakol1 Date: Tue, 11 Oct 2022 21:35:24 +0200 Subject: [PATCH 2/3] android_custom_keyboard description and keys assignment added to README file --- README.md | 388 ++++++++++++++++++++++++++++-------- android_custom_keyboard.png | Bin 0 -> 11825 bytes 2 files changed, 302 insertions(+), 86 deletions(-) create mode 100644 android_custom_keyboard.png diff --git a/README.md b/README.md index 7611103..d6c7f52 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Remote Control card # +# Remote Control card @@ -15,11 +15,9 @@ and then just configure the broadlink codes for each button. All buttons are configured according to the id of the button in the html section of `remote-html.js` -
simple remote example: (Click to expand!) - ``` buttons: back: @@ -183,41 +181,40 @@ type: 'custom:generic-remote-control-card' ``` - +
LG remote example: (Click to expand!) - ``` type: 'custom:generic-remote-control-card' name: LG Tv remote_template: simple buttons: - power: + power: call: remote.send_command data: entity_id: remote.living_room_remote command: "b64:JgBYAAABKpIVEBURFDUWEBQRFBETEhURFDUVNRUQFTUVNRQ2FDUTNxQTExEUEhE3ExQTERMSFRITNRU1FDYUEhI3FDUVNRM3FQAFMwABKEoWAAxMAAEqSBUADQU=" - - + + source: call: remote.send_command data: entity_id: remote.living_room_remote command: "b64:JgBYAAABJpMSExEUETgRFBEUERMSExITEjcSOBETEjgROBI4ETgSOBETEjgROBITEhMSEhM3ETgTNxITERMSOBE4EjgRExITEQAFGwABJkoSAAxGAAElSxIADQU=" - - - button1: - button2: - button3: - button4: - button5: - button6: - button7: - button8: - button9: + + + button1: + button2: + button3: + button4: + button5: + button6: + button7: + button8: + button9: buttonClear: button0: buttonEnter: @@ -227,63 +224,61 @@ buttons: channeldown: channelup: netflix: - left: + left: call: remote.send_command data: entity_id: remote.living_room_remote command: "b64:JgBQAAABKpIVEBMRFRAVEBUQFBEUERQREjcUNhM2EzYUNhM2FBAVNRQ1FRAVEBQ2EzYTERYPFRAVERM2EjcUEBUREzYUNRQ2FAAFTQABKUgUAA0FAAAAAAAAAAA=" - right: + right: call: remote.send_command data: entity_id: remote.living_room_remote command: "b64:JgBQAAABKZIUERQRExIUERMRFBEVEBQREzYVNBU1FDUUNRU1FBETNhUQFBEUERQ1FTQVERMSExEUNRU1FDUUERUQFDUUNhM2FAAFTgABKEgVAA0FAAAAAAAAAAA=" - - top: + + top: call: remote.send_command data: entity_id: remote.living_room_remote command: "b64:JgBQAAABKJIVERQRExIVDxQRFBEUERQREzYTNhU1FTQWMxU1FBETNhQRFDUUNRUQFTUUERMSFBAUNRURExIUNRQQFTUUNRM2FQAFTgABKEgVAA0FAAAAAAAAAAA=" - - bottom: + + bottom: call: remote.send_command data: entity_id: remote.living_room_remote command: "b64:JgBQAAABKZIUERMSEhIUERUQFBEUERMSEzYUNhM2FTQUNhM2FBAUNhQ1FTQVNRQRFDUUERUQExITEhQRFBAVNBURFDUVNBU1FAAFTQABKUgVAA0FAAAAAAAAAAA=" - - ok: + + ok: call: remote.send_command data: entity_id: remote.living_room_remote command: "b64:JgBUAAkACXEAASiTFRAUERQRFBETEhQRExEUERU1FDUUNRU1FDUUNRYPEzcTNhQQFjQTEhU0Fg8UERQRFBEVNBQRFDYSEhQ1FTQVNRQABU4AASlIFAANBQAAAAA=" back: - volplus: + volplus: call: remote.send_command data: entity_id: remote.living_room_remote command: "b64:JgBQAAABJZMTEhITETgSExEUERMSExITETgSOBITETgSNxM3ETgSOBEUETgRFBETEhMSExEUERMTNxISEzcROBM3ETgSOBI3EwAFGQABJkoSAA0FAAAAAAAAAAA=" - volmin: + volmin: call: remote.send_command data: entity_id: remote.living_room_remote command: "b64:JgBYAAABJpMSExEUETgSExEUERMSExEUETgSOBMREjgROBI4ETgSNxI4EjgRExITERQRExITEhMRFBETEjgROBI4ETgSOBE4EQAFGwABJkoSAAxFAAEmShIADQU=" - - mute: + + mute: call: remote.send_command data: entity_id: remote.living_room_remote command: "b64:JgCgAJaSEQ8RDxIPEg8SMBIvEg8SDxIvETERMBAxEg8SDxIPEQ8SkhIPEg8SDxIPETASDxIPERARLxIwEi8SDxIPEjARMBIwERASDREQEjASAAdhlJMSDxEQERARDxIvEjASDxEPETESMBEwEjARDxAQEg8SDxKSEg8REBEPEg8SMBEQEQ8REBIwEi8SLxIPEg8SLxIwEi8SDxEQEg8RMBEADQUAAAAAAAAAAA==" - -``` -
+``` +
Mibox Remote example, with ADB server: (Click to expand!) (remote design by Avi Abeksis) - ``` buttons: back: @@ -341,8 +336,8 @@ remote_template: mibox type: 'custom:generic-remote-control-card' ``` -
+
Google Chromecast with Google TV Remote example, with ADB server: (Click to expand!) @@ -435,14 +430,13 @@ remote_template: ccwgtv type: 'custom:generic-remote-control-card' ``` +
PartnerTV Remote example, thanx to @VirtualL : (Click to expand!) - - ``` @@ -450,51 +444,50 @@ type: 'custom:generic-remote-control-card' name: PartnerTV remote_template: partner buttons: - power: - volplus: + power: + volplus: volmin: - partner: - mute: - record: - source: - one: - two: - three: - four: - five: - six: - seven: - eight: - nine: - zero: + partner: + mute: + record: + source: + one: + two: + three: + four: + five: + six: + seven: + eight: + nine: + zero: section12: lastch: fastforward: - rewind: - play: - stop: - vod: - myrec: - netflix: - youtube: + rewind: + play: + stop: + vod: + myrec: + netflix: + youtube: channelup: channeldown: - home: - back: - circle: - left: - right: - top: - bottom: - ok: + home: + back: + circle: + left: + right: + top: + bottom: + ok: ``` +
Samsung TV remote: (Click to expand!) - - ``` @@ -672,6 +665,7 @@ style: | type: 'custom:generic-remote-control-card' ``` +
@@ -782,12 +776,9 @@ style: |
-
Yes Remote (Design and codes by Rubinov lior): (Click to expand!) - - ``` @@ -1028,10 +1019,10 @@ buttons: b64:JgBQAAABJZMSExITETgTEhETEhMSExE4EhMRExI4EjcSOBE4EhMRExITEzYSOBEUEhISExE4EhMSNxITEhMROBI4ETgSExE4EgAFYgABJkoSAA0FAAAAAAAAAAA= ``` - +
- InFocus IR1109R1 remote (Design and codes by Pawel Kakol): (Click to expand!) + InFocus IR1109R1 remote (Design and codes by pawkakol1): (Click to expand!) @@ -1205,12 +1196,11 @@ remote_template: infocus_ir1109r1 type: custom:generic-remote-control-card ``` - -
+
- Edifier RC600A remote (Design and codes by Pawel Kakol): (Click to expand!) + Edifier RC600A remote (Design and codes by pawkakol1): (Click to expand!) @@ -1288,8 +1278,8 @@ remote_template: edifier_rc600a type: custom:generic-remote-control-card ``` -
+
Apple TV 4k Remote (Design and codes by richsimpson): (Click to expand!) @@ -1357,7 +1347,8 @@ buttons: entity_id: remote.apple_tv_lounge command: volume_down -``` +``` +
@@ -1452,14 +1443,239 @@ buttons: command: input keyevent 90 -``` +``` + +
+ +
+ Android custom keyboard (Design and codes by pawkakol1): (Click to expand!) + + + +``` +buttons: + btn-0: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 7 + btn-1: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 8 + btn-2: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 9 + btn-3: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 10 + btn-4: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 11 + btn-5: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 12 + btn-6: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 13 + btn-7: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 14 + btn-8: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 15 + btn-9: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 16 + btn-A: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 29 + btn-B: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 30 + btn-C: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 31 + btn-D: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 32 + btn-E: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 33 + btn-F: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 34 + btn-G: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 35 + btn-H: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 36 + btn-I: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 37 + btn-J: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 38 + btn-K: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 39 + btn-L: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 40 + btn-M: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 41 + btn-N: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 42 + btn-O: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 43 + btn-P: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 44 + btn-Q: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 45 + btn-R: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 46 + btn-S: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 47 + btn-T: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 48 + btn-U: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 49 + btn-V: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 50 + btn-W: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 51 + btn-X: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 52 + btn-Y: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 53 + btn-Z: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 54 + btn-COMMA: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 55 + btn-DOTT: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 56 + btn-SHIFT: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 59 + btn-SPACE: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 62 + btn-BACKSPACE: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 67 + btn-ENTER: + call: androidtv.adb_command + data: + entity_id: media_player.projekttv + command: input keyevent 66 +name: Android Custom Keyboard +remote_template: android_custom_keyboard +type: custom:generic-remote-control-card + +``` +
# Contribution + if you want to add your own remote template, you can do it in a new folder near the 'simple' and 'lg' remotes and -set remote_template to the name of your new folder. +set remote_template to the name of your new folder. just make sure you are changing the html and css methods suffixes -# you are also welcome to contribute new templates. you can add new buttons and remove buttons, just make sure their id matches the id you put in the yaml # - - +# you are also welcome to contribute new templates. you can add new buttons and remove buttons, just make sure their id matches the id you put in the yaml diff --git a/android_custom_keyboard.png b/android_custom_keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..524a8dd1b1e28e66dd660462e9aef1076a81f2b2 GIT binary patch literal 11825 zcmcI~cUTkMx^EPvNl~Oo7ipo1B1k9nE(8QZM+KyV^bVr*Dw0s8gd!ll3sR&*=vC>x zNe>+YoI$^R&$sv8=iYOk=iWc^Ofs`(&6>5|_gCJP5U7eAAwCs82m~Tjke5~mfv!yg zA5Prsz?tReh;P8*nxnd$B&e{LW)1jp!%X6t1PD|Tbqn+ICh!~Yjl7N{2t?F;^|{t= zmtz6~akVK(OK7+mZcc66k^VS&y0c=`DXdg0j-r5ny`6haj#>NKwMsI*LhAtRTbeR5 ze3jw(x2;Tv6Ysy0v9!qSc)%okGIzsL`3Ij`j&WD1+H+Pm=Rsa8JY5bZCF$CG^27cs zDG8pgy@F+Cb(O$jy-sYtwRgi~W%|jH{u5#0ZZHyp}Camy&PML!DqNS-?tLVt9V1?YxHbLi}^<11d_p2SDz5+0= zX`d6f>os8k__8NDK~ZCO;rh$<%uA=>mFR5jWjB|_6DiFk*U?H^+Iy${S3Nj zC-(BzZtBm+ke^@bYl1gJES^;BUm!mvC=Tz?rX)_UX{%Z=z<=QQm$IswZ&7w6p%RY1 zF$P6gY4iwK3OIBEBETFz5bj*3UNmT4v$3o!&yX zv44&FAG5e0X6+E}Pp@*|_YjJ-5@#4lT?UE3c+cjIy?np+s0MLsclKO2(?!7c``Z$i zrMy=@Q#jy!oS#8u4sg6S5s{2;sEPl4&G*vju;|OvZR>Sk$QkR8cGb(8XvnnJ*U!7F z-<|e5)6unq-A+YL(+`l}NLNnxU)bqw9?p_MA4dfFK%P?glz*TTTAf)C-e+BVg0uE4 z33BWJ&K{&EWG3?GezMzZt?QVRa`7gI`>4snS!5*kHZ16!rI>w={mN^@)4-kzoEjVl z<9O!%+A2Rzul||khVCzSC7)!P1+6Z@&ieM>JevqJ&Yi$D^)FR5Piqn1dTVdh;4n<( z6IsRZ_*mB#OWO(@_A=YrZMxldp6zC1+wxG^Tq8x6_%YMV<4~L=2kpFN9O@H$cSE=P zj@3!@;vQ}1?i|ER0VV!h?^}WyXZLX znTr&`n)m#=>jVHq_r^B$-j5A$T+ZawJ5tq`SyC?x#$I>mQ+MoLYdahr-I)a;^&4BD zblFF1UV4Hr2#EFQJndZ$vnE}t0-?Q}-E~8>ws)y(+FNXvPoZ;BQ<+2Xc}is;y4@Ce z1l3U}u|Mj(xpO}M5q!Ic&}1gqZT072?oN}iD)gk=BGD*Gn4Hl`K-Mwki>T-Vq%Txf zmQy|Ni{hTYW*?X9bp!V-bWm0e@zG))&x5DsM7?KGw`M*?+cF@`&Z^Lp`Z$Vq)x4G} z!3UfK3UTW)i>Mv0TFv6uC!MV+aW{J2c#7N^EqV_vd@*n6y;DP4kHK|t%;6GFYSO*9 z>m&adnU4@wF&V60{!&w4qDnEyPqF;*JVG)w1QrrJVbY^iHsd=?-{#%Llgh*8h%aLm zfD{>u^HkugTfo?!8hX^Sdc2Yr>yAtD%3@>;;1Ts%ZH6BmADu0k6n)vGiN6p@t{3BX zd1d$YEn&#oJ1N$>!4!!#jZ)j6S$!a@$WI9>QyOteQh`>Hq&*?kUiBVEYa zlHJyl>h+7EdNAE|U@A_(9{rr@)}~S~*Q7GHm(b`8r-%rqMNg!pxXL%sbuvMHJgN5!CY@ zyM{$zF)(&Hdu&!yO@rqT$W?Bdjg*6uKWoyi27{pSUy}MfCUZ{<9P*U&HTYanyX)U|3(j$ zq>hhVYQ>}S)a?kd>f#5b*WxH|Jx@?Q3UeQS>NMmVUrU0Bld?-{(jd|ba(l&uW_u^l z;V!lt8?u=!92@sKRQQFu`M_}+F>>QB75L}J=A&@TL-gJxgZ9prYMBAq9n_$pse_}7 zxLb3Q=MWbizO#{5mDOB$CE7o_%)ix3gW0a{aiGI=Og!-q-isQ$9q*Hf>jVC1l-z4R zBximpUjR?5!%Vn(rnV}>*l802Z!o3Hu@r(G!`=8~~)XywFw@w_@kpbVe-|L_gAiV&N&$kTRI6SwQ zcdWA3_`1FN<+ic{g<7|}aN%XY5}}4C9ruWq5?gS}1{0Pxo7h=~KTQ8HW1WDRILbkt6VaRvR5Arl9x$`~pi*Rq?Z=MKgx>?2BEvkjxO328t0J%)IK zrHz|!P<;0WEyzn!>Vh0thZrv(F4rR&eX1KwU);y6a${aZT2^HFX75iN)3-gneOyP;ynO*HYE93Zk2W zOF*Qmevp(o&kS@689^J-S$J^?^puW6d+~gtRgSwwy-NPf3V|uZl=>WELmHFM$9K%z z*ONl17wd*C_0>aFrCbup8E6g7bR&{JmT4AGkvlFAk}0r5=wUCcj!px-T&rKZ3VTMLDQd7F&@Luk2wy zbYNQjx*Re|4seV`QEbkS;Y)ekXdmk58!wlBg~8n@wvnwbn~_AL7|c8gsp9&AAo zw(UWk@|BFuNU2k)J|%TJ_0YoSgZ$S|QX;FKIm^`y+f6@{a@QO~>Y5fDr5L>MHcPgm zAGx+nsk`lbd&D$6GY(lY(Ep^H#$4oN!WqDGhnp<>Bf1`Mr~ci~Z6l#%6<;x7m*rr{ zaJ1d)TPs8Hmli?t1WP+YrneEyn%iF)!kTx*IQ(Gi$}^so^5sv} zi5F!RbB{)H8fDYy2fbg1mjU|504pS$d+F-^^g9BjD9Yma-DA(E$A_BS@$Ap~d`g)v zb^^R~pEPu9q~5DP>1@zsvM~^h}URIPqC3i_L4<}w?boKen%Q( z+#Otd5n`ofzFNKdyPhLVrNtnu33Sj z*G!xEh%_L@=(s0HeBZO~rBmTn6?b@0X`)z@D@NTHpD1)M=gWHE9)wPQWeANy<=sYA z6r8mtU(3iw$hED1BEuZEVp_e7>+QEwb|_2fpK?;5q%Sz(Hn$u0{QDPiiw8bB3#k1}-x`dK^H zCv_D$YHjU4=xA(KGm(O-zj1;5wyLxC{g6iG4*P8sX!a2U{JqhKx6XJ-0w^8N z^J+%hxww!QQxagTubYOl=Y%3BJTJA)fR?s*`*hCWLo>y_fVG)q2`crwd`q?=3AD3W zc6wtVt$8pl)j&;s43}{98x#&nLfY>k$@>yM{-IFnV{BS zGoA#cxQ7Rahn3~!)>AbHmx=|SKYz~6T|3@g=rlo(7UeP{~W7dOQ9$j_QtU&~1%$@giA-0kfJ+0D5uJ#M4ulo85<&mUd{!{o)o+qJr!0 z`*3k)d`m1#Y{Sa$Z~nTW+DO5$D+t}ufx9FMsbV`gIB0He*7u8Iv0$08xy`NyeF9Z_ zb5o3iRuUR=y^dYAv>EXGcXqW zKpy7OBYf+?(zuSX>$PHKTH#f)?glCQP5qV`p6?2JUuO&n{G5J?^T~oFy8qF#yPj>O zOx;A~A)yaZ?_QGy-0XGNN4*=Va;z7A~r2bwPr0}e2oMX;^B$yuvO7X`3Mlk+sG@DDgTUdmoe*a?mJ9E`8jfB!sQqE#qKKwkRs=Cj%dE? zRle_A!mSX%1d-yKIxL|OH8ny$Vr5j+)T}Hl?|4?RpP^~nuDZU#CkqX11v-}YGmLO3 z`*=MT&-9}*%li8IiO#dJI#2#O!bN;9UWF$ow(p@K?-KoV-*N2dto?;vaU26WV(`x6 zV>dau_Rr6fj@OJwM@IMr1v|UQ`;}|L=uK|0-%-PIa&b|AvQv69Q1}Ky8VSpoEMh83 zmlPBizLb72Fg)DS#g@yZSGh4!Ra8~wYHhvIn=D-05vO1-1bIKTDh{c}q5n7-sdQ$Bs-J?R;UjEr1cvoNfD z`+Cp-bDt5It#NVJx$L=Z@(hxj9(<^CMYOIMTuxRNynRyrEVrl#=2Q8e#l~Cb79u!@ zGTkVeXXY=ke+Wx2QwFOlD{qWfgr$z;14x{ko0~>Z^YX}y5E>G!D~Wl0P46F!^P2f4 zDgM$#m7S}L3wm!%eEXsvP3a>=bp`(ShUrFy{nLIwze4d3J@6zfnw17kW0U+_T>l+^ zE^|SrcmKpE=CbqJWv+iqv?9&bs;B1=sAxw>BCVHjwnz#8s}K%+3Ljc4zjb-C{`3#U zTwD@`U*>4f%QOFf=Z^q%ZbB;#@?=kBB0Q#ir!^r)M5edz`5iVSZc%M(UbY*%3)*3DSvcCLo=}mIfEFTGT0Uwr%!GTsd&-DxCA%t7rYkS!(`DTMJ=r#$iPJvwGh$7Nh zvonJQk1PCOfY&LLh7lQlj1RHjiv?R-@G7(ju2^VN6EJ4cd8X^t|Jbken2KW!4-efa zCOncQmlSL=;*)gz()dc*>FglUgzG9Z;Ue%omyc_QXf3m?olm382jqO-wvlntKb*VQm^h8g4d~a#kmGLLe1@|#EQxS znnnfEID(*~UC%$-8#ZSW^>>k+1NANoavDq|D8s~pTumT+MyzA># zti>=Q`|NYxBiV-m4qp=#R@4jZnc)Ss+~oJ+rje=j+KfPC#Y0xRUZ>jz8!yW3gqP#j zWh_%tOkey=w?3J^=(Hrcyrde6cDiPq z>=xl?5-pndNR4X;3<#HAG?&#ZF~ZAgS?&;1U^I<=^6+$sOs91NHep2M??)xTo*1I% z30sfsve*rlHhnfXEcPCGe@}s28yV#%KyvQH}RivJMT`XRk&q;gw(yReYZQ=9P?Rr<2R!oto@g}=dQFjX3$jT8Oi zxE@Uc1c(oaY#(NKGBVV)@e@{(kk6l43{@0t#!5{A6ZZA zr&IQA^3_)dXj)6C;B;U>%`j6opO!?N`N6)W#+W8a#no=j+pi4&vT-vic}4Yh*Y1^v zwuR-w)bJKfdEs_bH3(&vD0;~B@UX`7=gsu$vAux#(9_lR@bu(1sDXEyxaHn)q7Z#c zCrkVpG6#9cra`hK&phll>@(~?96J1=b~yN}CnAkRX6(RHxjO*8zwaa`htsfnTv1iE z{!on!yI<0$H?aZv1ogJ7RjxB>AKP1+RMh9Iw@1vB}JRyOA93OUcl{ zMG@7X4q~Qe;_@Z~jk4tej-lB-yW`IFCVB6GXG8{-R#`sZ3)329-b++4=WeJXFVZ#V za_&0fC?N^R+C=lE9lG7uoR>kKJeB~ytpk0EpWaQl57)$~Yt3a+v`(sP=}qe83XZB|E)p))J~3t`4DM@sIAle< zo=dSaDk+9*3W+Wl`Tlz-9IV7yRW1eeh09{k9p*okwi|-=AnIC@W4=-`rUHa}1vhEf zaPnSV)K-mXW0Z4-H&MVsm`MqKQvjXHvkQ2XKp@= zmj_jVGa{fFHT_p*lAtRm-*DeE^5lvv{%zKX!h?c>PHv7pnP2#qUI4Ww zY5L}O`d%DP*b&oYUk z8+gio{rXj?UrqAAu>J}f_*g5<0lV-U9Dqt^k2LtM(8dhl5*oyw|5{%MiWC2d^;eiP zuI{dCnf3btlX)dPq$m>yhtj;fFeB4$0PTmz#stO0dI77@9T`dF0fO+p1|Th2F^3_S z%YE#6OdXXtb9(9O$Z`BF(~q4dZEbA;${uY_RGD^>`%E#93=hNQnPlbU+@q<=XEFe% zaMJhctzx=l`b)+P%Wej0|HBkHk2xv;-##NC&P)daw&FZBoO<>3Sqaf0BJ;tZb#? zhv5RnbEs*+73ps-x_=-@50Gtm5TK}^lUZNyT_i@Wx_ zE4-j5iGL_hTU#5~5Uz4F;IEREn_GB>Oc;datzs}E0wDco&z{{h?I-*ODSoRcT}^~E zR!-5p=uHu&CdgOG@<#)UAuKHHuEB}Co=#z&`V%|8GTvFGp43FM!}>2XrIm#w${UA5f6e7@WNde!w5gaxthdM}*=oISEBv z(rE)1C%mpWOHE)fhq5EenR}(u3pM)ua7RO)e

(&}}Y=-sgBVBdXGFrnd|& z=zYo?!68}Q;`T^UJmw}#N7&)J?FeA)^uM#Ofr)#Mf``L{){tldOk48~5 zKR0M@oM0Gv8VWWysnN8d9*=Fr-q%JLO?R9N6c=ZxON~WI3L|Ud6OUw>tE}~qB945_ z2dsnxUMMSC97zBTPq}?hZrLcV^d@)7Y?cApu@D7OS0AFON$xbcz^p)UTp8fTjqgjI zqVA-V84`x&!jrKcMnGul41&3O4*lrM(SX3qC)VrFZmAyqNUWowdhG5{KRlekUSUoO|> zrX7~eCUq_0^x#;MS7x(|=S1xcH9j@s29mQbsF(sp+EOigmrORVGX$EFn3!JSc(|dH z5*ra7-e2bw|4GT@-S4ixoEU6L-!rZ9RqEN)28SKUU$Y_S(j^kRB#amX@0&;ocD(ZC zXfIzu5A^WYZp|>n^^Wp5v1zGk zS8T(@K@q%cUT_Huhp7M4(X?j~F!deLj5FRxQ>&}yZzv=M$wltv&9{Cika`r-kg$u* zGX0ce=2~t57i5uj;3fw{JOTpmISRjr8mn>*BbO2kHjaGlDwzOn!iE{?*Lw*bL6V%D zotHjV6%^RCN7DWkB3g}I_dWH#iHiymJr$&G4@4QFxVx9zmVX!@9E$=*Qi1$eG$0Qw zIRi@@P8I{3kWivoA=4zcM_Q5mZiuz`UTQD$p$}CquP;78m$y@`Z8s(MgEwmJpi&81 z@P_qD3Y7Y7VG5MVnB9Ifcm44@EwU(8rX{l92o!#R3pF5 zQobjRG8J&rb$i+dpyu7;FZK0w2rx}<=GgCITmWN)t|ZU|;czv_~zcDc~ zGX8BF15E2M--1`4@d?=AFy*22QJ_MQp-jBIY5@is`ut2p{&B`lXBU@2N%!6B8ckso z05|33Svfd-{7-IrfSO?7x0@F6JhZm5;(+8#^78W!?OyQDcr_Qv70mR1TrR^856E`Z1ERV7uGu(X?Oam*Kcsh2ds?$Et^$D4M(XGt@d z*OwRP&d$yNlU*$z1iKjd`SWroYifQ`k?(SX+4#gnE+khe7gl8Ot*vhToAbIBPlAXK z#_jp@yXSb9_6h?-gE2!7%q7YN42w6yxa-~adiYa)FHS~BwT`NiX@y;Y`8wL)uRR#m zOZ7gaY`~5Py|n~b;pUmutk$K6m|B2L{jhM3iQYQA*_mxj^X&X%9%o+O;EE(ih4p!C zR{S{J7;BCK^Ai#h7ByUW__<;M%LuIWV}ocx9b3A(O>G}f^f*} zHU@!a2_jj6zhHpA6aBwAzM#CkIBHP+B+z&_t9h463h?qc4-ufMR9abCDeSt{|I)$ll7afKlkeW+5UbBVoDjp5!yf3%qi5vV9}i*D9@i)eoOm*Kb8VZmzBj#hXvBE{`JeU-W0)T3ct+?&wn6! z0+f${Ko%j;5>&_j9txz#-d|C0wXT2g_pfXF`}_YCAwbCg<2C|fV&JxEpR-MyiOOB+ zlf1&hWw(!-ir|?B--f!nWSnLa_P3~6ytnAx&8itXF|T;mD>WN_;Dnt~U!Ss|pv8t% z2Aq&O4A#Ezl7=f0KaIzYD$NTz1Hdi-zUXrMa&w>u0mo&6K6c-I-P#wSIcZRqPLq#^ zDk4nS1Cka45`-eR(!6dI2=nlidLG%PnBL}slhY0ZQ+s-PdK~HCGT#z1OD3bK1&-O> z-32xho+Ulq{n-*u4p=0GTZFMbC+MY>R9_!}X1(~|PNcZahoq#W00;o=W5Zw+GiHAf z;K&<*6d>&^Pg2^=Ei42*4>tgje{vuVSPPuhuYA$+EvN5C_ZQ29f0w~t*xGJQRy)c? z(N#E1UMtQQ^*n@9smEQc8(q#9_M{t+l$4YJ@aTPZ2vpYsF4HnsE!H|M?v$qiLAmqJ z)X3*#slOlU>guYa|N0aVqJtmAjwT&}MBV~``k2pL!yHJ9uUB=N+1vlS=lc7}-s6k2 bOJe2AJDa5o-*SP!d4m*WRHO?fU%dMdwO@vg literal 0 HcmV?d00001 From 1090b2b6eeebd68202e25691ac2fa3c64b1363c3 Mon Sep 17 00:00:00 2001 From: pawkakol1 Date: Tue, 11 Oct 2022 21:55:41 +0200 Subject: [PATCH 3/3] Description and keys assignment added to README file --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d6c7f52..758fda4 100644 --- a/README.md +++ b/README.md @@ -1450,6 +1450,8 @@ buttons:

Android custom keyboard (Design and codes by pawkakol1): (Click to expand!) + It isn't template of any real remote. It is custom keyboard works with any media box with Android OS with ADB server (eg. Mibox). It works with standard search field of applications like YouTube, Netflix, HBO Max, etc. + ```