summaryrefslogtreecommitdiffstats
path: root/core/java/com
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2014-07-08 11:28:00 -0700
committerJeff Sharkey <jsharkey@android.com>2014-07-09 16:55:56 -0700
commitec55ef0934b8e0d1bb705434947de817f7be57f1 (patch)
tree4855af37aa2c312bc2a645f5d94c463a2859d516 /core/java/com
parent2cfc8482267707a671cbe4275ea8927c1aef991a (diff)
downloadframeworks_base-ec55ef0934b8e0d1bb705434947de817f7be57f1.zip
frameworks_base-ec55ef0934b8e0d1bb705434947de817f7be57f1.tar.gz
frameworks_base-ec55ef0934b8e0d1bb705434947de817f7be57f1.tar.bz2
Extend pm to support sessions and split APKs.
Separate commands to create an install session, stream files into the staging area, and then commit the install. Streaming can accept data from stdin across adb, avoiding extra copy from push. Extend FileBridge to support blocking close(). Always destroy session regardless of result. Bug: 14975160 Change-Id: Ic3f462e7d1901079b785e210228950cdfa676466
Diffstat (limited to 'core/java/com')
-rw-r--r--core/java/com/android/internal/util/SizedInputStream.java66
1 files changed, 66 insertions, 0 deletions
diff --git a/core/java/com/android/internal/util/SizedInputStream.java b/core/java/com/android/internal/util/SizedInputStream.java
new file mode 100644
index 0000000..00a729d
--- /dev/null
+++ b/core/java/com/android/internal/util/SizedInputStream.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.internal.util;
+
+import libcore.io.Streams;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Reads exact number of bytes from wrapped stream, returning EOF once those
+ * bytes have been read.
+ */
+public class SizedInputStream extends InputStream {
+ private final InputStream mWrapped;
+ private long mLength;
+
+ public SizedInputStream(InputStream wrapped, long length) {
+ mWrapped = wrapped;
+ mLength = length;
+ }
+
+ @Override
+ public void close() throws IOException {
+ super.close();
+ mWrapped.close();
+ }
+
+ @Override
+ public int read() throws IOException {
+ return Streams.readSingleByte(this);
+ }
+
+ @Override
+ public int read(byte[] buffer, int byteOffset, int byteCount) throws IOException {
+ if (mLength <= 0) {
+ return -1;
+ } else if (byteCount > mLength) {
+ byteCount = (int) mLength;
+ }
+
+ final int n = mWrapped.read(buffer, byteOffset, byteCount);
+ if (n == -1) {
+ if (mLength > 0) {
+ throw new IOException("Unexpected EOF; expected " + mLength + " more bytes");
+ }
+ } else {
+ mLength -= n;
+ }
+ return n;
+ }
+}