From 1d64475ac711693b1099f83bfb177f96feda1889 Mon Sep 17 00:00:00 2001 From: Michel Memeteau Date: Wed, 22 Feb 2023 11:55:44 +0100 Subject: [PATCH 01/10] Creat grealte config file --- .../assets/configs/greatlte.yaml | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 openandroidinstaller/assets/configs/greatlte.yaml diff --git a/openandroidinstaller/assets/configs/greatlte.yaml b/openandroidinstaller/assets/configs/greatlte.yaml new file mode 100644 index 00000000..81a1c7d1 --- /dev/null +++ b/openandroidinstaller/assets/configs/greatlte.yaml @@ -0,0 +1,22 @@ +metadata: + maintainer: Michel Memeteau (freechelmi) + devicename: Samsung Galaxy note 8 + devicecode: greatlte +steps: + unlock_bootloader: + flash_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 flash 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 From d0f7bc84bf36382f2f21fc9f63daa3d01b619f6a Mon Sep 17 00:00:00 2001 From: Michel Memeteau Date: Fri, 24 Feb 2023 13:05:10 +0100 Subject: [PATCH 02/10] Update greatlte instructions for correct buttons --- openandroidinstaller/assets/configs/greatlte.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openandroidinstaller/assets/configs/greatlte.yaml b/openandroidinstaller/assets/configs/greatlte.yaml index 81a1c7d1..fc42cfd6 100644 --- a/openandroidinstaller/assets/configs/greatlte.yaml +++ b/openandroidinstaller/assets/configs/greatlte.yaml @@ -18,5 +18,4 @@ steps: 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 + until the screen turns black to reboot & release the buttons immediately when it does, then immediately hold *Volume Up* + *Bixby* + *Power button* until you are in recovery mode. \ No newline at end of file From b97c9cd884d55cff9e28b550fd28cdf235393431 Mon Sep 17 00:00:00 2001 From: Tobias Sterbak Date: Fri, 24 Feb 2023 18:43:42 +0000 Subject: [PATCH 03/10] Update configs for beyond1lte and d1 --- .../assets/configs/beyond1lte.yaml | 20 ++++++++++++++++--- openandroidinstaller/assets/configs/d1.yaml | 20 ++++++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/openandroidinstaller/assets/configs/beyond1lte.yaml b/openandroidinstaller/assets/configs/beyond1lte.yaml index 6deef617..df6f9f0c 100644 --- a/openandroidinstaller/assets/configs/beyond1lte.yaml +++ b/openandroidinstaller/assets/configs/beyond1lte.yaml @@ -6,12 +6,26 @@ requirements: android: 12 steps: unlock_bootloader: + - type: call_button + content: > + As a first step, you need to unlock the bootloader. A bootloader is the piece of software, that tells your phone + how to start and run an operating system (like Android). Your device should be turned on. + Press 'Confirm and run' to reboot into download mode. Then continue. + command: adb_reboot_download + - type: confirm_button + content: > + Now, click the button that the onscreen instructions correlate to “Continue” and/or “Unlock Bootloader”. + Your device will reboot, you may now unplug the USB cable from your device. + The device will demand you format userdata, please follow the onscreen instructions to do so. + - type: confirm_button + content: > + The bootloader is now unlocked. Go through Android Setup skipping everything you can, then connect the device to a Wi-Fi network. + Since the device resets completely, you will need to re-enable Developer Options and USB debugging to continue. flash_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. + Now plug the USB-cable to your device. As a first step, you need to boot into download mode. Your device should be turned on. + Then press 'Confirm and run' to reboot into download mode. Continue once it's done. command: adb_reboot_download - type: call_button content: In this step, you need to flash a custom recovery on your device. Press 'Confirm and run' to start the process. Confirm afterwards to continue. diff --git a/openandroidinstaller/assets/configs/d1.yaml b/openandroidinstaller/assets/configs/d1.yaml index 431d49a0..e785c9b1 100644 --- a/openandroidinstaller/assets/configs/d1.yaml +++ b/openandroidinstaller/assets/configs/d1.yaml @@ -6,12 +6,26 @@ requirements: android: 12 steps: unlock_bootloader: + - type: call_button + content: > + As a first step, you need to unlock the bootloader. A bootloader is the piece of software, that tells your phone + how to start and run an operating system (like Android). Your device should be turned on. + Press 'Confirm and run' to reboot into download mode. Then continue. + command: adb_reboot_download + - type: confirm_button + content: > + Now, click the button that the onscreen instructions correlate to “Continue” and/or “Unlock Bootloader”. + Your device will reboot, you may now unplug the USB cable from your device. + The device will demand you format userdata, please follow the onscreen instructions to do so. + - type: confirm_button + content: > + The bootloader is now unlocked. Go through Android Setup skipping everything you can, then connect the device to a Wi-Fi network. + Since the device resets completely, you will need to re-enable Developer Options and USB debugging to continue. flash_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. + Now plug the USB-cable to your device. As a first step, you need to boot into download mode. Your device should be turned on. + Then press 'Confirm and run' to reboot into download mode. Continue once it's done. command: adb_reboot_download - type: call_button content: In this step, you need to flash a custom recovery on your device. Press 'Confirm and run' to start the process. Confirm afterwards to continue. From 293e00667708f05527b92aba40fa74bc71bd1c15 Mon Sep 17 00:00:00 2001 From: Tobias Sterbak Date: Fri, 24 Feb 2023 18:53:20 +0000 Subject: [PATCH 04/10] Add config for beyond0lte, beyond2lte and d2s --- README.md | 5 ++- .../assets/configs/beyond0lte.yaml | 38 +++++++++++++++++++ .../assets/configs/beyond2lte.yaml | 38 +++++++++++++++++++ openandroidinstaller/assets/configs/d2s.yaml | 38 +++++++++++++++++++ 4 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 openandroidinstaller/assets/configs/beyond0lte.yaml create mode 100644 openandroidinstaller/assets/configs/beyond2lte.yaml create mode 100644 openandroidinstaller/assets/configs/d2s.yaml diff --git a/README.md b/README.md index f73e9314..8f960159 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Linux is currently the best supported platform (tested with Ubuntu 20.04/22.04 L ## Officially supported devices -Currently, the **we support 52 devices** by various vendors and working on adding more soon! +Currently, the **we support 55 devices** by various vendors and working on adding more soon! Support for these devices is provided as best effort, but things might still go wrong. @@ -84,7 +84,10 @@ Samsung | Galaxy S7 Edge | [hero2lte](https://wiki.lineageos.org/devices/hero2lt Samsung | Galaxy S9 | [starlte](https://wiki.lineageos.org/devices/starlte/) | | tested Samsung | Galaxy Note 9 | [crownlte](https://wiki.lineageos.org/devices/crownlte/) | | tested Samsung | Galaxy S10 | [beyond1lte](https://wiki.lineageos.org/devices/beyond1lte/) | | tested +Samsung | Galaxy S10e | [beyond0lte](https://wiki.lineageos.org/devices/beyond0lte/) | | tested +Samsung | Galaxy S10+ | [beyond2lte](https://wiki.lineageos.org/devices/beyond2lte/) | | tested Samsung | Galaxy Note 10 | [d1](https://wiki.lineageos.org/devices/d1/) | | tested +Samsung | Galaxy Note 10+ | [d2s](https://wiki.lineageos.org/devices/d2s/) | | tested Samsung | Galaxy Note 3 LTE | [hltetmo](https://wiki.lineageos.org/devices/hltetmo/) | N900T/V/W8 | tested diff --git a/openandroidinstaller/assets/configs/beyond0lte.yaml b/openandroidinstaller/assets/configs/beyond0lte.yaml new file mode 100644 index 00000000..150f1668 --- /dev/null +++ b/openandroidinstaller/assets/configs/beyond0lte.yaml @@ -0,0 +1,38 @@ +metadata: + maintainer: Tobias Sterbak (tsterbak) + devicename: Samsung Galaxy S10e + devicecode: beyond0lte +requirements: + android: 12 +steps: + unlock_bootloader: + - type: call_button + content: > + As a first step, you need to unlock the bootloader. A bootloader is the piece of software, that tells your phone + how to start and run an operating system (like Android). Your device should be turned on. + Press 'Confirm and run' to reboot into download mode. Then continue. + command: adb_reboot_download + - type: confirm_button + content: > + Now, click the button that the onscreen instructions correlate to “Continue” and/or “Unlock Bootloader”. + Your device will reboot, you may now unplug the USB cable from your device. + The device will demand you format userdata, please follow the onscreen instructions to do so. + - type: confirm_button + content: > + The bootloader is now unlocked. Go through Android Setup skipping everything you can, then connect the device to a Wi-Fi network. + Since the device resets completely, you will need to re-enable Developer Options and USB debugging to continue. + flash_recovery: + - type: call_button + content: > + Now plug the USB-cable to your device. As a first step, you need to boot into download mode. Your device should be turned on. + Then press 'Confirm and run' to reboot into download mode. Continue once it's done. + command: adb_reboot_download + - type: call_button + content: In this step, you need to flash 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* + *Bixby* 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* + *Bixby* + *Power button*. \ No newline at end of file diff --git a/openandroidinstaller/assets/configs/beyond2lte.yaml b/openandroidinstaller/assets/configs/beyond2lte.yaml new file mode 100644 index 00000000..50d780b6 --- /dev/null +++ b/openandroidinstaller/assets/configs/beyond2lte.yaml @@ -0,0 +1,38 @@ +metadata: + maintainer: Tobias Sterbak (tsterbak) + devicename: Samsung Galaxy S10+ + devicecode: beyond2lte +requirements: + android: 12 +steps: + unlock_bootloader: + - type: call_button + content: > + As a first step, you need to unlock the bootloader. A bootloader is the piece of software, that tells your phone + how to start and run an operating system (like Android). Your device should be turned on. + Press 'Confirm and run' to reboot into download mode. Then continue. + command: adb_reboot_download + - type: confirm_button + content: > + Now, click the button that the onscreen instructions correlate to “Continue” and/or “Unlock Bootloader”. + Your device will reboot, you may now unplug the USB cable from your device. + The device will demand you format userdata, please follow the onscreen instructions to do so. + - type: confirm_button + content: > + The bootloader is now unlocked. Go through Android Setup skipping everything you can, then connect the device to a Wi-Fi network. + Since the device resets completely, you will need to re-enable Developer Options and USB debugging to continue. + flash_recovery: + - type: call_button + content: > + Now plug the USB-cable to your device. As a first step, you need to boot into download mode. Your device should be turned on. + Then press 'Confirm and run' to reboot into download mode. Continue once it's done. + command: adb_reboot_download + - type: call_button + content: In this step, you need to flash 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* + *Bixby* 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* + *Bixby* + *Power button*. \ No newline at end of file diff --git a/openandroidinstaller/assets/configs/d2s.yaml b/openandroidinstaller/assets/configs/d2s.yaml new file mode 100644 index 00000000..c20894c6 --- /dev/null +++ b/openandroidinstaller/assets/configs/d2s.yaml @@ -0,0 +1,38 @@ +metadata: + maintainer: Tobias Sterbak (tsterbak) + devicename: Samsung Galaxy Note 10+ + devicecode: d2s +requirements: + android: 12 +steps: + unlock_bootloader: + - type: call_button + content: > + As a first step, you need to unlock the bootloader. A bootloader is the piece of software, that tells your phone + how to start and run an operating system (like Android). Your device should be turned on. + Press 'Confirm and run' to reboot into download mode. Then continue. + command: adb_reboot_download + - type: confirm_button + content: > + Now, click the button that the onscreen instructions correlate to “Continue” and/or “Unlock Bootloader”. + Your device will reboot, you may now unplug the USB cable from your device. + The device will demand you format userdata, please follow the onscreen instructions to do so. + - type: confirm_button + content: > + The bootloader is now unlocked. Go through Android Setup skipping everything you can, then connect the device to a Wi-Fi network. + Since the device resets completely, you will need to re-enable Developer Options and USB debugging to continue. + flash_recovery: + - type: call_button + content: > + Now plug the USB-cable to your device. As a first step, you need to boot into download mode. Your device should be turned on. + Then press 'Confirm and run' to reboot into download mode. Continue once it's done. + command: adb_reboot_download + - type: call_button + content: In this step, you need to flash 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* + *Bixby* 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* + *Bixby* + *Power button*. \ No newline at end of file From 9862949f9494b467e050c94df5c9f2c77286538c Mon Sep 17 00:00:00 2001 From: Michel Memeteau Date: Sat, 25 Feb 2023 14:19:01 +0100 Subject: [PATCH 05/10] Add Samsung Note 8 to Readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f73e9314..691c9751 100644 --- a/README.md +++ b/README.md @@ -82,6 +82,7 @@ Samsung | Galaxy S6 Edge | [zeroltexx](https://wiki.lineageos.org/devices/zerolt Samsung | Galaxy S7 | [herolte](https://wiki.lineageos.org/devices/herolte/) | SM-G930F | tested Samsung | Galaxy S7 Edge | [hero2lte](https://wiki.lineageos.org/devices/hero2lte/) | | tested Samsung | Galaxy S9 | [starlte](https://wiki.lineageos.org/devices/starlte/) | | tested +Samsung | Galaxy Note 8 | greatlte | SM-N950F | tested Samsung | Galaxy Note 9 | [crownlte](https://wiki.lineageos.org/devices/crownlte/) | | tested Samsung | Galaxy S10 | [beyond1lte](https://wiki.lineageos.org/devices/beyond1lte/) | | tested Samsung | Galaxy Note 10 | [d1](https://wiki.lineageos.org/devices/d1/) | | tested From 8bc631a52d419939a96a2df6706691d258776ae2 Mon Sep 17 00:00:00 2001 From: Tobias Sterbak Date: Mon, 27 Feb 2023 19:20:41 +0100 Subject: [PATCH 06/10] Add Samsung pictogram with bixby button --- .../assets/configs/beyond0lte.yaml | 2 +- .../assets/configs/beyond1lte.yaml | 2 +- .../assets/configs/beyond2lte.yaml | 2 +- .../assets/configs/crownlte.yaml | 2 +- openandroidinstaller/assets/configs/d1.yaml | 2 +- openandroidinstaller/assets/configs/d2s.yaml | 2 +- .../assets/configs/greatlte.yaml | 2 +- .../assets/imgs/samsung-buttons-bixby.png | Bin 0 -> 16861 bytes 8 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 openandroidinstaller/assets/imgs/samsung-buttons-bixby.png diff --git a/openandroidinstaller/assets/configs/beyond0lte.yaml b/openandroidinstaller/assets/configs/beyond0lte.yaml index 150f1668..01bf3524 100644 --- a/openandroidinstaller/assets/configs/beyond0lte.yaml +++ b/openandroidinstaller/assets/configs/beyond0lte.yaml @@ -31,7 +31,7 @@ steps: content: In this step, you need to flash 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 + img: samsung-buttons-bixby.png content: > Unplug the USB cable from your device. Then manually reboot into recovery by pressing the *Volume Down* + *Bixby* 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, diff --git a/openandroidinstaller/assets/configs/beyond1lte.yaml b/openandroidinstaller/assets/configs/beyond1lte.yaml index df6f9f0c..914d178e 100644 --- a/openandroidinstaller/assets/configs/beyond1lte.yaml +++ b/openandroidinstaller/assets/configs/beyond1lte.yaml @@ -31,7 +31,7 @@ steps: content: In this step, you need to flash 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 + img: samsung-buttons-bixby.png content: > Unplug the USB cable from your device. Then manually reboot into recovery by pressing the *Volume Down* + *Bixby* 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, diff --git a/openandroidinstaller/assets/configs/beyond2lte.yaml b/openandroidinstaller/assets/configs/beyond2lte.yaml index 50d780b6..ff8a529a 100644 --- a/openandroidinstaller/assets/configs/beyond2lte.yaml +++ b/openandroidinstaller/assets/configs/beyond2lte.yaml @@ -31,7 +31,7 @@ steps: content: In this step, you need to flash 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 + img: samsung-buttons-bixby.png content: > Unplug the USB cable from your device. Then manually reboot into recovery by pressing the *Volume Down* + *Bixby* 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, diff --git a/openandroidinstaller/assets/configs/crownlte.yaml b/openandroidinstaller/assets/configs/crownlte.yaml index 38a922c4..8b759e6b 100644 --- a/openandroidinstaller/assets/configs/crownlte.yaml +++ b/openandroidinstaller/assets/configs/crownlte.yaml @@ -17,7 +17,7 @@ steps: content: In this step, you need to flash 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 + img: samsung-buttons-bixby.png content: > Unplug the USB cable from your device. Then manually reboot into recovery by pressing the *Volume Down* + *Bixby* 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, diff --git a/openandroidinstaller/assets/configs/d1.yaml b/openandroidinstaller/assets/configs/d1.yaml index e785c9b1..8ae30aeb 100644 --- a/openandroidinstaller/assets/configs/d1.yaml +++ b/openandroidinstaller/assets/configs/d1.yaml @@ -31,7 +31,7 @@ steps: content: In this step, you need to flash 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 + img: samsung-buttons-bixby.png content: > Unplug the USB cable from your device. Then manually reboot into recovery by pressing the *Volume Down* + *Bixby* 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, diff --git a/openandroidinstaller/assets/configs/d2s.yaml b/openandroidinstaller/assets/configs/d2s.yaml index c20894c6..07bd6819 100644 --- a/openandroidinstaller/assets/configs/d2s.yaml +++ b/openandroidinstaller/assets/configs/d2s.yaml @@ -31,7 +31,7 @@ steps: content: In this step, you need to flash 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 + img: samsung-buttons-bixby.png content: > Unplug the USB cable from your device. Then manually reboot into recovery by pressing the *Volume Down* + *Bixby* 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, diff --git a/openandroidinstaller/assets/configs/greatlte.yaml b/openandroidinstaller/assets/configs/greatlte.yaml index fc42cfd6..01e54325 100644 --- a/openandroidinstaller/assets/configs/greatlte.yaml +++ b/openandroidinstaller/assets/configs/greatlte.yaml @@ -15,7 +15,7 @@ steps: content: In this step, you need to flash 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 + img: samsung-buttons-bixby.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 to reboot & release the buttons immediately when it does, then immediately hold *Volume Up* + *Bixby* + *Power button* until you are in recovery mode. \ No newline at end of file diff --git a/openandroidinstaller/assets/imgs/samsung-buttons-bixby.png b/openandroidinstaller/assets/imgs/samsung-buttons-bixby.png new file mode 100644 index 0000000000000000000000000000000000000000..33364051683108e8fa2af9c6b07a63eb2f39f332 GIT binary patch literal 16861 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
P?GrCfGECXIfi`l<%ffaPvr& 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 literal 0 HcmV?d00001 From fcf01095bdadabed1b0b07fb2afae224b5f15d35 Mon Sep 17 00:00:00 2001 From: Tobias Sterbak Date: Mon, 27 Feb 2023 19:22:49 +0100 Subject: [PATCH 07/10] Update device count in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2588902f..df33c803 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Linux is currently the best supported platform (tested with Ubuntu 20.04/22.04 L ## Officially supported devices -Currently, the **we support 55 devices** by various vendors and working on adding more soon! +Currently, the **we support 56 devices** by various vendors and working on adding more soon! Support for these devices is provided as best effort, but things might still go wrong. From 87467b346a6915bf925775e8856249bc8676d32b Mon Sep 17 00:00:00 2001 From: Tobias Sterbak Date: Mon, 27 Feb 2023 19:25:54 +0100 Subject: [PATCH 08/10] Add test --- tests/test_app.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/tests/test_app.py b/tests/test_app.py index 93d25509..cb11a16e 100644 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -34,7 +34,7 @@ def send_commands(self, command, other): return MockResult() -def test_app(): +def test_app_sargo(): page = ft.Page(conn=MockConn(), session_id=1) # test if it would start up main(page=page, test=True, test_config="sargo") @@ -47,3 +47,18 @@ def test_app(): for _ in range(number_of_steps): page.controls[0].to_next_view(None) assert "SuccessView" in str(page.controls[0].view.controls[0]) + + +def test_app_beyond2lte(): + page = ft.Page(conn=MockConn(), session_id=1) + # test if it would start up + main(page=page, test=True, test_config="beyond2lte") + + # test if you can go through all views + state = page.controls[0].state + state.load_config(device_code="sargo") + state.default_views.extend(state.addon_views) + number_of_steps = 14 + for _ in range(number_of_steps): + page.controls[0].to_next_view(None) + assert "SuccessView" in str(page.controls[0].view.controls[0]) From 2e68a25759fbef188622f76a060ed80da48702f7 Mon Sep 17 00:00:00 2001 From: Tobias Sterbak Date: Thu, 2 Mar 2023 19:57:09 +0100 Subject: [PATCH 09/10] Change requirements for taimen and walleye to andorid 11 --- openandroidinstaller/assets/configs/taimen.yaml | 2 +- openandroidinstaller/assets/configs/walleye.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openandroidinstaller/assets/configs/taimen.yaml b/openandroidinstaller/assets/configs/taimen.yaml index 64382154..8bed3bbf 100644 --- a/openandroidinstaller/assets/configs/taimen.yaml +++ b/openandroidinstaller/assets/configs/taimen.yaml @@ -3,7 +3,7 @@ metadata: devicename: Google Pixel 2 XL devicecode: taimen requirements: - android: 12 + android: 11 steps: unlock_bootloader: - type: call_button diff --git a/openandroidinstaller/assets/configs/walleye.yaml b/openandroidinstaller/assets/configs/walleye.yaml index 7b95c9ba..1daae392 100644 --- a/openandroidinstaller/assets/configs/walleye.yaml +++ b/openandroidinstaller/assets/configs/walleye.yaml @@ -3,7 +3,7 @@ metadata: devicename: Google Pixel 2 devicecode: walleye requirements: - android: 12 + android: 11 steps: unlock_bootloader: - type: call_button From f77e13e919a6bf0651ebfebc4ce0f47981397a5a Mon Sep 17 00:00:00 2001 From: Tobias Sterbak Date: Fri, 3 Mar 2023 15:54:18 +0100 Subject: [PATCH 10/10] Make text in advanced output easier to copy --- openandroidinstaller/widgets.py | 14 +++++++++++--- tests/test_terminal_box.py | 8 ++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/openandroidinstaller/widgets.py b/openandroidinstaller/widgets.py index fe479767..d57c006f 100644 --- a/openandroidinstaller/widgets.py +++ b/openandroidinstaller/widgets.py @@ -42,7 +42,12 @@ def __init__(self, expand: bool = True, visible: bool = False): def build(self): self._box = Container( - content=Column(scroll="auto", expand=True, auto_scroll=True), + content=Column( + controls=[Text("", selectable=True)], + scroll="auto", + expand=True, + auto_scroll=True, + ), margin=10, padding=10, alignment=alignment.top_left, @@ -61,7 +66,10 @@ def write_line(self, line: str): Ignores empty lines. """ if (type(line) == str) and line.strip(): - self._box.content.controls.append(Text(f">{line.strip()}", selectable=True)) + self._box.content.controls[0].value += f"\n>{line.strip()}" + self._box.content.controls[0].value = self._box.content.controls[ + 0 + ].value.strip("\n") self.update() def toggle_visibility(self): @@ -72,7 +80,7 @@ def toggle_visibility(self): def clear(self): """Clear terminal output.""" - self._box.content.controls = [] + self._box.content.controls[0].value = "" self.update() def update(self): diff --git a/tests/test_terminal_box.py b/tests/test_terminal_box.py index 526254c5..6a530e50 100644 --- a/tests/test_terminal_box.py +++ b/tests/test_terminal_box.py @@ -42,8 +42,8 @@ def test_write_lines(mocker): for line in ["test", "test_line2", True]: terminal_box.write_line(line) - # two text elements should appear - assert len(terminal_box._box.content.controls) == 2 + # two lines of text should appear + assert len(terminal_box._box.content.controls[0].value.split("\n")) == 2 def test_toggle_visibility(mocker): @@ -87,5 +87,5 @@ def test_clear_terminal(mocker): # now clear terminal_box.clear() - # two text elements should appear - assert len(terminal_box._box.content.controls) == 0 + # text element should be empty + assert terminal_box._box.content.controls[0].value == ""