1/*
2 * Copyright (C) 2009 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ANDROID_EMOJI_FACTORY_H
18#define ANDROID_EMOJI_FACTORY_H
19
20namespace android {
21
22// Abstract class for EmojiFactory.
23//
24// Here, PUA (or Android PUA) means Unicode PUA defined for various emoji. The
25// PUA supports emoji of DoCoMo, KDDI, Softbank and Goomoji. Each PUA defined
26// by the other vendors (careers) are called Vendor Specific PUA (vsp).
27// For more information, go
28// http://unicode.org/~mdavis/08080r-emoji-proposal/ (tentative)
29class EmojiFactory {
30 public:
31  virtual ~EmojiFactory() {}
32  // Returns binary image data corresponding to "pua". The size of binary is
33  // stored to "size". Returns NULL if there's no mapping from the "pua" to a
34  // specific image. Currently, image format is all (animated) gif.
35  //
36  // TODO(dmiyakawa): there should be a way to tell users the format of the
37  // binary.
38  virtual const char *GetImageBinaryFromAndroidPua(int pua, int *size) = 0;
39
40  // Returns binary image data corresponding to "sjis", which is defined by
41  // each career. Returns NULL when there's no mapping for "sjis".
42  virtual const char *GetImageBinaryFromVendorSpecificSjis(unsigned short sjis,
43                                                           int *size) {
44    return GetImageBinaryFromAndroidPua(
45        GetAndroidPuaFromVendorSpecificSjis(sjis), size);
46  }
47
48  // Returns binary image data corresponding to Vendor-specific PUA "vsp".
49  // Returns NULL when there's no mapping for "vsp".
50  virtual const char *GetImageBinaryFromVendorSpecificPua(int vsp,
51                                                          int *size) {
52    return GetImageBinaryFromAndroidPua(
53        GetAndroidPuaFromVendorSpecificPua(vsp), size);
54  }
55
56  // Returns Android PUA corresponding to "sjis". Returns -1 when there's no
57  // mapping from "sjis" to a Android PUA.
58  virtual int GetAndroidPuaFromVendorSpecificSjis(unsigned short sjis) = 0;
59
60  // Returns Vendor-specific Shift jis code corresponding to "pua". Returns -1
61  // when ther's no mapping from "pua" to a specific sjis.
62  virtual int GetVendorSpecificSjisFromAndroidPua(int pua) = 0;
63
64  // Returns maximum Vendor-Specific PUA. This is the last valid value.
65  virtual int GetMaximumVendorSpecificPua() = 0;
66
67  // Returns minimum Vendor-Specific PUA.
68  virtual int GetMinimumVendorSpecificPua() = 0;
69
70  // Returns maximum Android PUA. This the last valid value.
71  virtual int GetMaximumAndroidPua() = 0;
72
73  // Returns minimum Android PUA.
74  virtual int GetMinimumAndroidPua() = 0;
75
76  // Returns Android PUA corresponding to Vendor-Specific Unicode "vsp". Returns
77  // -1 when there's no mapping from "vsp" to a Android PUA.
78  virtual int GetAndroidPuaFromVendorSpecificPua(int vsp) = 0;
79
80  // Returns Vendor-specific PUA corresponding to "pua". Returns -1 when
81  // there's no mapping from "pua" to a specific unicode.
82  virtual int GetVendorSpecificPuaFromAndroidPua(int pua) = 0;
83
84  // Returns non NULL string which defines the name of this factory.
85  // e.g. "docomo", "goomoji"
86  virtual const char *Name() const = 0;
87
88  // Get a specific implementation of EmojiFactory. If there's no implementation
89  // for "name", returns NULL.
90  // The ownership of the instance remains to this class, so users must not
91  // release it.
92  static EmojiFactory *GetImplementation(const char *name);
93
94  // Get an implementation of EmojiFactory. This assumes that, usually, there
95  // should be only one possible EmojiFactory implementation. If there are more
96  // than one implementations, most prefered one is returned.
97  // The ownership of the instance remains to this class, so users must not
98  // release it.
99  static EmojiFactory *GetAvailableImplementation();
100};
101
102}  // namespace android
103
104#endif // ANDROID_EMOJI_FACTORY_H
105