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