Commit graph

5775 commits

Author SHA1 Message Date
Zhomart Mukhamejanov
b0361ffa3e updater_config: make utils/PayloadSpecs non-static
PayloadSpecs has complicated methods, which makes hard
to test other dependent classes.
Making it non-static allows mocking it, which makes
testing other classes easier.

Test: manually
Test: using JUnit4
Change-Id: I818dc59c6bb0e7d131439d0d41f88d5cd9a451b4
Signed-off-by: Zhomart Mukhamejanov <zhomart@google.com>
2018-05-18 10:38:33 -07:00
Treehugger Robot
38d90316b2 Merge "recovery: Reset optind to 1 after getopt" 2018-05-17 21:38:26 +00:00
Tao Bao
e462cdffe9 tools: Move to Soong.
Test: `mmma -j bootable/recovery/`
Test: Build and run RecoveryLocalizer on device.
Change-Id: I3359223c82bd670c94ad51296cb8b357b04f5349
2018-05-17 13:10:08 -07:00
Jerry Zhang
49fd5d262c recovery: Reset optind to 1 after getopt
The getopt library exposes optind which is the
next index to be processed. When scanning is
restarted, optind has to be reset to 1.

Test: Recovery works
Bug: 78793464
Change-Id: I1efca3fb985ffbdfe91e43767469733cda6e7d5b
2018-05-17 19:56:42 +00:00
Tao Bao
2ddc54f5fd Merge "updater_sample: add switch slot demo" 2018-05-17 19:21:54 +00:00
Tao Bao
371fe6e8bc Move stuff from recovery into librecovery.
Move most source files into librecovery so they become testable. Only
recovery_main.cpp and logging.cpp are built into recovery module, as
they perform one-time setup (e.g. setting up logger).

Test: `mmma -j bootable/recovery` with
      aosp_{angler,bullhead,fugu,dragon,marlin}-userdebug
Test: recovery_host_test; recovery_unit_test; recovery_component_test;
      recovery_manual_test
Test: Build and boot into recovery image on angler.
Change-Id: Ic4444f87a2f123557c71085f81dc2b2764c05ed8
Merged-In: Ic4444f87a2f123557c71085f81dc2b2764c05ed8
2018-05-17 09:59:26 -07:00
Zhomart Mukhamejanov
238beb7373 updater_sample: add switch slot demo
- Add util/UpdateEngineProperties.java
- Set SWITCH_SLOT_ON_REBOOT=0 when update is applied
- Allow user to switch slot to the updated partition manually
- Add config "ab_config.force_switch_slot"
- Add ab_force_switch_slot to tools/gen_update_config.py

Test: manually on the marlin device
Bug: 79492522
Change-Id: I52f818b576d52a052b5427ba3f732cb2371ddb06
Signed-off-by: Zhomart Mukhamejanov <zhomart@google.com>
2018-05-17 16:29:57 +00:00
Tao Bao
5b3d6cf58b Merge "recovery: Refactor common setup into main()" 2018-05-16 23:46:01 +00:00
Tianjie Xu
6dfc54cae1 Merge "Last command file should be updated after a command finishes" 2018-05-16 22:55:39 +00:00
Jerry Zhang
f5e319ac96 recovery: Refactor common setup into main()
Move more common setup into the main function.
Main() handles all 1 time setup, such as ui,
logging, and secontext. Recovery_main()
takes in command line arguments, does any
necessary recovery work, and can be called
multiple times from main().

Test: Recovery works
Bug: 78793464
Change-Id: I2d2595fc342b4ddfa80f4e06b30e44263132acd9
Merged-In: I2d2595fc342b4ddfa80f4e06b30e44263132acd9
2018-05-16 19:32:06 +00:00
Tianjie Xu
c2b2bb5d78 Last command file should be updated after a command finishes
The last command file has the last executed stash command by convention.
So we should update the file after we actually finishes executing the command;
instead of after loading src/tgt.

Bug: 79756267
Test: unit tests pass
Change-Id: I4535b5836e7eb13b3abe3d02f9f362ec5e9ec969
2018-05-15 21:05:30 -07:00
Tao Bao
0f3aa6ec38 Merge "wear_ui: Address a TODO regarding {intro,loop}_frames." 2018-05-16 04:04:54 +00:00
Tao Bao
152e0eb20b wear_ui: Address a TODO regarding {intro,loop}_frames.
Also add tests for LoadAnimation that cover the change.

Test: Run `recovery_unit_test` on marlin.
Change-Id: I0380a5cdd0d85d55baecf7759eb647b6a9f3a085
2018-05-14 11:14:00 -07:00
Tao Bao
1f0b9962b0 Merge "Clean up the Makefile for recovery and tests." 2018-05-12 00:55:35 +00:00
Tao Bao
9e30997676 Clean up the Makefile for recovery and tests.
Reorder librecovery and librecovery_ui, so that librecovery stays closer
to recovery (in preparation for later changes that move more files
between the two). For the libraries in LOCAL_STATIC_LIBRARIES, reorder
them based on the dependency - local modules coming first, with external
libraries near the end. Sort the local / external modules, unless a
specific order is needed.

In tests/Android.mk, split the monolithic list of LOCAL_STATIC_LIBRARIES
based on modules. This makes adding / finding libraries easier.

There's no functionality in this CL.

Test: mmma -j bootable/recovery
Change-Id: I6836be574df565001ae9cd3d466a2b6460d90d08
2018-05-11 15:53:58 -07:00
Treehugger Robot
13d56e9bed Merge "screen_ui: Fix an issue in RTL locale detection." 2018-05-11 21:46:52 +00:00
Tao Bao
db6dc14bff Merge "Move device.cpp into librecovery_ui." 2018-05-11 21:38:01 +00:00
Tao Bao
8c6f699b36 Merge "tests: Add tests for ScreenRecoveryUI." 2018-05-11 20:06:22 +00:00
Tao Bao
6a542dcc3b Move device.cpp into librecovery_ui.
librecovery_ui will be exposed for device-specific RecoveryUI. With the
current code structure, 'device.h' and 'ui.h' will always be needed in
order to implement device-specific RecoveryUI.

Bug: 76436783
Test: lunch aosp_{angler,marlin,dragon,walleye}-userdebug;
      `mmma -j bootable/recovery` respectively.
Change-Id: I15e8851b230a65526ac9310e0ee6621b7daea589
2018-05-11 10:51:26 -07:00
Tao Bao
e498ef2f03 Merge "recovery: Configure device menu based on runtime info." 2018-05-11 17:34:01 +00:00
Tao Bao
e5d2c25ecf recovery: Configure device menu based on runtime info.
Drop the dependency on build time flag of AB_OTA_UPDATER when compiling
device.cpp. Note that AB_OTA_UPDATER still guards the package install
behavior (install.cpp).

This can be extended to cover the entry of "Apply update from SD card".

Test: Build and boot into recovery on angler and walleye respectively.
      Check the recovery menu.
Change-Id: I36a6a6b4101ba61d4d374e32353c36cc5716f9ce
2018-05-10 20:46:46 -07:00
Zhomart Mukhamejanov
563d34f712 Merge "updater_sample: add HAL compatibility check" 2018-05-11 03:05:21 +00:00
Tao Bao
797550fb8b Merge "Document the clang-format usage." 2018-05-11 00:04:06 +00:00
Tao Bao
6df846e337 Merge "Device owns the RecoveryUI instance." 2018-05-11 00:03:55 +00:00
Zhomart Mukhamejanov
46a51ac4b6 updater_sample: add HAL compatibility check
- Refactor PrepareStreamingService#onHandleIntent
- Add PrepareStreamingService#verifyPackageCompatibility

Test: on the device
Bug: 79471299
Signed-off-by: Zhomart Mukhamejanov <zhomart@google.com>

Change-Id: I1b18502f0638d66810a3f7ada582e4c7cea20cdb
2018-05-10 14:45:52 -07:00
Zhomart Mukhamejanov
7217e7045d Merge "updater_sample: fix UpdateConfig" 2018-05-10 21:45:03 +00:00
Tao Bao
601493e8c4 Document the clang-format usage.
`repo upload` and `git clang-format` may give slightly different
results, because they may trigger different `clang-format` binaries.
Document the setup to get consistent formatting results.

Test: N/A
Change-Id: I927dd25c7a6dd51be4812d5b3857a4b08c5a3f81
2018-05-10 13:12:59 -07:00
Zhomart Mukhamejanov
bb8a215138 updater_sample: fix UpdateConfig
- fix UpdateConfig
- fix smaple.json
- fix FileDownloaderTest

Test: manually
Change-Id: I09d272f77c89a02f54a24cf753fdfda4ce243927
Signed-off-by: Zhomart Mukhamejanov <zhomart@google.com>
2018-05-10 12:19:16 -07:00
Zhomart Mukhamejanov
fe5b3e2b2d Merge "updater_sample: add http header demo" 2018-05-10 16:03:34 +00:00
Tao Bao
551d2c3181 Device owns the RecoveryUI instance.
Test: mmma -j bootable/recovery
Test: Build and boot into recovery, w/ and w/o enabling quiescent mode
      respectively.
Change-Id: I5d9bb945a6c3c9a3b96199fa0c8071a2f91339a0
2018-05-09 21:22:26 -07:00
Zhomart Mukhamejanov
6aa5fb0bbe updater_sample: add http header demo
Added demo passing http headers to UpdateEngine#applyPayload.

Bug: 79483768
Test: manually
Change-Id: I3e9c812dba2066acadbcea8d07c933368806e20c
Signed-off-by: Zhomart Mukhamejanov <zhomart@google.com>
2018-05-09 17:33:52 -07:00
Tao Bao
1d4ef4ba4b Merge "screen_ui: Fix an issue when displaying wrapped text." 2018-05-09 21:11:09 +00:00
Tao Bao
452b487f31 screen_ui: Fix an issue when displaying wrapped text.
The last character at EOL is cut when showing the prompt-for-data-wipe
message on angler. Address the issue by keeping symmetrical margins
based on the given offset.

Test: Trigger prompt-and-wipe-data menu. No cutout character at EOL.
Change-Id: Id6e8dc7815bf681435bcaf13e7bdd09cf870d95f
2018-05-09 12:32:27 -07:00
Zhomart Mukhamejanov
daa86e9024 Merge "updater_sample: update tools" 2018-05-09 01:04:59 +00:00
Zhomart Mukhamejanov
c23a53c272 Merge "updater_sample: add streaming support" 2018-05-09 01:04:41 +00:00
Tao Bao
347a659d9b screen_ui: Fix an issue in RTL locale detection.
The CL in [1] moved android.os.RecoverySystem to send the locale
argument in well-formed BCP 47 language tags (e.g. "en-US" instead of
"en_US"), with the matching changes to recovery code in [2]. However,
the one in ScreenRecoveryUI::SetLocale() was missed, which broke RTL
locale detection when using new format.

[1] commit 38715228 in platform/frameworks/base
[2] commit 2078b22e in platform/bootable/recovery

Test: Set the locale to "ar-EG". `Run graphics test` under recovery.
      Check the progress bar.
Test: Run recovery_unit_test on marlin.
Change-Id: I7c7f5e0725bfb096109c7192c19f3f008e8e47e3
2018-05-08 17:56:33 -07:00
Tao Bao
6cd816859e tests: Add tests for ScreenRecoveryUI.
In order to support that, this CL adds Paths::set_resource_dir() to
override the default resource dir ("/res/images/") that's only available
under recovery. Note that since there're external modules depending on
libminui, it adds a separate function of res_set_resource_dir(), instead
of requiring the dependency on libotautil for everyone.

Test: mmma -j bootable/recovery
Test: Run recovery_unit_test on marlin.
Change-Id: I0a7dcf4476808bea9e634eaffc9676f6cbaf92b7
2018-05-08 15:53:56 -07:00
Zhomart Mukhamejanov
96eb59e4b1 updater_sample: update tools
- Allow gen_update_config.py to use ota_from_target_files from
  $ANDROID_BUILD_TOP/build/make/tools/releasetools/
- tests/res/raw/ota_002_package.zip re-generated using functions from
  $ANDROID_BUILD_TOP/build/make/tools/releasetools/test_ota_from_target_files.py
- sample app tests updated

Test: ./tools/gen_update_config_test.py
Change-Id: I5c492ec22782ba54fe481f592a44e797c695684e
Signed-off-by: Zhomart Mukhamejanov <zhomart@google.com>
2018-05-08 21:13:34 +00:00
Zhomart Mukhamejanov
0dd5a83d0e updater_sample: add streaming support
- UpdateConfigs: add helper methods for streaming
- add PrepareStreamingService intent service

Test: manually and junit4
Bug: 77148143
Change-Id: I61711eb9abe051987e725fbd94f8cd029ff21dd3
2018-05-08 21:12:33 +00:00
Tao Bao
0a2c4e260f Merge "recovery: Remove unneeded include of minui.h." 2018-05-08 18:21:00 +00:00
android-build-prod (mdb)
1f3a9c0a43 Merge "screen_ui: Drop the parameter in CheckBackgroundTextImages." 2018-05-08 18:11:35 +00:00
Tao Bao
d8abd2bd70 Merge "recovery: Get UI and locale from device." 2018-05-08 17:32:36 +00:00
Tao Bao
39c4918a40 screen_ui: Drop the parameter in CheckBackgroundTextImages.
ScreenRecoveryUI already has the info in locale_.

Also when showing "Current locale: X/Y" on screen, use 1-based index for
X, so that we have 1 <= X <= Y.

Test: Build anf flash recovery image on aosp_bullhead-userdebug. Choose
      `Run locale test` from UI.
Change-Id: I5dd4de82e63890ddf755f4e23cd2290ad5d50ece
2018-05-07 23:50:50 -07:00
Jerry Zhang
2dea53ef2b recovery: Get UI and locale from device.
This removes some reliance on the global
locale and ui variables.

Test: Recovery works
Bug: 78793464
Change-Id: I78f1a2b321f5d50aa58b10735a73ae137283353a
2018-05-08 06:09:54 +00:00
Tao Bao
83ff1f0b05 recovery: Remove unneeded include of minui.h.
Test: mmma -j bootable/recovery
Change-Id: I1a79fa6386d56bf5e20ee074352d287403d2d745
2018-05-07 20:31:26 -07:00
Tao Bao
5285c27bf4 Merge "recovery: Refactor logging code into logging.cpp" 2018-05-08 03:30:50 +00:00
Tao Bao
0ffe13b56f Merge "updater: Skip an updated partition on retry." 2018-05-08 00:57:14 +00:00
Tao Bao
1dc9e2ddef Merge "updater: Fix an issue when resuming an update." 2018-05-08 00:16:32 +00:00
Tao Bao
98f875eee7 updater: Fix an issue when resuming an update.
We cannot skip "new" commands while resuming an update with
last_command_file, because they read in the data sequentially from the
package.

Bug: 69858743
Test: Interrupt an update that has new commands. Check the update log.
Change-Id: I05fb67246f5ea3ba2a0f78f10255c0d9b0bc2f5a
2018-05-07 22:14:45 +00:00
Tao Bao
864c668dd2 updater: Skip an updated partition on retry.
Prior to the change, the BBOTA updater would try to re-run all the
commands for a given partition on retry, including creating stashes
according to the list of commands. This could fail a retry when the
previous update had moved on to next stage, with leftovers in /cache.

This CL creates a marker on /cache upon successfully updating a
partition. The update commands will be skipped when trying to apply
updates on an updated partition. Note that the marker is expected to be
removed while doing a normal boot (in particular, handled by
RecoverySystem#handleAftermath). If that didn't happen, the updater
would also remove the marker before starting next fresh update.

Alternatively, we can achieve the same goal by changing the OTA script,
which needs to additionally compare the checksum against the target
build. For example,

  range_sha1("/system", "ranges") == SHA1_of_updated_system ||
  block_image_update("/system");

The downside is that we need to pay that cost on each install, as the
edify script doesn't support caching the result in a variable.

Bug: 79165963
Test: Simulate the process on device (by triggering a reboot while
      updating /vendor). Check the update log and result.
Change-Id: I731031fa336133e1221b33edfc469969706e8091
2018-05-07 15:05:00 -07:00