summaryrefslogtreecommitdiffstats
path: root/updater_sample/src/com/example/android/systemupdatersample
diff options
context:
space:
mode:
authorZhomart Mukhamejanov <zhomart@google.com>2018-08-21 21:19:02 +0200
committerZhomart Mukhamejanov <zhomart@google.com>2018-08-22 20:37:51 +0200
commit88712f7610c1c51ee9a58e17ad9f3e1b8425eba9 (patch)
treefb12b4509b8a8d7a07478433e33241de5c12fdea /updater_sample/src/com/example/android/systemupdatersample
parentMerge "recovery: Add "boot-fastboot" command to BCB." (diff)
downloadandroid_bootable_recovery-88712f7610c1c51ee9a58e17ad9f3e1b8425eba9.tar
android_bootable_recovery-88712f7610c1c51ee9a58e17ad9f3e1b8425eba9.tar.gz
android_bootable_recovery-88712f7610c1c51ee9a58e17ad9f3e1b8425eba9.tar.bz2
android_bootable_recovery-88712f7610c1c51ee9a58e17ad9f3e1b8425eba9.tar.lz
android_bootable_recovery-88712f7610c1c51ee9a58e17ad9f3e1b8425eba9.tar.xz
android_bootable_recovery-88712f7610c1c51ee9a58e17ad9f3e1b8425eba9.tar.zst
android_bootable_recovery-88712f7610c1c51ee9a58e17ad9f3e1b8425eba9.zip
Diffstat (limited to 'updater_sample/src/com/example/android/systemupdatersample')
-rw-r--r--updater_sample/src/com/example/android/systemupdatersample/UpdateConfig.java112
-rw-r--r--updater_sample/src/com/example/android/systemupdatersample/UpdateManager.java2
-rw-r--r--updater_sample/src/com/example/android/systemupdatersample/services/PrepareStreamingService.java4
-rw-r--r--updater_sample/src/com/example/android/systemupdatersample/util/UpdateConfigs.java4
4 files changed, 57 insertions, 65 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);
+ }
}
}
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();
}