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) {
54116871653662979554a7326991ba4fd599ac44ffNick Pelly        String mimeType = record.toMimeType();
555f90b8ac1de415b3081525936b094e9a326c659eMartijn Coenen        if (mimeType == null) {
565f90b8ac1de415b3081525936b094e9a326c659eMartijn Coenen            throw new IllegalArgumentException("not a valid image file");
575f90b8ac1de415b3081525936b094e9a326c659eMartijn Coenen        }
58116871653662979554a7326991ba4fd599ac44ffNick Pelly        Preconditions.checkArgument(mimeType.startsWith("image/"));
59760fe581f6750edd81df4d86cead28a5b9070620Ben Komalo
60081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        // Try to ensure it's a legal, valid image
61116871653662979554a7326991ba4fd599ac44ffNick Pelly        byte[] content = record.getPayload();
62081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        Bitmap bitmap = BitmapFactory.decodeByteArray(content, 0, content.length);
63081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        if (bitmap == null) {
64081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich            throw new IllegalArgumentException("not a valid image file");
65081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        }
66081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        return new ImageRecord(bitmap);
67081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    }
68081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich
69081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    public static boolean isImage(NdefRecord record) {
70081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        try {
71081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich            parse(record);
72081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich            return true;
73081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        } catch (IllegalArgumentException e) {
74081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich            return false;
75081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich        }
76081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich    }
77760fe581f6750edd81df4d86cead28a5b9070620Ben Komalo
78eac4f94910e1f034d57c54e4f53a34786bc4bb4cBen Komalo    public static NdefRecord newImageRecord(Bitmap bitmap) {
79eac4f94910e1f034d57c54e4f53a34786bc4bb4cBen Komalo        ByteArrayOutputStream out = new ByteArrayOutputStream();
80b66ce65720e4e1cad7ab92efdac4691ec6552ca9Ben Komalo        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
81eac4f94910e1f034d57c54e4f53a34786bc4bb4cBen Komalo        byte[] content = out.toByteArray();
82116871653662979554a7326991ba4fd599ac44ffNick Pelly        return NdefRecord.createMime("image/jpeg", content);
83eac4f94910e1f034d57c54e4f53a34786bc4bb4cBen Komalo    }
84081de56bfdd18f47025ef7af85b45592db244233Nick Kralevich}
85