diff --git a/README.md b/README.md index 8fd708da..e2da6142 100644 --- a/README.md +++ b/README.md @@ -186,7 +186,7 @@ All kinds of contributions are welcome. These include: ### How to contribute your own installation configurations -If you want to use the tool for a non-supported smartphone, the fastest way is to adapt an [existing config file](https://github.com/openandroidinstaller-dev/openandroidinstaller/tree/main/openandroidinstaller/assets/configs). The file should be named after the `device code` of your device. This is in general the output by `adb shell getprop | grep ro.product.device` when the devices is connected to the computer. You can also get the device code by connecting the device to the computer and run OpenAndroidInstaller to detect the device. +If you want to use the tool for a non-supported smartphone, the fastest way is to adapt an [existing config file](https://github.com/openandroidinstaller-dev/openandroidinstaller/tree/main/openandroidinstaller/assets/configs). The file should be named after the official `device code` of the device. Add the code output by `adb shell getprop | grep ro.product.device` (when the devices is connected to the computer) as well as the official device code to the `supported_device_codes` list in the config. You can also get the device code by connecting the device to the computer and run OpenAndroidInstaller to detect the device. **To test your config file with the executable** without using the developer setup, place it in the same directory as the executable. There it will be detected by name. After you created a config file and it works fine, you can open a pull request to make the file available to other users. Please also add the device to the supported devices table above. @@ -197,8 +197,9 @@ A config file consists of two parts. The first part are some metadata about the ##### How to write Metadata Every config file should have metadata with the following fields: - `maintainer`: str; Maintainer and author of the config file. -- `devicename`: str; Name of the device. -- `devicecode`: str; The official device code. +- `device_name`: str; Name of the device. +- `device_code`: str; The official device code. +- `supported_device_codes`: List[str]; A list of supported device codes for the config. The config will be loaded based on this field. - `twrp-link`: [OPTIONAL] str; name of the corresponding twrp page. In addition to these metadata, every config can have optional requirements. If these are set, the user is asked to check if they are meet. diff --git a/openandroidinstaller/assets/configs/FP2.yaml b/openandroidinstaller/assets/configs/FP2.yaml index 3f24809a..c00c70dc 100644 --- a/openandroidinstaller/assets/configs/FP2.yaml +++ b/openandroidinstaller/assets/configs/FP2.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Fairphone 2 - devicecode: FP2 + device_name: Fairphone 2 + device_code: FP2 + supported_device_codes: + - FP2 steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/FP3.yaml b/openandroidinstaller/assets/configs/FP3.yaml index 417958e7..19bdb5a5 100644 --- a/openandroidinstaller/assets/configs/FP3.yaml +++ b/openandroidinstaller/assets/configs/FP3.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Fairphone 3 - devicecode: FP3 + device_name: Fairphone 3 + device_code: FP3 + supported_device_codes: + - FP3 steps: unlock_bootloader: - type: link_button_with_confirm diff --git a/openandroidinstaller/assets/configs/FP4.yaml b/openandroidinstaller/assets/configs/FP4.yaml index 903b501d..fafeb33a 100644 --- a/openandroidinstaller/assets/configs/FP4.yaml +++ b/openandroidinstaller/assets/configs/FP4.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Fairphone 4 - devicecode: FP4 + device_name: Fairphone 4 + device_code: FP4 + supported_device_codes: + - FP4 steps: unlock_bootloader: - type: link_button_with_confirm diff --git a/openandroidinstaller/assets/configs/a3y17lte.yaml b/openandroidinstaller/assets/configs/a3y17lte.yaml index 1814a5a0..e0ec7461 100644 --- a/openandroidinstaller/assets/configs/a3y17lte.yaml +++ b/openandroidinstaller/assets/configs/a3y17lte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy A3 (2017) - devicecode: a3y17lte + device_name: Samsung Galaxy A3 (2017) + device_code: a3y17lte + supported_device_codes: + - a3y17lte steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/a5xelte.yaml b/openandroidinstaller/assets/configs/a5xelte.yaml index 64ebf4b8..06b0769c 100644 --- a/openandroidinstaller/assets/configs/a5xelte.yaml +++ b/openandroidinstaller/assets/configs/a5xelte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy A5 (2016) - devicecode: a5xelte + device_name: Samsung Galaxy A5 (2016) + device_code: a5xelte + supported_device_codes: + - a5xelte steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/a72q.yaml b/openandroidinstaller/assets/configs/a72q.yaml index 97d4da5d..87721275 100644 --- a/openandroidinstaller/assets/configs/a72q.yaml +++ b/openandroidinstaller/assets/configs/a72q.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy A72 - devicecode: a72q + device_name: Samsung Galaxy A72 + device_code: a72q + supported_device_codes: + - a72q steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/a7xelte.yaml b/openandroidinstaller/assets/configs/a7xelte.yaml index 3c570247..856ba6b6 100644 --- a/openandroidinstaller/assets/configs/a7xelte.yaml +++ b/openandroidinstaller/assets/configs/a7xelte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy A7 (2016) - devicecode: a7xelte + device_name: Samsung Galaxy A7 (2016) + device_code: a7xelte + supported_device_codes: + - a7xelte steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/akari.yaml b/openandroidinstaller/assets/configs/akari.yaml index b9e40662..e5bf40d6 100644 --- a/openandroidinstaller/assets/configs/akari.yaml +++ b/openandroidinstaller/assets/configs/akari.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Sony Xperia XZ2 - devicecode: akari + device_name: Sony Xperia XZ2 + device_code: akari + supported_device_codes: + - akari requirements: android: 10 steps: diff --git a/openandroidinstaller/assets/configs/akatsuki.yaml b/openandroidinstaller/assets/configs/akatsuki.yaml index ddd02f55..bc825a25 100644 --- a/openandroidinstaller/assets/configs/akatsuki.yaml +++ b/openandroidinstaller/assets/configs/akatsuki.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Sony Xperia XZ3 - devicecode: akatsuki + device_name: Sony Xperia XZ3 + device_code: akatsuki + supported_device_codes: + - akatsuki requirements: android: 10 steps: diff --git a/openandroidinstaller/assets/configs/avicii.yaml b/openandroidinstaller/assets/configs/avicii.yaml index f251610b..7e2e2cae 100644 --- a/openandroidinstaller/assets/configs/avicii.yaml +++ b/openandroidinstaller/assets/configs/avicii.yaml @@ -1,7 +1,10 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: OnePlus Nord - devicecode: avicii + device_name: OnePlus Nord + device_code: avicii + supported_device_codes: + - avicii + - Nord requirements: android: 10 steps: diff --git a/openandroidinstaller/assets/configs/barbet.yaml b/openandroidinstaller/assets/configs/barbet.yaml index e2d4a889..cef8f74a 100644 --- a/openandroidinstaller/assets/configs/barbet.yaml +++ b/openandroidinstaller/assets/configs/barbet.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Pixel 5a - devicecode: barbet + device_name: Pixel 5a + device_code: barbet + supported_device_codes: + - barbet requirements: android: 12.1.0 steps: diff --git a/openandroidinstaller/assets/configs/beyond0lte.yaml b/openandroidinstaller/assets/configs/beyond0lte.yaml index 3ccdbc7e..e5c6be64 100644 --- a/openandroidinstaller/assets/configs/beyond0lte.yaml +++ b/openandroidinstaller/assets/configs/beyond0lte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy S10e - devicecode: beyond0lte + device_name: Samsung Galaxy S10e + device_code: beyond0lte + supported_device_codes: + - beyond0lte requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/beyond1lte.yaml b/openandroidinstaller/assets/configs/beyond1lte.yaml index dfc8a228..b915be41 100644 --- a/openandroidinstaller/assets/configs/beyond1lte.yaml +++ b/openandroidinstaller/assets/configs/beyond1lte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy S10 - devicecode: beyond1lte + device_name: Samsung Galaxy S10 + device_code: beyond1lte + supported_device_codes: + - beyond1lte requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/beyond2lte.yaml b/openandroidinstaller/assets/configs/beyond2lte.yaml index 62458d98..7df64b5e 100644 --- a/openandroidinstaller/assets/configs/beyond2lte.yaml +++ b/openandroidinstaller/assets/configs/beyond2lte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy S10+ - devicecode: beyond2lte + device_name: Samsung Galaxy S10+ + device_code: beyond2lte + supported_device_codes: + - beyond2lte requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/blueline.yaml b/openandroidinstaller/assets/configs/blueline.yaml index 8c99603f..ffb418a3 100644 --- a/openandroidinstaller/assets/configs/blueline.yaml +++ b/openandroidinstaller/assets/configs/blueline.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Google Pixel 3 - devicecode: blueline + device_name: Google Pixel 3 + device_code: blueline + supported_device_codes: + - blueline requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/bonito.yaml b/openandroidinstaller/assets/configs/bonito.yaml index ed771862..219c0daa 100644 --- a/openandroidinstaller/assets/configs/bonito.yaml +++ b/openandroidinstaller/assets/configs/bonito.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Google Pixel 3a XL - devicecode: bonito + device_name: Google Pixel 3a XL + device_code: bonito + supported_device_codes: + - bonito requirements: android: 12.1.0 steps: diff --git a/openandroidinstaller/assets/configs/cedric.yaml b/openandroidinstaller/assets/configs/cedric.yaml index 7a9195cc..16311c8c 100644 --- a/openandroidinstaller/assets/configs/cedric.yaml +++ b/openandroidinstaller/assets/configs/cedric.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Motorola Moto G5 - devicecode: cedric + device_name: Motorola Moto G5 + device_code: cedric + supported_device_codes: + - cedric steps: unlock_bootloader: - type: call_button diff --git a/openandroidinstaller/assets/configs/cheeseburger.yaml b/openandroidinstaller/assets/configs/cheeseburger.yaml index 55375809..832ea06f 100644 --- a/openandroidinstaller/assets/configs/cheeseburger.yaml +++ b/openandroidinstaller/assets/configs/cheeseburger.yaml @@ -1,7 +1,10 @@ metadata: maintainer: SirRGB - devicename: OnePlus 5 - devicecode: cheeseburger + device_name: OnePlus 5 + device_code: cheeseburger + supported_device_codes: + - cheeseburger + - OnePlus5 twrp-link: cheeseburger_dumpling steps: unlock_bootloader: diff --git a/openandroidinstaller/assets/configs/coral.yaml b/openandroidinstaller/assets/configs/coral.yaml index 476748dd..4a7f194b 100644 --- a/openandroidinstaller/assets/configs/coral.yaml +++ b/openandroidinstaller/assets/configs/coral.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Google Pixel 4 XL - devicecode: coral + device_name: Google Pixel 4 XL + device_code: coral + supported_device_codes: + - coral requirements: android: 13 steps: diff --git a/openandroidinstaller/assets/configs/crosshatch.yaml b/openandroidinstaller/assets/configs/crosshatch.yaml index 33ee81f5..e42609a9 100644 --- a/openandroidinstaller/assets/configs/crosshatch.yaml +++ b/openandroidinstaller/assets/configs/crosshatch.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Google Pixel 3 XL - devicecode: crosshatch + device_name: Google Pixel 3 XL + device_code: crosshatch + supported_device_codes: + - crosshatch requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/crownlte.yaml b/openandroidinstaller/assets/configs/crownlte.yaml index fe857f0b..19dfbe9b 100644 --- a/openandroidinstaller/assets/configs/crownlte.yaml +++ b/openandroidinstaller/assets/configs/crownlte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy Note 9 - devicecode: crownlte + device_name: Samsung Galaxy Note 9 + device_code: crownlte + supported_device_codes: + - crownlte requirements: android: 10 steps: diff --git a/openandroidinstaller/assets/configs/d1.yaml b/openandroidinstaller/assets/configs/d1.yaml index 13a34932..e28a3906 100644 --- a/openandroidinstaller/assets/configs/d1.yaml +++ b/openandroidinstaller/assets/configs/d1.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy Note 10 - devicecode: d1 + device_name: Samsung Galaxy Note 10 + device_code: d1 + supported_device_codes: + - d1 requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/d2s.yaml b/openandroidinstaller/assets/configs/d2s.yaml index fce89b6b..3e0b705f 100644 --- a/openandroidinstaller/assets/configs/d2s.yaml +++ b/openandroidinstaller/assets/configs/d2s.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy Note 10+ - devicecode: d2s + device_name: Samsung Galaxy Note 10+ + device_code: d2s + supported_device_codes: + - d2s requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/dre.yaml b/openandroidinstaller/assets/configs/dre.yaml index 604562b6..fa04addf 100644 --- a/openandroidinstaller/assets/configs/dre.yaml +++ b/openandroidinstaller/assets/configs/dre.yaml @@ -1,7 +1,10 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: OnePlus Nord N200 - devicecode: dre + device_name: OnePlus Nord N200 + device_code: dre + supported_device_codes: + - dre + - NordN200 requirements: android: 11 steps: diff --git a/openandroidinstaller/assets/configs/dumpling.yaml b/openandroidinstaller/assets/configs/dumpling.yaml index a96e1462..329280cf 100644 --- a/openandroidinstaller/assets/configs/dumpling.yaml +++ b/openandroidinstaller/assets/configs/dumpling.yaml @@ -1,7 +1,10 @@ metadata: maintainer: SirRGB - devicename: OnePlus 5T - devicecode: dumpling + device_name: OnePlus 5T + device_code: dumpling + supported_device_codes: + - dumpling + - OnePlus5T twrp-link: cheeseburger_dumpling steps: unlock_bootloader: diff --git a/openandroidinstaller/assets/configs/enchilada.yaml b/openandroidinstaller/assets/configs/enchilada.yaml index a40742b9..5456fd84 100644 --- a/openandroidinstaller/assets/configs/enchilada.yaml +++ b/openandroidinstaller/assets/configs/enchilada.yaml @@ -1,7 +1,10 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: OnePlus 6 - devicecode: enchilada + device_name: OnePlus 6 + device_code: enchilada + supported_device_codes: + - enchilada + - OnePlus6 requirements: android: 11 steps: diff --git a/openandroidinstaller/assets/configs/evert.yaml b/openandroidinstaller/assets/configs/evert.yaml index 3acbc970..24a9e602 100644 --- a/openandroidinstaller/assets/configs/evert.yaml +++ b/openandroidinstaller/assets/configs/evert.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Motorola moto g6 plus - devicecode: evert + device_name: Motorola moto g6 plus + device_code: evert + supported_device_codes: + - evert steps: unlock_bootloader: - type: call_button diff --git a/openandroidinstaller/assets/configs/fajita.yaml b/openandroidinstaller/assets/configs/fajita.yaml index e534a61c..9eb558d6 100644 --- a/openandroidinstaller/assets/configs/fajita.yaml +++ b/openandroidinstaller/assets/configs/fajita.yaml @@ -1,7 +1,10 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: OnePlus 6T - devicecode: fajita + device_name: OnePlus 6T + device_code: fajita + supported_device_codes: + - fajita + - OnePlus6T requirements: android: 11 steps: diff --git a/openandroidinstaller/assets/configs/flame.yaml b/openandroidinstaller/assets/configs/flame.yaml index 8947ea75..4e2e38b6 100644 --- a/openandroidinstaller/assets/configs/flame.yaml +++ b/openandroidinstaller/assets/configs/flame.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Pixel 4 - devicecode: flame + device_name: Pixel 4 + device_code: flame + supported_device_codes: + - flame requirements: android: 13 steps: diff --git a/openandroidinstaller/assets/configs/greatlte.yaml b/openandroidinstaller/assets/configs/greatlte.yaml index e2ad394a..c5464fa4 100644 --- a/openandroidinstaller/assets/configs/greatlte.yaml +++ b/openandroidinstaller/assets/configs/greatlte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Michel Memeteau (freechelmi) - devicename: Samsung Galaxy note 8 - devicecode: greatlte + device_name: Samsung Galaxy note 8 + device_code: greatlte + supported_device_codes: + - greatlte steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/griffin.yaml b/openandroidinstaller/assets/configs/griffin.yaml index 0c95d675..b4fb3fb3 100644 --- a/openandroidinstaller/assets/configs/griffin.yaml +++ b/openandroidinstaller/assets/configs/griffin.yaml @@ -1,7 +1,9 @@ metadata: maintainer: SirRGB - devicename: Motorola Moto Z - devicecode: griffin + device_name: Motorola Moto Z + device_code: griffin + supported_device_codes: + - griffin steps: unlock_bootloader: - type: call_button diff --git a/openandroidinstaller/assets/configs/guacamole.yaml b/openandroidinstaller/assets/configs/guacamole.yaml index 1b2c4faf..e6f54988 100644 --- a/openandroidinstaller/assets/configs/guacamole.yaml +++ b/openandroidinstaller/assets/configs/guacamole.yaml @@ -1,7 +1,10 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: OnePlus 7 Pro - devicecode: guacamole + device_name: OnePlus 7 Pro + device_code: guacamole + supported_device_codes: + - guacamole + - OnePlus7Pro requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/guacamoleb.yaml b/openandroidinstaller/assets/configs/guacamoleb.yaml index 0c06236a..28c93690 100644 --- a/openandroidinstaller/assets/configs/guacamoleb.yaml +++ b/openandroidinstaller/assets/configs/guacamoleb.yaml @@ -1,7 +1,10 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: OnePlus 7 - devicecode: guacamoleb + device_name: OnePlus 7 + device_code: guacamoleb + supported_device_codes: + - guacamoleb + - OnePlus7 requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/hero2lte.yaml b/openandroidinstaller/assets/configs/hero2lte.yaml index 3246e195..44c0101c 100644 --- a/openandroidinstaller/assets/configs/hero2lte.yaml +++ b/openandroidinstaller/assets/configs/hero2lte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy S7 Edge - devicecode: hero2lte + device_name: Samsung Galaxy S7 Edge + device_code: hero2lte + supported_device_codes: + - hero2lte steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/herolte.yaml b/openandroidinstaller/assets/configs/herolte.yaml index 73d196cd..4e102e61 100644 --- a/openandroidinstaller/assets/configs/herolte.yaml +++ b/openandroidinstaller/assets/configs/herolte.yaml @@ -1,7 +1,10 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy S7 - devicecode: herolte + device_name: Samsung Galaxy S7 + device_code: herolte + supported_device_codes: + - herolte + - heroltexx steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/heroltexx.yaml b/openandroidinstaller/assets/configs/heroltexx.yaml deleted file mode 100644 index 73d196cd..00000000 --- a/openandroidinstaller/assets/configs/heroltexx.yaml +++ /dev/null @@ -1,22 +0,0 @@ -metadata: - maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy S7 - devicecode: herolte -steps: - unlock_bootloader: - boot_recovery: - - type: call_button - content: > - As a first step, you need to boot into the bootloader. A bootloader is the piece of software, - that tells your phone who to start and run an operating system (like Android). Your device should be turned on. - Then press 'Confirm and run' to reboot into the bootloader. Continue once it's done. - command: adb_reboot_download - - type: call_button - content: In this step, you need to boot a custom recovery on your device. Press 'Confirm and run' to start the process. Confirm afterwards to continue. - command: heimdall_flash_recovery - - type: confirm_button - img: samsung-buttons.png - content: > - Unplug the USB cable from your device. Then manually reboot into recovery by pressing the *Volume Down* + *Power buttons* for 8~10 seconds - until the screen turns black & release the buttons immediately when it does, then boot to recovery with the device powered off, - hold *Volume Up* + *Home* + *Power button*. \ No newline at end of file diff --git a/openandroidinstaller/assets/configs/hltetmo.yaml b/openandroidinstaller/assets/configs/hltetmo.yaml index 087f7aab..57776fa1 100644 --- a/openandroidinstaller/assets/configs/hltetmo.yaml +++ b/openandroidinstaller/assets/configs/hltetmo.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy Note 3 LTE (N900T/V/W8) - devicecode: hltetmo + device_name: Samsung Galaxy Note 3 LTE (N900T/V/W8) + device_code: hltetmo + supported_device_codes: + - hltetmo steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/hotdog.yaml b/openandroidinstaller/assets/configs/hotdog.yaml index ec37755c..cbe7c5bf 100644 --- a/openandroidinstaller/assets/configs/hotdog.yaml +++ b/openandroidinstaller/assets/configs/hotdog.yaml @@ -1,7 +1,10 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: OnePlus 7T Pro - devicecode: hotdog + device_name: OnePlus 7T Pro + device_code: hotdog + supported_device_codes: + - hotdog + - OnePlus7TPro requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/hotdogb.yaml b/openandroidinstaller/assets/configs/hotdogb.yaml index 8748a482..555b5c0a 100644 --- a/openandroidinstaller/assets/configs/hotdogb.yaml +++ b/openandroidinstaller/assets/configs/hotdogb.yaml @@ -1,7 +1,10 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: OnePlus 7T - devicecode: hotdogb + device_name: OnePlus 7T + device_code: hotdogb + supported_device_codes: + - hotdogb + - OnePlus7T requirements: android: 12 steps: diff --git a/openandroidinstaller/assets/configs/j7elte.yaml b/openandroidinstaller/assets/configs/j7elte.yaml index d4944f3a..fa63cece 100644 --- a/openandroidinstaller/assets/configs/j7elte.yaml +++ b/openandroidinstaller/assets/configs/j7elte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy J7 (2015) - devicecode: j7elte + device_name: Samsung Galaxy J7 (2015) + device_code: j7elte + supported_device_codes: + - j7elte steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/kiev.yaml b/openandroidinstaller/assets/configs/kiev.yaml index 05de4fdc..743ae743 100644 --- a/openandroidinstaller/assets/configs/kiev.yaml +++ b/openandroidinstaller/assets/configs/kiev.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Motorola moto g 5G / one 5G ace - devicecode: kiev + device_name: Motorola moto g 5G / one 5G ace + device_code: kiev + supported_device_codes: + - kiev steps: unlock_bootloader: - type: call_button diff --git a/openandroidinstaller/assets/configs/kirin.yaml b/openandroidinstaller/assets/configs/kirin.yaml index 27f5ae6c..626df4f4 100644 --- a/openandroidinstaller/assets/configs/kirin.yaml +++ b/openandroidinstaller/assets/configs/kirin.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Sony Xperia 10 - devicecode: kirin + device_name: Sony Xperia 10 + device_code: kirin + supported_device_codes: + - kirin steps: unlock_bootloader: - type: confirm_button diff --git a/openandroidinstaller/assets/configs/mermaid.yaml b/openandroidinstaller/assets/configs/mermaid.yaml index fc4e4b25..3660cb4f 100644 --- a/openandroidinstaller/assets/configs/mermaid.yaml +++ b/openandroidinstaller/assets/configs/mermaid.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Sony Xperia 10 Plus - devicecode: mermaid + device_name: Sony Xperia 10 Plus + device_code: mermaid + supported_device_codes: + - mermaid steps: unlock_bootloader: - type: confirm_button diff --git a/openandroidinstaller/assets/configs/nairo.yaml b/openandroidinstaller/assets/configs/nairo.yaml index 7d77d1d5..422c40fd 100644 --- a/openandroidinstaller/assets/configs/nairo.yaml +++ b/openandroidinstaller/assets/configs/nairo.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Motorola moto g 5G plus / one 5G - devicecode: nairo + device_name: Motorola moto g 5G plus / one 5G + device_code: nairo + supported_device_codes: + - nairo steps: unlock_bootloader: - type: call_button diff --git a/openandroidinstaller/assets/configs/ocean.yaml b/openandroidinstaller/assets/configs/ocean.yaml index bc575c80..7c6c9a7c 100644 --- a/openandroidinstaller/assets/configs/ocean.yaml +++ b/openandroidinstaller/assets/configs/ocean.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Motorola Moto G7 power - devicecode: ocean + device_name: Motorola Moto G7 power + device_code: ocean + supported_device_codes: + - ocean steps: unlock_bootloader: - type: call_button diff --git a/openandroidinstaller/assets/configs/pioneer.yaml b/openandroidinstaller/assets/configs/pioneer.yaml index cc0222be..7480b263 100644 --- a/openandroidinstaller/assets/configs/pioneer.yaml +++ b/openandroidinstaller/assets/configs/pioneer.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Sony Xperia XA2 - devicecode: pioneer + device_name: Sony Xperia XA2 + device_code: pioneer + supported_device_codes: + - pioneer requirements: android: 9 steps: diff --git a/openandroidinstaller/assets/configs/racer.yaml b/openandroidinstaller/assets/configs/racer.yaml index 8fb83dbc..f67ae11c 100644 --- a/openandroidinstaller/assets/configs/racer.yaml +++ b/openandroidinstaller/assets/configs/racer.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Motorola edge - devicecode: racer + device_name: Motorola edge + device_code: racer + supported_device_codes: + - racer steps: unlock_bootloader: - type: call_button diff --git a/openandroidinstaller/assets/configs/redfin.yaml b/openandroidinstaller/assets/configs/redfin.yaml index 7eae2345..e40ef553 100644 --- a/openandroidinstaller/assets/configs/redfin.yaml +++ b/openandroidinstaller/assets/configs/redfin.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Pixel 5 - devicecode: redfin + device_name: Pixel 5 + device_code: redfin + supported_device_codes: + - redfin requirements: android: 12.1.0 steps: diff --git a/openandroidinstaller/assets/configs/s3ve3g.yaml b/openandroidinstaller/assets/configs/s3ve3g.yaml index 4cde7173..19dbf51e 100644 --- a/openandroidinstaller/assets/configs/s3ve3g.yaml +++ b/openandroidinstaller/assets/configs/s3ve3g.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy S III Neo - devicecode: s3ve3g + device_name: Samsung Galaxy S III Neo + device_code: s3ve3g + supported_device_codes: + - s3ve3g steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/sargo.yaml b/openandroidinstaller/assets/configs/sargo.yaml index fe6065fd..af1b6da4 100644 --- a/openandroidinstaller/assets/configs/sargo.yaml +++ b/openandroidinstaller/assets/configs/sargo.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Pixel 3a - devicecode: sargo + device_name: Pixel 3a + device_code: sargo + supported_device_codes: + - sargo requirements: android: 12.1.0 steps: diff --git a/openandroidinstaller/assets/configs/starlte.yaml b/openandroidinstaller/assets/configs/starlte.yaml index 9a922995..d3caa9e0 100644 --- a/openandroidinstaller/assets/configs/starlte.yaml +++ b/openandroidinstaller/assets/configs/starlte.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy S9 - devicecode: starlte + device_name: Samsung Galaxy S9 + device_code: starlte + supported_device_codes: + - starlte requirements: android: 10 steps: diff --git a/openandroidinstaller/assets/configs/sunfish.yaml b/openandroidinstaller/assets/configs/sunfish.yaml index 2c3ee0be..53b80d01 100644 --- a/openandroidinstaller/assets/configs/sunfish.yaml +++ b/openandroidinstaller/assets/configs/sunfish.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Pixel 4a - devicecode: sunfish + device_name: Pixel 4a + device_code: sunfish + supported_device_codes: + - sunfish requirements: android: 12.1.0 steps: diff --git a/openandroidinstaller/assets/configs/taimen.yaml b/openandroidinstaller/assets/configs/taimen.yaml index 5fc02d21..d4a371df 100644 --- a/openandroidinstaller/assets/configs/taimen.yaml +++ b/openandroidinstaller/assets/configs/taimen.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Google Pixel 2 XL - devicecode: taimen + device_name: Google Pixel 2 XL + device_code: taimen + supported_device_codes: + - taimen requirements: android: 11 steps: diff --git a/openandroidinstaller/assets/configs/walleye.yaml b/openandroidinstaller/assets/configs/walleye.yaml index 652c2da2..88e450ed 100644 --- a/openandroidinstaller/assets/configs/walleye.yaml +++ b/openandroidinstaller/assets/configs/walleye.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Google Pixel 2 - devicecode: walleye + device_name: Google Pixel 2 + device_code: walleye + supported_device_codes: + - walleye requirements: android: 11 steps: diff --git a/openandroidinstaller/assets/configs/yuga.yaml b/openandroidinstaller/assets/configs/yuga.yaml index 09d6005b..d2a97434 100644 --- a/openandroidinstaller/assets/configs/yuga.yaml +++ b/openandroidinstaller/assets/configs/yuga.yaml @@ -1,7 +1,10 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Sony Xperia Z - devicecode: yuga + device_name: Sony Xperia Z + device_code: yuga + supported_device_codes: + - yuga + - C6603 steps: unlock_bootloader: - type: confirm_button diff --git a/openandroidinstaller/assets/configs/z3.yaml b/openandroidinstaller/assets/configs/z3.yaml index 8e90bda4..410c07d2 100644 --- a/openandroidinstaller/assets/configs/z3.yaml +++ b/openandroidinstaller/assets/configs/z3.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Sony Xperia Z3 - devicecode: z3 + device_name: Sony Xperia Z3 + device_code: z3 + supported_device_codes: + - z3 requirements: firmware: 23.5.A.1.291 steps: diff --git a/openandroidinstaller/assets/configs/zerofltexx.yaml b/openandroidinstaller/assets/configs/zerofltexx.yaml index 5e9db38c..f823b726 100644 --- a/openandroidinstaller/assets/configs/zerofltexx.yaml +++ b/openandroidinstaller/assets/configs/zerofltexx.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy S6 - devicecode: zerofltexx + device_name: Samsung Galaxy S6 + device_code: zerofltexx + supported_device_codes: + - zerofltexx steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/assets/configs/zeroltexx.yaml b/openandroidinstaller/assets/configs/zeroltexx.yaml index a67b4d55..157649c6 100644 --- a/openandroidinstaller/assets/configs/zeroltexx.yaml +++ b/openandroidinstaller/assets/configs/zeroltexx.yaml @@ -1,7 +1,9 @@ metadata: maintainer: Tobias Sterbak (tsterbak) - devicename: Samsung Galaxy S6 Edge - devicecode: zeroltexx + device_name: Samsung Galaxy S6 Edge + device_code: zeroltexx + supported_device_codes: + - zeroltexx steps: unlock_bootloader: boot_recovery: diff --git a/openandroidinstaller/installer_config.py b/openandroidinstaller/installer_config.py index 0158d93a..0707423b 100644 --- a/openandroidinstaller/installer_config.py +++ b/openandroidinstaller/installer_config.py @@ -14,7 +14,7 @@ # Author: Tobias Sterbak from pathlib import Path -from typing import List, Optional, Dict +from typing import List, Optional import schema import yaml @@ -49,24 +49,6 @@ def __init__( class InstallerConfig: - - # map some detected device codes to their real code. - device_code_mapping: Dict[str, str] = { - # Sony issues - "C6603": "yuga", - # OnePlus issues - "OnePlus5": "cheeseburger", - "OnePlus5T": "dumpling", - "OnePlus6": "enchilada", - "OnePlus6T": "fajita", - "OnePlus7": "guacamoleb", - "OnePlus7Pro": "guacamole", - "OnePlus7T": "hotdogb", - "OnePlus7TPro": "hotdog", - "Nord": "avicii", - "NordN200": "dre", - } - def __init__( self, unlock_bootloader: List[Step], @@ -78,15 +60,10 @@ def __init__( self.boot_recovery = boot_recovery self.metadata = metadata self.requirements = requirements - self.device_code = metadata.get("devicecode") + self.device_code = metadata.get("device_code") + self.supported_device_codes = metadata.get("supported_device_codes") self.twrp_link = metadata.get("twrp-link") - # manage device codes and alternative device codes/names - inverted_mapping: Dict[str, str] = dict(map(reversed, self.device_code_mapping.items())) # type: ignore - self.alternative_device_code = inverted_mapping.get( - self.device_code, self.device_code # type: ignore - ) - @classmethod def from_file(cls, path): with open(path, "r", encoding="utf-8") as stream: @@ -118,32 +95,47 @@ def from_file(cls, path): return cls(unlock_bootloader, boot_recovery, metadata, requirements) +def _find_config_file(device_code: str, config_path: Path) -> Optional[Path]: + """Find the config file which is supported by the given device code.""" + for path in config_path.rglob("*.yaml"): + with open(path, "r", encoding="utf-8") as stream: + try: + raw_config = dict(yaml.safe_load(stream)) + if device_code in raw_config.get("metadata", dict()).get( + "supported_device_codes", [] + ): + logger.info( + f"Device code '{device_code}' is supported by config '{path}'." + ) + return path + except: + pass + return None + + def _load_config(device_code: str, config_path: Path) -> Optional[InstallerConfig]: """ Function to load a function from given path and directory path. Try to load local file in the same directory as the executable first, then load from assets. """ - # try loading a custom local file first - mapped_device_code = InstallerConfig.device_code_mapping.get( - device_code, device_code - ) - custom_path = Path.cwd().joinpath(Path(f"{mapped_device_code}.yaml")) - try: + custom_path = _find_config_file(device_code, config_path=Path.cwd()) + if custom_path: config = InstallerConfig.from_file(custom_path) logger.info(f"Loaded custom device config from {custom_path}.") logger.info(f"Config metadata: {config.metadata}.") return config - except FileNotFoundError: + else: # if no localfile, then try to load a config file from assets - path = config_path.joinpath(Path(f"{mapped_device_code}.yaml")) - try: + path = _find_config_file(device_code, config_path) + + if path: config = InstallerConfig.from_file(path) logger.info(f"Loaded device config from {path}.") if config: logger.info(f"Config metadata: {config.metadata}.") return config - except FileNotFoundError: + else: logger.info(f"No device config found for {path}.") return None @@ -168,8 +160,9 @@ def validate_config(config: str) -> bool: { "metadata": { "maintainer": str, - "devicename": str, - "devicecode": str, + "device_name": str, + "device_code": str, + "supported_device_codes": [str], schema.Optional("twrp-link"): str, }, schema.Optional("requirements"): { diff --git a/openandroidinstaller/utils.py b/openandroidinstaller/utils.py index 7a83cb83..ea34997f 100644 --- a/openandroidinstaller/utils.py +++ b/openandroidinstaller/utils.py @@ -14,7 +14,7 @@ # Author: Tobias Sterbak import zipfile -from typing import Optional +from typing import Optional, List import requests from loguru import logger @@ -39,9 +39,7 @@ def get_download_link(devicecode: str) -> Optional[str]: return None -def image_works_with_device( - device_code: str, alternative_device_code: str, image_path: str -) -> bool: +def image_works_with_device(supported_device_codes: List[str], image_path: str) -> bool: """Determine if an image works for the given device.""" with zipfile.ZipFile(image_path) as image_zip: with image_zip.open( @@ -51,9 +49,7 @@ def image_works_with_device( supported_devices = str(metadata[-1]).split("=")[-1][:-3].split(",") logger.info(f"Image works with device: {supported_devices}") - if (device_code in supported_devices) or ( - alternative_device_code in supported_devices - ): + if any(code in supported_devices for code in supported_device_codes): logger.success("Device supported by the selected image.") return True else: diff --git a/openandroidinstaller/views/select_view.py b/openandroidinstaller/views/select_view.py index 705880b9..ac65fd5d 100644 --- a/openandroidinstaller/views/select_view.py +++ b/openandroidinstaller/views/select_view.py @@ -115,7 +115,7 @@ def build(self): # download link self.download_link = get_download_link( - self.state.config.metadata.get("devicecode", "ERROR") + self.state.config.metadata.get("device_code", "NOTFOUND") ) # attach hidden dialogues @@ -256,10 +256,8 @@ def pick_image_result(self, e: FilePickerResultEvent): logger.info("No image selected.") # check if the image works with the device and show the filename in different colors accordingly if e.files: - device_code = self.state.config.device_code if image_works_with_device( - device_code=device_code, - alternative_device_code=self.state.config.alternative_device_code, + supported_device_codes=self.state.config.supported_device_codes, image_path=self.state.image_path, ): self.selected_image.color = colors.GREEN @@ -300,8 +298,7 @@ def enable_button_if_ready(self, e): device_code = self.state.config.device_code if not ( image_works_with_device( - device_code=device_code, - alternative_device_code=self.state.config.alternative_device_code, + supported_device_codes=self.state.config.supported_device_codes, image_path=self.state.image_path, ) and recovery_works_with_device( diff --git a/openandroidinstaller/views/start_view.py b/openandroidinstaller/views/start_view.py index 3a9f2ac3..abf64064 100644 --- a/openandroidinstaller/views/start_view.py +++ b/openandroidinstaller/views/start_view.py @@ -38,7 +38,6 @@ from app_state import AppState from widgets import get_title from tooling import search_device, check_ab_partition -from installer_config import InstallerConfig class StartView(BaseView): @@ -244,7 +243,7 @@ def search_devices(self, e): self.state.is_ab = is_ab if self.state.config: device_name = self.state.config.metadata.get( - "devicename", "No device name in config." + "device_name", "No device name in config." ) else: device_name = None @@ -254,7 +253,9 @@ def search_devices(self, e): self.continue_button.disabled = False self.bootloader_switch.disabled = False # overwrite the text field with the real name from the config - self.device_name.value = f"{device_name} (code: {InstallerConfig.device_code_mapping.get(device_code, device_code)})" + self.device_name.value = ( + f"{device_name} (code: {self.state.config.device_code})" + ) self.device_name.color = colors.GREEN else: # failed to load config diff --git a/tests/test_configs.py b/tests/test_configs.py index 2230e7d3..ccb6ec08 100644 --- a/tests/test_configs.py +++ b/tests/test_configs.py @@ -38,7 +38,7 @@ def test_load_config_valid(config_path): # assert some properties of the config assert config - assert config.metadata.get("devicecode") == "sargo" + assert config.metadata.get("device_code") == "sargo" def test_load_config_notfound(config_path):