summaryrefslogtreecommitdiffstats
path: root/src/com/android/phone/common/mail/PeekableInputStream.java
diff options
context:
space:
mode:
authorNancy Chen <nancychen@google.com>2015-03-19 16:28:55 -0700
committerNancy Chen <nancychen@google.com>2015-03-25 12:49:57 -0700
commit98750f5774070527403035d1713ea59abd71ec08 (patch)
tree9286ec4e2ea1225e3b087d9aaab5d3a1f058fcaa /src/com/android/phone/common/mail/PeekableInputStream.java
parente36994bef9400604210d81c98598cab7c256a6f6 (diff)
downloadpackages_apps_PhoneCommon-98750f5774070527403035d1713ea59abd71ec08.tar.gz
packages_apps_PhoneCommon-98750f5774070527403035d1713ea59abd71ec08.tar.bz2
packages_apps_PhoneCommon-98750f5774070527403035d1713ea59abd71ec08.zip
Imap client implementation classes and helpers.
Direct interaction - ImapConnection, ImapFolder, ImapStore, MailTransport - ImapStore holds the credentials, ImapFolder handles folder-specific actions, ImapConnection sets up the connection to the server, MailTransport makes the connection and submits the requested actions. Bug 19236241 Change-Id: Id492353899ec04598735408e45ecf79b17154ea8
Diffstat (limited to 'src/com/android/phone/common/mail/PeekableInputStream.java')
-rw-r--r--src/com/android/phone/common/mail/PeekableInputStream.java80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/com/android/phone/common/mail/PeekableInputStream.java b/src/com/android/phone/common/mail/PeekableInputStream.java
new file mode 100644
index 0000000..d29fc6b
--- /dev/null
+++ b/src/com/android/phone/common/mail/PeekableInputStream.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2015 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.phone.common.mail;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * A filtering InputStream that allows single byte "peeks" without consuming the byte. The
+ * client of this stream can call peek() to see the next available byte in the stream
+ * and a subsequent read will still return the peeked byte.
+ */
+public class PeekableInputStream extends InputStream {
+ private final InputStream mIn;
+ private boolean mPeeked;
+ private int mPeekedByte;
+
+ public PeekableInputStream(InputStream in) {
+ this.mIn = in;
+ }
+
+ @Override
+ public int read() throws IOException {
+ if (!mPeeked) {
+ return mIn.read();
+ } else {
+ mPeeked = false;
+ return mPeekedByte;
+ }
+ }
+
+ public int peek() throws IOException {
+ if (!mPeeked) {
+ mPeekedByte = read();
+ mPeeked = true;
+ }
+ return mPeekedByte;
+ }
+
+ @Override
+ public int read(byte[] b, int offset, int length) throws IOException {
+ if (!mPeeked) {
+ return mIn.read(b, offset, length);
+ } else {
+ b[0] = (byte)mPeekedByte;
+ mPeeked = false;
+ int r = mIn.read(b, offset + 1, length - 1);
+ if (r == -1) {
+ return 1;
+ } else {
+ return r + 1;
+ }
+ }
+ }
+
+ @Override
+ public int read(byte[] b) throws IOException {
+ return read(b, 0, b.length);
+ }
+
+ @Override
+ public String toString() {
+ return String.format("PeekableInputStream(in=%s, peeked=%b, peekedByte=%d)",
+ mIn.toString(), mPeeked, mPeekedByte);
+ }
+} \ No newline at end of file