Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1212)

Side by Side Diff: device/nfc/android/java/src/org/chromium/device/nfc/NfcTagHandler.java

Issue 1486043002: [webnfc] Implement push method for Android nfc mojo service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@step_6_add_mojo_service_CL
Patch Set: Move WindowAndroidChangedObserver to other observers in content layer Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.device.nfc;
6
7 import android.nfc.FormatException;
8 import android.nfc.NdefMessage;
9 import android.nfc.Tag;
10 import android.nfc.TagLostException;
11 import android.nfc.tech.Ndef;
12 import android.nfc.tech.NdefFormatable;
13 import android.nfc.tech.TagTechnology;
14
15 import java.io.IOException;
16
17 /**
18 * Utility class that provides I/O operations for NFC tags.
19 */
20 public final class NfcTagHandler {
21 private final TagTechnology mTech;
22 private final TagTechnologyHandler mTechHandler;
23 private boolean mWasConnected;
24
25 /**
26 * Factory method that creates NfcTagHandler for a given NFC Tag.
27 *
28 * @param tag @see android.nfc.Tag
29 * @return NfcTagHandler or null when unsupported Tag is provided.
30 */
31 public static NfcTagHandler create(Tag tag) {
32 if (tag == null) return null;
33
34 Ndef ndef = Ndef.get(tag);
35 if (ndef != null) return new NfcTagHandler(ndef, new NdefHandler(ndef));
36
37 NdefFormatable formattable = NdefFormatable.get(tag);
38 if (formattable != null) {
39 return new NfcTagHandler(formattable, new NdefFormattableHandler(for mattable));
40 }
41
42 return null;
43 }
44
45 /**
46 * NdefFormatable and Ndef interfaces have different signatures for operatin g with NFC tags.
47 * This interface provides generic methods.
48 */
49 private interface TagTechnologyHandler {
50 public void write(NdefMessage message)
51 throws IOException, TagLostException, FormatException;
52 // TODO(crbug.com/625589): add read method for nfc.watch.
53 }
54
55 /**
56 * Implementation of TagTechnologyHandler that uses Ndef tag technology.
57 * @see android.nfc.tech.Ndef
58 */
59 private static class NdefHandler implements TagTechnologyHandler {
60 private final Ndef mNdef;
61
62 NdefHandler(Ndef ndef) {
63 mNdef = ndef;
64 }
65
66 public void write(NdefMessage message)
67 throws IOException, TagLostException, FormatException {
68 mNdef.writeNdefMessage(message);
69 }
70 }
71
72 /**
73 * Implementation of TagTechnologyHandler that uses NdefFormatable tag techn ology.
74 * @see android.nfc.tech.NdefFormatable
75 */
76 private static class NdefFormattableHandler implements TagTechnologyHandler {
77 private final NdefFormatable mNdefFormattable;
78
79 NdefFormattableHandler(NdefFormatable ndefFormattable) {
80 mNdefFormattable = ndefFormattable;
81 }
82
83 public void write(NdefMessage message)
84 throws IOException, TagLostException, FormatException {
85 mNdefFormattable.format(message);
86 }
87 }
88
89 private NfcTagHandler(TagTechnology tech, TagTechnologyHandler handler) {
90 mTech = tech;
91 mTechHandler = handler;
92 }
93
94 /**
95 * Connects to NFC tag.
96 */
97 public void connect() throws IOException, TagLostException {
98 if (!mTech.isConnected()) {
99 mTech.connect();
100 mWasConnected = true;
101 }
102 }
103
104 /**
105 * Closes connection.
106 */
107 public void close() throws IOException {
108 mTech.close();
109 }
110
111 /**
112 * Writes NdefMessage to NFC tag.
113 */
114 public void write(NdefMessage message) throws IOException, TagLostException, FormatException {
115 mTechHandler.write(message);
116 }
117
118 /**
119 * If tag was previously connected and subsequent connection to the same tag fails, consider
120 * tag to be out of range.
121 */
122 public boolean isTagOutOfRange() {
123 try {
124 connect();
125 } catch (IOException e) {
126 return mWasConnected;
127 }
128 return false;
129 }
130 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698