summaryrefslogtreecommitdiffstats
path: root/updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java
diff options
context:
space:
mode:
Diffstat (limited to 'updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java')
-rw-r--r--updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java112
1 files changed, 52 insertions, 60 deletions
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<PackageFile> 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,43 +175,11 @@ 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<String> getAuthorization() {
- return mAuthorization == null ? Optional.empty() : Optional.of(mAuthorization);
- }
- }
-
- /**
* Description of a file in an OTA package zip file.
*/
public static class PackageFile implements Serializable {
@@ -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<String> getAuthorization() {
+ return mAuthorization == null ? Optional.empty() : Optional.of(mAuthorization);
+ }
}
}