From 88712f7610c1c51ee9a58e17ad9f3e1b8425eba9 Mon Sep 17 00:00:00 2001 From: Zhomart Mukhamejanov Date: Tue, 21 Aug 2018 12:19:02 -0700 Subject: Move ab_streaming_metadata under ab_config. Add new config: ab_config.verify_payload_metadata. Change-Id: I521dff92166c33dd9c2efa498dc599fe4bc83fde Signed-off-by: Zhomart Mukhamejanov Test: mmm, junit Bug: 77150191 --- .../android/systemupdatersample/UpdateConfig.java | 112 ++++++++++----------- .../android/systemupdatersample/UpdateManager.java | 2 +- .../services/PrepareStreamingService.java | 4 +- .../systemupdatersample/util/UpdateConfigs.java | 4 +- 4 files changed, 57 insertions(+), 65 deletions(-) (limited to 'updater_sample/src/com/example/android/systemupdatersample') diff --git a/updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java b/updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java index 1e0fadc27..61872a634 100644 --- a/updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java +++ b/updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java @@ -25,6 +25,7 @@ import org.json.JSONObject; import java.io.File; import java.io.Serializable; +import java.util.ArrayList; import java.util.Optional; /** @@ -67,31 +68,28 @@ public class UpdateConfig implements Parcelable { throw new JSONException("Invalid type, expected either " + "NON_STREAMING or STREAMING, got " + o.getString("ab_install_type")); } - if (c.mAbInstallType == AB_INSTALL_TYPE_STREAMING) { - JSONObject meta = o.getJSONObject("ab_streaming_metadata"); - JSONArray propertyFilesJson = meta.getJSONArray("property_files"); - PackageFile[] propertyFiles = - new PackageFile[propertyFilesJson.length()]; + + // TODO: parse only for A/B updates when non-A/B is implemented + JSONObject ab = o.getJSONObject("ab_config"); + boolean forceSwitchSlot = ab.getBoolean("force_switch_slot"); + boolean verifyPayloadMetadata = ab.getBoolean("verify_payload_metadata"); + ArrayList propertyFiles = new ArrayList<>(); + if (ab.has("property_files")) { + JSONArray propertyFilesJson = ab.getJSONArray("property_files"); for (int i = 0; i < propertyFilesJson.length(); i++) { JSONObject p = propertyFilesJson.getJSONObject(i); - propertyFiles[i] = new PackageFile( + propertyFiles.add(new PackageFile( p.getString("filename"), p.getLong("offset"), - p.getLong("size")); - } - String authorization = null; - if (meta.has("authorization")) { - authorization = meta.getString("authorization"); + p.getLong("size"))); } - c.mAbStreamingMetadata = new StreamingMetadata( - propertyFiles, - authorization); } - - // TODO: parse only for A/B updates when non-A/B is implemented - JSONObject ab = o.getJSONObject("ab_config"); - boolean forceSwitchSlot = ab.getBoolean("force_switch_slot"); - c.mAbConfig = new AbConfig(forceSwitchSlot); + String authorization = ab.optString("authorization", null); + c.mAbConfig = new AbConfig( + forceSwitchSlot, + verifyPayloadMetadata, + propertyFiles.toArray(new PackageFile[0]), + authorization); c.mRawJson = json; return c; @@ -112,9 +110,6 @@ public class UpdateConfig implements Parcelable { /** non-streaming (first saves locally) OR streaming (on the fly) */ private int mAbInstallType; - /** metadata is required only for streaming update */ - private StreamingMetadata mAbStreamingMetadata; - /** A/B update configurations */ private AbConfig mAbConfig; @@ -127,7 +122,6 @@ public class UpdateConfig implements Parcelable { this.mName = in.readString(); this.mUrl = in.readString(); this.mAbInstallType = in.readInt(); - this.mAbStreamingMetadata = (StreamingMetadata) in.readSerializable(); this.mAbConfig = (AbConfig) in.readSerializable(); this.mRawJson = in.readString(); } @@ -154,10 +148,6 @@ public class UpdateConfig implements Parcelable { return mAbInstallType; } - public StreamingMetadata getStreamingMetadata() { - return mAbStreamingMetadata; - } - public AbConfig getAbConfig() { return mAbConfig; } @@ -185,42 +175,10 @@ public class UpdateConfig implements Parcelable { dest.writeString(mName); dest.writeString(mUrl); dest.writeInt(mAbInstallType); - dest.writeSerializable(mAbStreamingMetadata); dest.writeSerializable(mAbConfig); dest.writeString(mRawJson); } - /** - * Metadata for streaming A/B update. - */ - public static class StreamingMetadata implements Serializable { - - private static final long serialVersionUID = 31042L; - - /** defines beginning of update data in archive */ - private PackageFile[] mPropertyFiles; - - /** - * SystemUpdaterSample receives the authorization token from the OTA server, in addition - * to the package URL. It passes on the info to update_engine, so that the latter can - * fetch the data from the package server directly with the token. - */ - private String mAuthorization; - - public StreamingMetadata(PackageFile[] propertyFiles, String authorization) { - this.mPropertyFiles = propertyFiles; - this.mAuthorization = authorization; - } - - public PackageFile[] getPropertyFiles() { - return mPropertyFiles; - } - - public Optional getAuthorization() { - return mAuthorization == null ? Optional.empty() : Optional.of(mAuthorization); - } - } - /** * Description of a file in an OTA package zip file. */ @@ -269,14 +227,48 @@ public class UpdateConfig implements Parcelable { */ private boolean mForceSwitchSlot; - public AbConfig(boolean forceSwitchSlot) { + /** + * if set true device will boot to new slot, otherwise user manually + * switches slot on the screen. + */ + private boolean mVerifyPayloadMetadata; + + /** defines beginning of update data in archive */ + private PackageFile[] mPropertyFiles; + + /** + * SystemUpdaterSample receives the authorization token from the OTA server, in addition + * to the package URL. It passes on the info to update_engine, so that the latter can + * fetch the data from the package server directly with the token. + */ + private String mAuthorization; + + public AbConfig( + boolean forceSwitchSlot, + boolean verifyPayloadMetadata, + PackageFile[] propertyFiles, + String authorization) { this.mForceSwitchSlot = forceSwitchSlot; + this.mVerifyPayloadMetadata = verifyPayloadMetadata; + this.mPropertyFiles = propertyFiles; + this.mAuthorization = authorization; } public boolean getForceSwitchSlot() { return mForceSwitchSlot; } + public boolean getVerifyPayloadMetadata() { + return mVerifyPayloadMetadata; + } + + public PackageFile[] getPropertyFiles() { + return mPropertyFiles; + } + + public Optional getAuthorization() { + return mAuthorization == null ? Optional.empty() : Optional.of(mAuthorization); + } } } diff --git a/updater_sample/src/com/example/android/systemupdatersample/UpdateManager.java b/updater_sample/src/com/example/android/systemupdatersample/UpdateManager.java index a9783e70a..12a8f3f5f 100644 --- a/updater_sample/src/com/example/android/systemupdatersample/UpdateManager.java +++ b/updater_sample/src/com/example/android/systemupdatersample/UpdateManager.java @@ -324,7 +324,7 @@ public class UpdateManager { if (code == PrepareStreamingService.RESULT_CODE_SUCCESS) { builder.setPayload(payloadSpec); builder.addExtraProperty("USER_AGENT=" + HTTP_USER_AGENT); - config.getStreamingMetadata() + config.getAbConfig() .getAuthorization() .ifPresent(s -> builder.addExtraProperty("AUTHORIZATION=" + s)); updateEngineApplyPayload(builder.build()); diff --git a/updater_sample/src/com/example/android/systemupdatersample/services/PrepareStreamingService.java b/updater_sample/src/com/example/android/systemupdatersample/services/PrepareStreamingService.java index ac6e223e3..931404857 100644 --- a/updater_sample/src/com/example/android/systemupdatersample/services/PrepareStreamingService.java +++ b/updater_sample/src/com/example/android/systemupdatersample/services/PrepareStreamingService.java @@ -173,7 +173,7 @@ public class PrepareStreamingService extends IntentService { } /** - * Downloads files defined in {@link UpdateConfig#getStreamingMetadata()} + * Downloads files defined in {@link UpdateConfig#getAbConfig()} * and exists in {@code PRE_STREAMING_FILES_SET}, and put them * in directory {@code dir}. * @throws IOException when can't download a file @@ -185,7 +185,7 @@ public class PrepareStreamingService extends IntentService { Files.deleteIfExists(Paths.get(OTA_PACKAGE_DIR, file)); } Log.d(TAG, "Downloading files to " + dir); - for (UpdateConfig.PackageFile file : config.getStreamingMetadata().getPropertyFiles()) { + for (UpdateConfig.PackageFile file : config.getAbConfig().getPropertyFiles()) { if (PRE_STREAMING_FILES_SET.contains(file.getFilename())) { Log.d(TAG, "Downloading file " + file.getFilename()); FileDownloader downloader = new FileDownloader( diff --git a/updater_sample/src/com/example/android/systemupdatersample/util/UpdateConfigs.java b/updater_sample/src/com/example/android/systemupdatersample/util/UpdateConfigs.java index 5080cb6d8..bbefcaf16 100644 --- a/updater_sample/src/com/example/android/systemupdatersample/util/UpdateConfigs.java +++ b/updater_sample/src/com/example/android/systemupdatersample/util/UpdateConfigs.java @@ -83,7 +83,7 @@ public final class UpdateConfigs { /** * @param filename searches by given filename - * @param config searches in {@link UpdateConfig#getStreamingMetadata()} + * @param config searches in {@link UpdateConfig#getAbConfig()} * @return offset and size of {@code filename} in the package zip file * stored as {@link UpdateConfig.PackageFile}. */ @@ -91,7 +91,7 @@ public final class UpdateConfigs { final String filename, UpdateConfig config) { return Arrays - .stream(config.getStreamingMetadata().getPropertyFiles()) + .stream(config.getAbConfig().getPropertyFiles()) .filter(file -> filename.equals(file.getFilename())) .findFirst(); } -- cgit v1.2.3