1081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich/*
2081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich * Copyright (C) 2010 The Android Open Source Project
3081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich *
4081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich * Licensed under the Apache License, Version 2.0 (the "License");
5081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich * you may not use this file except in compliance with the License.
6081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich * You may obtain a copy of the License at
7081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich *
8081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich *      http://www.apache.org/licenses/LICENSE-2.0
9081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich *
10081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich * Unless required by applicable law or agreed to in writing, software
11081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich * distributed under the License is distributed on an "AS IS" BASIS,
12081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich * See the License for the specific language governing permissions and
14081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich * limitations under the License.
15081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich */
16081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich
17081de56bfdd18f47025ef7af85b45592db244233Nick Kralevichpackage com.android.apps.tag.record;
18081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich
19760fe581f6750edd81df4d86cead28a5b9070620Ben Komaloimport com.android.apps.tag.R;
20760fe581f6750edd81df4d86cead28a5b9070620Ben Komaloimport com.google.common.base.Preconditions;
21760fe581f6750edd81df4d86cead28a5b9070620Ben Komalo
22081de56bfdd18f47025ef7af85b45592db244233Nick Kralevichimport android.app.Activity;
23081de56bfdd18f47025ef7af85b45592db244233Nick Kralevichimport android.graphics.Bitmap;
24081de56bfdd18f47025ef7af85b45592db244233Nick Kralevichimport android.graphics.BitmapFactory;
25081de56bfdd18f47025ef7af85b45592db244233Nick Kralevichimport android.nfc.NdefRecord;
26081de56bfdd18f47025ef7af85b45592db244233Nick Kralevichimport android.view.LayoutInflater;
27081de56bfdd18f47025ef7af85b45592db244233Nick Kralevichimport android.view.View;
28081de56bfdd18f47025ef7af85b45592db244233Nick Kralevichimport android.view.ViewGroup;
29081de56bfdd18f47025ef7af85b45592db244233Nick Kralevichimport android.widget.ImageView;
30081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich
31eac4f94910e1f034d57c54e4f53a34786bc4bb4cBen Komaloimport java.io.ByteArrayOutputStream;
32081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich
33081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich/**
34081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich * A NdefRecord corresponding to an image type.
35081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich */
3640d9a0cd0a37d184ee737b2d7138a39e4292ce3eJason parkspublic class ImageRecord extends ParsedNdefRecord {
37760fe581f6750edd81df4d86cead28a5b9070620Ben Komalo
38760fe581f6750edd81df4d86cead28a5b9070620Ben Komalo    public static final String RECORD_TYPE = "ImageRecord";
39760fe581f6750edd81df4d86cead28a5b9070620Ben Komalo
40081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    private final Bitmap mBitmap;
41081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich
42081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    private ImageRecord(Bitmap bitmap) {
43081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        mBitmap = Preconditions.checkNotNull(bitmap);
44081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    }
45081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich
46081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    @Override
4740d9a0cd0a37d184ee737b2d7138a39e4292ce3eJason parks    public View getView(Activity activity, LayoutInflater inflater, ViewGroup parent, int offset) {
48081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        ImageView image = (ImageView) inflater.inflate(R.layout.tag_image, parent, false);
49081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        image.setImageBitmap(mBitmap);
50081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        return image;
51081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    }
52081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich
53081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    public static ImageRecord parse(NdefRecord record) {
54081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        MimeRecord underlyingRecord = MimeRecord.parse(record);
55081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        Preconditions.checkArgument(underlyingRecord.getMimeType().startsWith("image/"));
56760fe581f6750edd81df4d86cead28a5b9070620Ben Komalo
57081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        // Try to ensure it's a legal, valid image
58081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        byte[] content = underlyingRecord.getContent();
59081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        Bitmap bitmap = BitmapFactory.decodeByteArray(content, 0, content.length);
60081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        if (bitmap == null) {
61081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich            throw new IllegalArgumentException("not a valid image file");
62081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        }
63081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        return new ImageRecord(bitmap);
64081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    }
65081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich
66081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    public static boolean isImage(NdefRecord record) {
67081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        try {
68081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich            parse(record);
69081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich            return true;
70081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        } catch (IllegalArgumentException e) {
71081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich            return false;
72081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        }
73081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    }
74760fe581f6750edd81df4d86cead28a5b9070620Ben Komalo
75eac4f94910e1f034d57c54e4f53a34786bc4bb4cBen Komalo    public static NdefRecord newImageRecord(Bitmap bitmap) {
76eac4f94910e1f034d57c54e4f53a34786bc4bb4cBen Komalo        ByteArrayOutputStream out = new ByteArrayOutputStream();
77b66ce65720e4e1cad7ab92efdac4691ec6552ca9Ben Komalo        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
78eac4f94910e1f034d57c54e4f53a34786bc4bb4cBen Komalo        byte[] content = out.toByteArray();
79b66ce65720e4e1cad7ab92efdac4691ec6552ca9Ben Komalo        return MimeRecord.newMimeRecord("image/jpeg", content);
80eac4f94910e1f034d57c54e4f53a34786bc4bb4cBen Komalo    }
81081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich}
82