1d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein/*
2d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein * Copyright (C) 2013 The Android Open Source Project
3d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein *
4d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein * Licensed under the Apache License, Version 2.0 (the "License");
5d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein * you may not use this file except in compliance with the License.
6d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein * You may obtain a copy of the License at
7d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein *
8d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein *      http://www.apache.org/licenses/LICENSE-2.0
9d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein *
10d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein * Unless required by applicable law or agreed to in writing, software
11d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein * distributed under the License is distributed on an "AS IS" BASIS,
12d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein * See the License for the specific language governing permissions and
14d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein * limitations under the License.
15d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein */
16d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
17d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinpackage com.example.bitmapsample;
18d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
19d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport com.android.bitmap.RequestKey;
20d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
21d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport java.io.IOException;
22d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport java.io.InputStream;
23d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport java.net.MalformedURLException;
24d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinimport java.net.URL;
25d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
26d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzsteinpublic class BitmapRequestKeyImpl implements RequestKey {
27d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    public final String mUriString;
28d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    public final URL mUrl;
29d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
302e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei    private boolean mSlept;
312e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei
32d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    public BitmapRequestKeyImpl(String uriString) {
33d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        mUriString = uriString;
34d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        URL url = null;
35d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        try {
36d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein            url = new URL(uriString);
37d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        } catch (MalformedURLException e) {
38d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein            e.printStackTrace();
39d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        }
40d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        mUrl = url;
412e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei        mSlept = false;
42d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    }
43d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
44d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    @Override
45d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    public boolean equals(Object o) {
46d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        if (o == null || !(o instanceof BitmapRequestKeyImpl)) {
47d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein            return false;
48d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        }
49d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        final BitmapRequestKeyImpl other = (BitmapRequestKeyImpl) o;
50d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        return mUriString.equals(other.mUriString);
51d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    }
52d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
53d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    @Override
54d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    public int hashCode() {
55d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        int hash = 17;
56d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        hash += 31 * hash + mUriString.hashCode();
57d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        return hash;
58d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    }
59d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
60d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    @Override
61d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    public String toString() {
62d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        final StringBuilder sb = new StringBuilder("[");
63d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        sb.append(mUriString);
64d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        sb.append("]");
65d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        return sb.toString();
66d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    }
67d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
68d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    @Override
699c6ac19d4a3d39b7c2992060957920118ff56a65Mark Wei    public Cancelable createFileDescriptorFactoryAsync(final RequestKey key,
709c6ac19d4a3d39b7c2992060957920118ff56a65Mark Wei            final Callback callback) {
71d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        return null;
72d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    }
73d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
74d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    @Override
75d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    public InputStream createInputStream() throws IOException {
762e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei        // Artificially sleep for (deterministically) random amount of time.
772e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei        if (!mSlept) {
782e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei            // Character difference between shortest and longest uri.
792e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei            final long spread = 26;
802e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei            // Maximum amount of time to sleep.
815030ae34cd5978a8ab8a06f6c3b69b8645873122Mark Wei            final long max = 3;
822e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei            final long duration = (long) ((float) (mUriString.length() % spread) / spread * max
832e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei                    * 1000);
842e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei            try {
852e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei                Thread.sleep(duration);
862e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei            } catch (InterruptedException ignored) {
872e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei            }
882e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei            mSlept = true;
892e4d0863dba53435372ec96538f2ef3e1c3675bfMark Wei        }
90d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        return mUrl.openStream();
91d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    }
92d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
93d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    @Override
94d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    public boolean hasOrientationExif() throws IOException {
95d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein        return false;
96d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein    }
97d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein
98d2e1718fa8e1199b03dc0d069711b24e946aa858Sam Blitzstein}