17d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project/*
27d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project
37d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project *
47d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * you may not use this file except in compliance with the License.
67d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * You may obtain a copy of the License at
77d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project *
87d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project *
107d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * See the License for the specific language governing permissions and
147d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project * limitations under the License.
157d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project */
167d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
177d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project#ifndef ANDROID_EMOJI_FACTORY_H
187d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project#define ANDROID_EMOJI_FACTORY_H
197d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
207d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Projectnamespace android {
217d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
227d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// Abstract class for EmojiFactory.
237d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project//
247d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// Here, PUA (or Android PUA) means Unicode PUA defined for various emoji. The
257d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// PUA supports emoji of DoCoMo, KDDI, Softbank and Goomoji. Each PUA defined
267d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// by the other vendors (careers) are called Vendor Specific PUA (vsp).
277d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// For more information, go
287d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project// http://unicode.org/~mdavis/08080r-emoji-proposal/ (tentative)
297d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Projectclass EmojiFactory {
307d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project public:
317d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual ~EmojiFactory() {}
327d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns binary image data corresponding to "pua". The size of binary is
337d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // stored to "size". Returns NULL if there's no mapping from the "pua" to a
347d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // specific image. Currently, image format is all (animated) gif.
357d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  //
367d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // TODO(dmiyakawa): there should be a way to tell users the format of the
377d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // binary.
387d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual const char *GetImageBinaryFromAndroidPua(int pua, int *size) = 0;
397d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
407d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns binary image data corresponding to "sjis", which is defined by
417d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // each career. Returns NULL when there's no mapping for "sjis".
427d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual const char *GetImageBinaryFromVendorSpecificSjis(unsigned short sjis,
437d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project                                                           int *size) {
447d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project    return GetImageBinaryFromAndroidPua(
457d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project        GetAndroidPuaFromVendorSpecificSjis(sjis), size);
467d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  }
477d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
487d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns binary image data corresponding to Vendor-specific PUA "vsp".
497d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns NULL when there's no mapping for "vsp".
507d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual const char *GetImageBinaryFromVendorSpecificPua(int vsp,
517d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project                                                          int *size) {
527d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project    return GetImageBinaryFromAndroidPua(
537d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project        GetAndroidPuaFromVendorSpecificPua(vsp), size);
547d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  }
557d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
567d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns Android PUA corresponding to "sjis". Returns -1 when there's no
577d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // mapping from "sjis" to a Android PUA.
587d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual int GetAndroidPuaFromVendorSpecificSjis(unsigned short sjis) = 0;
597d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
607d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns Vendor-specific Shift jis code corresponding to "pua". Returns -1
617d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // when ther's no mapping from "pua" to a specific sjis.
627d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual int GetVendorSpecificSjisFromAndroidPua(int pua) = 0;
637d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
647d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns maximum Vendor-Specific PUA. This is the last valid value.
657d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual int GetMaximumVendorSpecificPua() = 0;
667d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
677d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns minimum Vendor-Specific PUA.
687d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual int GetMinimumVendorSpecificPua() = 0;
697d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
707d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns maximum Android PUA. This the last valid value.
717d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual int GetMaximumAndroidPua() = 0;
727d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
737d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns minimum Android PUA.
747d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual int GetMinimumAndroidPua() = 0;
757d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
767d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns Android PUA corresponding to Vendor-Specific Unicode "vsp". Returns
777d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // -1 when there's no mapping from "vsp" to a Android PUA.
787d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual int GetAndroidPuaFromVendorSpecificPua(int vsp) = 0;
797d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
807d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns Vendor-specific PUA corresponding to "pua". Returns -1 when
817d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // there's no mapping from "pua" to a specific unicode.
827d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual int GetVendorSpecificPuaFromAndroidPua(int pua) = 0;
837d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
847d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Returns non NULL string which defines the name of this factory.
857d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // e.g. "docomo", "goomoji"
867d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  virtual const char *Name() const = 0;
877d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
887d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Get a specific implementation of EmojiFactory. If there's no implementation
897d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // for "name", returns NULL.
90a1d448270a202fbb19131bf50d2f5a3896faef60The Android Open Source Project  // The ownership of the instance remains to this class, so users must not
91a1d448270a202fbb19131bf50d2f5a3896faef60The Android Open Source Project  // release it.
927d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  static EmojiFactory *GetImplementation(const char *name);
937d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
947d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // Get an implementation of EmojiFactory. This assumes that, usually, there
957d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // should be only one possible EmojiFactory implementation. If there are more
967d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  // than one implementations, most prefered one is returned.
97a1d448270a202fbb19131bf50d2f5a3896faef60The Android Open Source Project  // The ownership of the instance remains to this class, so users must not
98a1d448270a202fbb19131bf50d2f5a3896faef60The Android Open Source Project  // release it.
997d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project  static EmojiFactory *GetAvailableImplementation();
1007d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project};
1017d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
1027d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project}  // namespace android
1037d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project
1047d814fb9f0fd40667bb0338b7ca2cebfcc331dcThe Android Open Source Project#endif // ANDROID_EMOJI_FACTORY_H
105