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

Side by Side Diff: device/nfc/nfc_ndef_record.h

Issue 2292703002: chromeos: Remove unused NFC D-Bus client library (Closed)
Patch Set: rebase Created 4 years, 3 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
« no previous file with comments | « device/nfc/nfc_chromeos_unittest.cc ('k') | device/nfc/nfc_ndef_record.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 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 #ifndef DEVICE_NFC_NFC_NDEF_RECORD_H_
6 #define DEVICE_NFC_NFC_NDEF_RECORD_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/macros.h"
12 #include "base/values.h"
13
14 namespace device {
15
16 // NfcNdefRecord represents an NDEF (NFC Data Exchange Format) record. NDEF is
17 // a light-weight binary format specified by the NFC Forum for transmission and
18 // storage of typed data over NFC. NDEF defines two constructs: NDEF records and
19 // messages. An NDEF record contains typed data, such as MIME-type media, a URI,
20 // or a custom application payload, whereas an NDEF message is a container for
21 // one or more NDEF records.
22 class NfcNdefRecord {
23 public:
24 // NDEF record types that define the payload of the NDEF record.
25 enum Type {
26 kTypeHandoverCarrier,
27 kTypeHandoverRequest,
28 kTypeHandoverSelect,
29 kTypeSmartPoster,
30 kTypeText,
31 kTypeURI,
32 kTypeUnknown
33 };
34
35 // The following are strings that define a possible field of an NDEF record.
36 // These strings are used as the keys in the dictionary returned by |data|.
37 // Not all fields are always present in an NDEF record, where the presence
38 // of a field depends on the type of the record. While some fields are
39 // required for a specific record type, others can be optional and won't
40 // always be present.
41
42 // Fields for type "Text".
43
44 // The character encoding. When present, the value is one of |kEncodingUtf8|
45 // and |kEncodingUtf16|. Otherwise, this field is optional.
46 static const char kFieldEncoding[];
47
48 // The ISO/IANA language code (e.g. "en" or "jp"). This field is optional.
49 static const char kFieldLanguageCode[];
50
51 // The human readable representation of a text. This field is mandatory.
52 static const char kFieldText[];
53
54 // Fields for type "URI".
55
56 // The complete URI, including the scheme and the resource. This field is
57 // required.
58 static const char kFieldURI[];
59
60 // The URI object MIME type. This is a description of the MIME type of the
61 // object the URI points at. This field is optional.
62 static const char kFieldMimeType[];
63
64 // The size of the object the URI points at. This field is optional.
65 // If present, the value is an unsigned integer. Since base/values.h does not
66 // define an unsigned integer type, use a base::DoubleValue to store this.
67 static const char kFieldTargetSize[];
68
69 // Fields for type "SmartPoster". A SmartPoster can contain all possible
70 // fields of a "URI" record, in addition to the following:
71
72 // The "title" of the SmartPoster. This is an optional field. If present, the
73 // value of this field is a list of dictionaries, where each dictionary
74 // contains the possible fields of a "Text" record. If the list contains
75 // more than one element, each element usually represents the same "title"
76 // text in a different language.
77 static const char kFieldTitles[];
78
79 // The suggested course of action. The value of this field is one of
80 // |kSmartPosterAction*|. This field is optional.
81 static const char kFieldAction[];
82
83 // Possible values for character encoding.
84 static const char kEncodingUtf8[];
85 static const char kEncodingUtf16[];
86
87 // Possible actions defined by the NFC forum SmartPoster record type. Each
88 // action is a suggestion to the application indicating the action it should
89 // take with the contents of the record.
90
91 // Do the action. e.g. open a URI, send an SMS, dial a phone number.
92 static const char kSmartPosterActionDo[];
93
94 // Store data, e.g. store an SMS, bookmark a URI, etc.
95 static const char kSmartPosterActionSave[];
96
97 // Open the data for editing.
98 static const char kSmartPosterActionOpen[];
99
100 NfcNdefRecord();
101 virtual ~NfcNdefRecord();
102
103 // Returns the type that defines the payload of this NDEF record.
104 Type type() const { return type_; }
105
106 // Returns the contents of this record in the form of a mapping from keys
107 // declared above to their stored values.
108 const base::DictionaryValue& data() const { return data_; }
109
110 // Returns true, if this record has been populated via a call to "Populate".
111 bool IsPopulated() const;
112
113 // Populates the record with the contents of |data| and sets its type to
114 // |type|. Returns true, if the record was successfully populated. If a
115 // failure occurs, e.g. |data| contains values that are not allowed in
116 // records of type |type| or if |data| does not contain mandatory fields of
117 // |type|, this method returns false. Populating an instance of an
118 // NfcNdefRecord is allowed only once and after a successful call to this
119 // method, all subsequent calls to this method will fail. Use IsPopulated()
120 // to determine if this record can be populated.
121 bool Populate(Type type, const base::DictionaryValue* data);
122
123 private:
124 // The type of this record.
125 Type type_;
126
127 // The contents of the record.
128 base::DictionaryValue data_;
129
130 DISALLOW_COPY_AND_ASSIGN(NfcNdefRecord);
131 };
132
133 // NfcNdefMessage represent an NDEF message. An NDEF message, contains one or
134 // more NDEF records and the order in which the records are stored dictates the
135 // order in which applications are meant to interpret them. For example, a
136 // client may decide to dispatch to applications based on the first record in
137 // the sequence.
138 class NfcNdefMessage {
139 public:
140 // Typedef for a list of NDEF records.
141 typedef std::vector<NfcNdefRecord*> RecordList;
142
143 NfcNdefMessage();
144 virtual ~NfcNdefMessage();
145
146 // The NDEF records that are contained in this message.
147 const RecordList& records() const { return records_; }
148
149 // Adds the NDEF record |record| to the sequence of records that this
150 // NfcNdefMessage contains. This method simply adds the record to this message
151 // and does NOT take ownership of it.
152 void AddRecord(NfcNdefRecord* record);
153
154 // Removes the NDEF record |record| from this message. Returns true, if the
155 // record was removed, otherwise returns false if |record| was not contained
156 // in this message.
157 bool RemoveRecord(NfcNdefRecord* record);
158
159 private:
160 // The NDEF records that are contained by this message.
161 RecordList records_;
162
163 DISALLOW_COPY_AND_ASSIGN(NfcNdefMessage);
164 };
165
166 } // namespace device
167
168 #endif // DEVICE_NFC_NFC_NDEF_RECORD_H_
OLDNEW
« no previous file with comments | « device/nfc/nfc_chromeos_unittest.cc ('k') | device/nfc/nfc_ndef_record.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698