Compare commits

...
Sign in to create a new pull request.

51 commits

Author SHA1 Message Date
4bb806585f merged latest version from https://github.com/firexel/emojicon/
but only seems to work with lollipop, so switch back to the old pictures
2015-08-12 21:43:04 +02:00
0ee1992da2 Fixes FS#38 - Issues with URLs with multiple dots in file name 2015-08-12 19:20:24 +02:00
473f035355 Fixes FS#33 - Get back the comment 2015-08-12 18:28:56 +02:00
steckbrief
b085643555 Fixes FS#20: Limitation of end conversation swipe to left side 2015-08-11 22:19:48 +02:00
8fd688ca96 Merge tag '1.5.2' into trz/rebase 2015-08-11 17:35:53 +02:00
steckbrief
553f41a2db Show Online status in contact list with respect to SHOW_ONLINE_STATUS preference 2015-06-19 23:12:24 +02:00
steckbrief
a73ce32e27 Status color added to "create conversation" (refers to ticket #22 in flyspray) 2015-06-19 23:11:44 +02:00
b3b4a2902e moved color picker to libs 2015-04-15 21:43:53 +02:00
549810783c changed received and read confirmation setting to one list and put it to settings class 2015-04-14 23:48:28 +02:00
8932dd9fb3 adjusted todo 2015-04-14 00:06:53 +02:00
516c343e8a check with lowercase to also match JPEG, JPeg ... 2015-04-13 15:55:00 +02:00
12486e9a29 adjusted todo 2015-04-13 11:19:42 +02:00
ae8a2467aa changed last message in overview also to EmojiconTextView for displaying smileys correctly 2015-04-12 23:37:58 +02:00
573bfed961 adjusted todo 2015-04-12 23:10:21 +02:00
3ef609cfbd better and perhaps faster way for checking if a message is downloadable 2015-04-12 23:09:53 +02:00
03bc7dcdc9 new settings to initialisation of Settings 2015-04-12 23:09:10 +02:00
7405d50c70 implementation for downloading only when enabled wlan 2015-04-12 21:28:45 +02:00
56e695cf1b added settings for accepting and downloading files
fix in Settings, initialize with same values like in preferences.xml
2015-04-12 20:59:12 +02:00
98c09f18a2 add missing resource files 2015-04-12 17:25:50 +02:00
d64aa6407c Merge remote-tracking branch 'origin/trz/master' into trz/master 2015-04-12 17:24:10 +02:00
cae106e310 whatsapp-like smiley implementation 2015-04-12 17:22:53 +02:00
972c65b775 whatsapp-like smiley implemantation 2015-04-12 17:21:35 +02:00
fd5f36b864 adjusted todo 2015-04-12 12:09:18 +02:00
steckbrief
deac0df707 Merge branch 'trz/master' of ssh://git.fucktheforce.de/conversations into trz/master 2015-04-11 23:00:31 +02:00
steckbrief
17779e7700 Color choose dialog 2015-04-11 23:00:10 +02:00
82bfd8ac33 show online status under avatar in same way for muc as the send button does 2015-04-11 21:49:48 +02:00
ae520c2957 differ between received and read message 2015-04-11 21:48:55 +02:00
94a669fcb8 no trim of messages or password
check password with only spaces separately
2015-04-11 20:53:25 +02:00
3a814addab correct parsing of led color 2015-04-11 20:23:25 +02:00
c829f612cd todo added 2015-04-11 17:24:06 +02:00
df63c14617 Merge branch 'trz/master' of ssh://git.fucktheforce.de/conversations into trz/master 2015-04-11 14:15:07 +02:00
87e56b534a changed distribution url due to bug: http://stackoverflow.com/questions/29576097/gradle-sync-error-in-android-studio-when-importing-project/29576568#29576568 2015-04-11 14:14:43 +02:00
steckbrief
e17b75511e timestamp parsing reverted 2015-03-31 16:30:47 +02:00
steckbrief
6220260df3 Configurable LED color (Attention: Expert setting because currently only text input) 2015-03-31 15:26:26 +02:00
steckbrief
52ed924a13 Changes for emoticon parser reactivated 2015-03-31 14:13:12 +02:00
steckbrief
75c5275f7e Merge tag '1.2.0' into trz/master
Conflicts:
	src/main/java/eu/siacs/conversations/parser/AbstractParser.java
	src/main/java/eu/siacs/conversations/ui/SettingsActivity.java
	src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
	src/main/res/values-de/strings.xml
	src/main/res/xml/preferences.xml
2015-03-30 22:12:49 +02:00
steckbrief
c8fe93cf0a - Some comments to refer to the XEPs added
- parseTimestamp method changed to use the XMLGregorianCalendar (refer to XEP-0082 and subsequently Date/DateTime definition of XML Schema Part 2, http://www.w3.org/TR/xmlschema-2/#date, http://www.w3.org/TR/xmlschema-2/#dateTime)
  a small test comparing the original implementation with the XMLGregorianCalendar implementation showed a significant performance improvement (about 0.1s on windows 7 64bit, AMD-A6 1.8GHz, 16GB RAM, Android Studio + Eclipse + Firefox running)
2015-02-21 00:12:15 +01:00
steckbrief
20eae39557 Merge master-origin
Conflicts:
	src/main/java/eu/siacs/conversations/ui/SettingsActivity.java
	src/main/java/eu/siacs/conversations/ui/XmppActivity.java
	src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
	src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
	src/main/java/eu/siacs/conversations/utils/UIHelper.java
	src/main/res/values-de/strings.xml
2015-02-20 22:19:31 +01:00
steckbrief
980a84a6ce ToDo modified 2015-02-20 21:09:20 +01:00
c67ed416a1 modified TODO 2015-02-19 10:14:17 +01:00
0f169e8dbe added section to TODO 2015-02-13 09:22:50 +01:00
77c19f81dc some more in TODO 2015-02-13 00:25:10 +01:00
aed8c64e54 add TODO 2015-02-07 13:06:15 +01:00
steckbrief
46bbf1ce5f - Avoiding accessing shared preferences to know if emoticons should be parsed for every single message
- Adding support to show online status in Conversations overview (configurable via the setting "send_button_status")
2015-01-20 22:42:53 +01:00
Tristan Zur
e8ca2a1ae3 Merge branch 'master' of ssh://git.fucktheforce.de/conversations
Conflicts:
	src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
	src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
2015-01-11 02:39:39 +01:00
Tristan Zur
5a860416b5 Setting added for parsing emoticons or not 2015-01-11 01:40:25 +01:00
71bb1e90b0 changes to get it working under eclipse 2015-01-10 23:11:07 +01:00
Tristan Zur
0464a6a3fa Fixed missing symbol for eu.siacs.conversations.Config and wrong parameter for method eu.siacs.conversations.utils.UIHelper.transformAscii.. 2015-01-10 22:17:51 +01:00
95e2a53951 Merge branch 'master' of ssh://git.fucktheforce.de/conversations
Conflicts:
	src/main/java/eu/siacs/conversations/Config.java
	src/main/java/eu/siacs/conversations/ui/adapter/ConversationAdapter.java
	src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java
	src/main/java/eu/siacs/conversations/utils/UIHelper.java
2015-01-03 23:19:05 +01:00
48717dd7d3 remaining part of my patch 2015-01-03 21:31:56 +01:00
6e3e58e3c8 added smilies from patch. remaining changes will follow later 2015-01-03 17:43:42 +01:00
1562 changed files with 18340 additions and 3136 deletions

View file

@ -3,7 +3,8 @@ android:
components: components:
- platform-tools - platform-tools
- tools - tools
- build-tools-22.0.1
- build-tools-21.1.2 - build-tools-21.1.2
- build-tools-19.1.0 - build-tools-19.1.0
- android-21 - android-22
- extra-android-m2repository - extra-android-m2repository

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,34 @@
###Changelog ###Changelog
####Version 1.5.1
* fixed rare crashes
* improved otr support
####Version 1.5.0
* upload files to HTTP host and share them in MUCs. requires new [HttpUploadComponent](https://github.com/siacs/HttpUploadComponent) on server side
####Version 1.4.5
* fixes to message parser to not display some ejabberd muc status messages
####Version 1.4.4
* added unread count badges on supported devices
* rewrote message parser
####Version 1.4.0
* send button turns into quick action button to offer faster access to take photo, send location or record audio
* visually seperate merged messages
* faster reconnects of failed accounts after network switches
* r/o vcard avatars for contacts
* various bug fixes
####Version 1.3.0
* swipe conversations to end them
* quickly enable / disable account via slider
* share multiple images at once
* expert option to distrust system CAs
* mlink compatibility
* bug fixes
####Version 1.2.0 ####Version 1.2.0
* Send current location. (requires [plugin](https://play.google.com/store/apps/details?id=eu.siacs.conversations.sharelocation)) * Send current location. (requires [plugin](https://play.google.com/store/apps/details?id=eu.siacs.conversations.sharelocation))
* Invite multiple contacts at once * Invite multiple contacts at once

10
ManualBuildForFdroid.md Normal file
View file

@ -0,0 +1,10 @@
### Build with Android Studio
1. Adjust build.gradle
a. increment versionCode
b. enter new versionName
2. Generate APK
a. (menu) Build -> Generate Signed APK
b. choose Key store path (AndroidKeystore.jks) -> choose key alias (android-key) -> Next -> Finish
3. Upload APK to VM with installed FDroid into folder /var/www/fdroid/repo (Repo Folder)
4. Run fdroid update --create-metadata in directory /var/www/fdroid
5. Rsync Repo Folder to public F-Droid Repo

View file

@ -2,7 +2,7 @@
Conversations: the very last word in instant messaging Conversations: the very last word in instant messaging
[![Google Play](http://developer.android.com/images/brand/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=eu.siacs.conversations) [![Google Play](http://developer.android.com/images/brand/en_generic_rgb_wo_60.png)](https://play.google.com/store/apps/details?id=eu.siacs.conversations) [![Amazon App Store](https://images-na.ssl-images-amazon.com/images/G/01/AmazonMobileApps/amazon-apps-store-us-black.png)](http://www.amazon.com/dp/B00WD35AAC/)
![screenshots](https://raw.githubusercontent.com/siacs/Conversations/master/screenshots.png) ![screenshots](https://raw.githubusercontent.com/siacs/Conversations/master/screenshots.png)
@ -17,7 +17,8 @@ Conversations: the very last word in instant messaging
## Features ## Features
* End-to-end encryption with either [OTR](https://otr.cypherpunks.ca/) or [OpenPGP](http://www.openpgp.org/about_openpgp/) * End-to-end encryption with either [OTR](https://otr.cypherpunks.ca/) or [OpenPGP](http://www.openpgp.org/about_openpgp/)
* Sending and receiving images * Send and receive images as well as other kind of files
* Share your location via an external [plug-in](https://play.google.com/store/apps/details?id=eu.siacs.conversations.sharelocation)
* Indication when your contact has read your message * Indication when your contact has read your message
* Intuitive UI that follows Android Design guidelines * Intuitive UI that follows Android Design guidelines
* Pictures / Avatars for your Contacts * Pictures / Avatars for your Contacts
@ -41,6 +42,8 @@ run your own XMPP server for you and your friends. These XEP's are:
* XEP-0065: SOCKS5 Bytestreams (or mod_proxy65). Will be used to transfer * XEP-0065: SOCKS5 Bytestreams (or mod_proxy65). Will be used to transfer
files if both parties are behind a firewall (NAT). files if both parties are behind a firewall (NAT).
* XEP-0163: Personal Eventing Protocol for avatars * XEP-0163: Personal Eventing Protocol for avatars
* XEP-0191: Blocking command lets you blacklist spammers or block contacts
without removing them from your roster.
* XEP-0198: Stream Management allows XMPP to survive small network outages and * XEP-0198: Stream Management allows XMPP to survive small network outages and
changes of the underlying TCP connection. changes of the underlying TCP connection.
* XEP-0280: Message Carbons which automatically syncs the messages you send to * XEP-0280: Message Carbons which automatically syncs the messages you send to
@ -53,8 +56,9 @@ run your own XMPP server for you and your friends. These XEP's are:
* XEP-0352: Client State Indication lets the server know whether or not * XEP-0352: Client State Indication lets the server know whether or not
Conversations is in the background. Allows the server to save bandwidth by Conversations is in the background. Allows the server to save bandwidth by
withholding unimportant packages. withholding unimportant packages.
* XEP-0191: Blocking command lets you blacklist spammers or block contacts * XEP-xxxx: HttpUpload allows you to share files in conferences and with offline
without removing them from your roster. contacts. Requires an [additional component](https://github.com/siacs/HttpUploadComponent)
on your server.
## Team ## Team
@ -66,12 +70,13 @@ run your own XMPP server for you and your friends. These XEP's are:
(In order of appearance) (In order of appearance)
* [Rene Treffer](https://github.com/rtreffer) * [Rene Treffer](https://github.com/rtreffer) ([PRs](https://github.com/siacs/Conversations/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Artreffer+is%3Amerged))
* [Andreas Straub](https://github.com/strb) * [Andreas Straub](https://github.com/strb) ([PRs](https://github.com/siacs/Conversations/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Astrb+is%3Amerged))
* [Alethea Butler](https://github.com/alethea) * [Alethea Butler](https://github.com/alethea) ([PRs](https://github.com/siacs/Conversations/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Aalethea+is%3Amerged))
* [M. Dietrich](https://github.com/emdete) * [M. Dietrich](https://github.com/emdete) ([PRs](https://github.com/siacs/Conversations/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Aemdete+is%3Amerged))
* [betheg](https://github.com/betheg) * [betheg](https://github.com/betheg) ([PRs](https://github.com/siacs/Conversations/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Abetheg+is%3Amerged))
* [Sam Whited](https://github.com/SamWhited) * [Sam Whited](https://github.com/SamWhited) ([PRs](https://github.com/siacs/Conversations/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3ASamWhited+is%3Amerged))
* [BrianBlade](https://github.com/BrianBlade) ([PRs](https://github.com/siacs/Conversations/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3ABrianBlade+is%3Amerged))
#### Logo #### Logo
* [Ilia Rostovtsev](https://github.com/qooob) (Progress) * [Ilia Rostovtsev](https://github.com/qooob) (Progress)
@ -250,7 +255,7 @@ decrypting and encrypting takes longer than OTR. It is however asynchronous and
works well with message carbons. works well with message carbons.
To use OpenPGP you have to install the open source app To use OpenPGP you have to install the open source app
[OpenKeychain](www.openkeychain.org) and then long press on the account in [OpenKeychain](http://www.openkeychain.org) and then long press on the account in
manage accounts and choose renew PGP announcement from the contextual menu. manage accounts and choose renew PGP announcement from the contextual menu.
#### How does the encryption for conferences work? #### How does the encryption for conferences work?

10
TODO Normal file
View file

@ -0,0 +1,10 @@
settings:
- cleanup and structure
- remove/fix "enter is send" and "show enter key"
code:
- check parseTimestamp
- change crash reports
- notification with emojicon textview
general:
- add comments to code of XEPs
- add comments in general

View file

@ -13,7 +13,7 @@
width="95" width="95"
height="95" height="95"
id="Yes_check" id="Yes_check"
inkscape:version="0.48.5 r10040" inkscape:version="0.91 r13725"
sodipodi:docname="ic_received_indicator.svg"> sodipodi:docname="ic_received_indicator.svg">
<metadata <metadata
id="metadata10"> id="metadata10">
@ -23,7 +23,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -36,17 +36,17 @@
guidetolerance="10" guidetolerance="10"
inkscape:pageopacity="0" inkscape:pageopacity="0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:window-width="1233" inkscape:window-width="956"
inkscape:window-height="828" inkscape:window-height="1156"
id="namedview8" id="namedview8"
showgrid="false" showgrid="false"
showguides="true" showguides="true"
inkscape:guide-bbox="true" inkscape:guide-bbox="true"
inkscape:zoom="5.04" inkscape:zoom="5.04"
inkscape:cx="26.829268" inkscape:cx="-4.3215257"
inkscape:cy="37.489149" inkscape:cy="37.489149"
inkscape:window-x="0" inkscape:window-x="2880"
inkscape:window-y="0" inkscape:window-y="20"
inkscape:window-maximized="0" inkscape:window-maximized="0"
inkscape:current-layer="Yes_check" inkscape:current-layer="Yes_check"
fit-margin-top="0" fit-margin-top="0"
@ -69,7 +69,7 @@
</defs> </defs>
<path <path
d="m 2.3894499,61.412131 c 0,0 16.7473651,20.271938 22.3528491,26.154483 3.648598,3.026816 12.878061,3.83429 14.880462,0 1.64903,-2.636163 2.380404,-5.8348 2.991819,-7.931771 C 49.920898,54.575958 72.297563,22.337321 92.321082,10.50894 96.814837,5.2377522 86.327596,3.5063483 77.217442,6.9958109 63.487006,12.254946 34.107717,59.529917 29.270873,69.192545 22.40265,70.841418 12.518762,52.447046 12.518762,52.447046 7.3805037,52.552428 1.8841059,52.071763 2.3894499,61.412131 z" d="m 2.3894499,61.412131 c 0,0 16.7473651,20.271938 22.3528491,26.154483 3.648598,3.026816 12.878061,3.83429 14.880462,0 1.64903,-2.636163 2.380404,-5.8348 2.991819,-7.931771 C 49.920898,54.575958 72.297563,22.337321 92.321082,10.50894 96.814837,5.2377522 86.327596,3.5063483 77.217442,6.9958109 63.487006,12.254946 34.107717,59.529917 29.270873,69.192545 22.40265,70.841418 12.518762,52.447046 12.518762,52.447046 7.3805037,52.552428 1.8841059,52.071763 2.3894499,61.412131 z"
style="fill:#249b25;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.29981154;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" style="fill:#259b24;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.29981154;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="check" id="check"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
sodipodi:nodetypes="cccscsccc" /> sodipodi:nodetypes="cccscsccc" />

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_cancel_away.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="507"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-8.3389831"
inkscape:cy="24"
inkscape:window-x="0"
inkscape:window-y="549"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm10 27.17L31.17 34 24 26.83 16.83 34 14 31.17 21.17 24 14 16.83 16.83 14 24 21.17 31.17 14 34 16.83 26.83 24 34 31.17z"
id="path4"
style="fill:#ff9800;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_cancel_dnd.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="507"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-8.3389831"
inkscape:cy="24"
inkscape:window-x="0"
inkscape:window-y="549"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm10 27.17L31.17 34 24 26.83 16.83 34 14 31.17 21.17 24 14 16.83 16.83 14 24 21.17 31.17 14 34 16.83 26.83 24 34 31.17z"
id="path4"
style="fill:#f44336;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_cancel_offline.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1080"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-7.9322034"
inkscape:cy="24"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm10 27.17L31.17 34 24 26.83 16.83 34 14 31.17 21.17 24 14 16.83 16.83 14 24 21.17 31.17 14 34 16.83 26.83 24 34 31.17z"
id="path4"
style="fill:#000000;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_cancel_online.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="507"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-8.3389831"
inkscape:cy="24"
inkscape:window-x="0"
inkscape:window-y="549"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm10 27.17L31.17 34 24 26.83 16.83 34 14 31.17 21.17 24 14 16.83 16.83 14 24 21.17 31.17 14 34 16.83 26.83 24 34 31.17z"
id="path4"
style="fill:#259b24;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_location_away.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="1156"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="0.91525424"
inkscape:cy="24"
inkscape:window-x="2880"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 4c-7.73 0-14 6.27-14 14 0 10.5 14 26 14 26s14-15.5 14-26c0-7.73-6.27-14-14-14zm0 19c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"
id="path4"
style="fill:#ff9800;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_location_dnd.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="1156"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-7.9322034"
inkscape:cy="24"
inkscape:window-x="2880"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 4c-7.73 0-14 6.27-14 14 0 10.5 14 26 14 26s14-15.5 14-26c0-7.73-6.27-14-14-14zm0 19c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"
id="path4"
style="fill:#f44336;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_location_offline.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="1156"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-7.9322034"
inkscape:cy="24"
inkscape:window-x="2880"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 4c-7.73 0-14 6.27-14 14 0 10.5 14 26 14 26s14-15.5 14-26c0-7.73-6.27-14-14-14zm0 19c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"
id="path4"
style="fill:#000000;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_location_online.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="1156"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-7.9322034"
inkscape:cy="24"
inkscape:window-x="2880"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 4c-7.73 0-14 6.27-14 14 0 10.5 14 26 14 26s14-15.5 14-26c0-7.73-6.27-14-14-14zm0 19c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z"
id="path4"
style="stroke:none;stroke-opacity:0;fill:#259b24;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_photo_away.svg">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="567"
id="namedview8"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-8.3389831"
inkscape:cy="24"
inkscape:window-x="960"
inkscape:window-y="609"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<circle
cx="24"
cy="24"
r="6.4"
id="circle4"
style="fill-opacity:0.627451;fill:#ff9800" />
<path
d="M18 4l-3.66 4H8c-2.21 0-4 1.79-4 4v24c0 2.21 1.79 4 4 4h32c2.21 0 4-1.79 4-4V12c0-2.21-1.79-4-4-4h-6.34L30 4H18zm6 30c-5.52 0-10-4.48-10-10s4.48-10 10-10 10 4.48 10 10-4.48 10-10 10z"
id="path6"
style="fill:#ff9800;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

60
art/ic_send_photo_dnd.svg Normal file
View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_photo_dnd.svg">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="567"
id="namedview8"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-8.3389831"
inkscape:cy="24"
inkscape:window-x="960"
inkscape:window-y="609"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<circle
cx="24"
cy="24"
r="6.4"
id="circle4"
style="fill:#f44336;fill-opacity:0.627451" />
<path
d="M18 4l-3.66 4H8c-2.21 0-4 1.79-4 4v24c0 2.21 1.79 4 4 4h32c2.21 0 4-1.79 4-4V12c0-2.21-1.79-4-4-4h-6.34L30 4H18zm6 30c-5.52 0-10-4.48-10-10s4.48-10 10-10 10 4.48 10 10-4.48 10-10 10z"
id="path6"
style="fill:#f44336;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_photo_offline.svg">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="567"
id="namedview8"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-8.3389831"
inkscape:cy="24"
inkscape:window-x="960"
inkscape:window-y="609"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<circle
cx="24"
cy="24"
r="6.4"
id="circle4"
style="fill:#000000;fill-opacity:0.627451" />
<path
d="M18 4l-3.66 4H8c-2.21 0-4 1.79-4 4v24c0 2.21 1.79 4 4 4h32c2.21 0 4-1.79 4-4V12c0-2.21-1.79-4-4-4h-6.34L30 4H18zm6 30c-5.52 0-10-4.48-10-10s4.48-10 10-10 10 4.48 10 10-4.48 10-10 10z"
id="path6"
style="fill:#000000;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_photo_online.svg">
<metadata
id="metadata12">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs10" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="567"
id="namedview8"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-8.3389831"
inkscape:cy="24"
inkscape:window-x="960"
inkscape:window-y="609"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<circle
cx="24"
cy="24"
r="6.4"
id="circle4"
style="fill:#259b24;fill-opacity:0.627451" />
<path
d="M18 4l-3.66 4H8c-2.21 0-4 1.79-4 4v24c0 2.21 1.79 4 4 4h32c2.21 0 4-1.79 4-4V12c0-2.21-1.79-4-4-4h-6.34L30 4H18zm6 30c-5.52 0-10-4.48-10-10s4.48-10 10-10 10 4.48 10 10-4.48 10-10 10z"
id="path6"
style="fill:#259b24;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_picture_away.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1916"
inkscape:window-height="1036"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="6.5084746"
inkscape:cy="24"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M42 38V10c0-2.21-1.79-4-4-4H10c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h28c2.21 0 4-1.79 4-4zM17 27l5 6.01L29 24l9 12H10l7-9z"
id="path4"
style="fill:#ff9800;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_picture_dnd.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1916"
inkscape:window-height="1036"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="6.5084746"
inkscape:cy="24"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M42 38V10c0-2.21-1.79-4-4-4H10c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h28c2.21 0 4-1.79 4-4zM17 27l5 6.01L29 24l9 12H10l7-9z"
id="path4"
style="fill:#f44336;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_picture_offline.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1916"
inkscape:window-height="1036"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="6.5084746"
inkscape:cy="24"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M42 38V10c0-2.21-1.79-4-4-4H10c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h28c2.21 0 4-1.79 4-4zM17 27l5 6.01L29 24l9 12H10l7-9z"
id="path4"
style="fill:#000000;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_picture_online.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1916"
inkscape:window-height="1036"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="6.5084746"
inkscape:cy="24"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M42 38V10c0-2.21-1.79-4-4-4H10c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h28c2.21 0 4-1.79 4-4zM17 27l5 6.01L29 24l9 12H10l7-9z"
id="path4"
style="fill:#259b24;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

69
art/ic_send_text_away.svg Normal file
View file

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3621"
version="1.1"
inkscape:version="0.91 r13725"
width="96"
height="96"
sodipodi:docname="ic_send_text_away.svg"
inkscape:export-filename="/home/daniel/workspace/Conversations/res/drawable-xxhdpi/ic_action_send_now_online.png"
inkscape:export-xdpi="154.28572"
inkscape:export-ydpi="154.28572">
<metadata
id="metadata3627">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3625" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="744"
inkscape:window-height="1156"
id="namedview3623"
showgrid="true"
showguides="true"
inkscape:zoom="8"
inkscape:cx="55.595803"
inkscape:cy="56.761328"
inkscape:window-x="3092"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg3621">
<inkscape:grid
type="xygrid"
id="grid3631" />
</sodipodi:namedview>
<path
style="fill:#ff9800;fill-opacity:0.627451;stroke:none"
d="M 3.887575,4.1549246 90.999747,47.676331 3.887575,91.286663 13.203552,52.344101 63.012683,47.720794 13.203552,43.008558 Z"
id="path3633"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
inkscape:export-filename="/home/daniel/workspace/Conversations/res/drawable-mdpi/ic_action_send_now_dnd.png"
inkscape:export-xdpi="51.42857"
inkscape:export-ydpi="51.42857" />
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

69
art/ic_send_text_dnd.svg Normal file
View file

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3621"
version="1.1"
inkscape:version="0.91 r13725"
width="96"
height="96"
sodipodi:docname="ic_send_text_dnd.svg"
inkscape:export-filename="/home/daniel/workspace/Conversations/res/drawable-xxhdpi/ic_action_send_now_online.png"
inkscape:export-xdpi="154.28572"
inkscape:export-ydpi="154.28572">
<metadata
id="metadata3627">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3625" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="1156"
id="namedview3623"
showgrid="true"
showguides="true"
inkscape:zoom="8"
inkscape:cx="49.908303"
inkscape:cy="56.761328"
inkscape:window-x="2880"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg3621">
<inkscape:grid
type="xygrid"
id="grid3631" />
</sodipodi:namedview>
<path
style="fill:#f44336;fill-opacity:0.627451;stroke:none"
d="M 3.887575,4.1549246 90.999747,47.676331 3.887575,91.286663 13.203552,52.344101 63.012683,47.720794 13.203552,43.008558 Z"
id="path3633"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
inkscape:export-filename="/home/daniel/workspace/Conversations/res/drawable-mdpi/ic_action_send_now_dnd.png"
inkscape:export-xdpi="51.42857"
inkscape:export-ydpi="51.42857" />
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3621"
version="1.1"
inkscape:version="0.91 r13725"
width="96"
height="96"
sodipodi:docname="ic_send_text_offline.svg"
inkscape:export-filename="/home/daniel/workspace/Conversations/res/drawable-xxhdpi/ic_action_send_now_online.png"
inkscape:export-xdpi="154.28572"
inkscape:export-ydpi="154.28572">
<metadata
id="metadata3627">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3625" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="1156"
id="namedview3623"
showgrid="true"
showguides="true"
inkscape:zoom="8"
inkscape:cx="50.158303"
inkscape:cy="56.761328"
inkscape:window-x="2880"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg3621">
<inkscape:grid
type="xygrid"
id="grid3631" />
</sodipodi:namedview>
<path
style="fill:#000000;fill-opacity:0.627451;stroke:none"
d="M 3.887575,4.1549246 90.999747,47.676331 3.887575,91.286663 13.203552,52.344101 63.012683,47.720794 13.203552,43.008558 Z"
id="path3633"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
inkscape:export-filename="/home/daniel/workspace/Conversations/res/drawable-mdpi/ic_action_send_now_dnd.png"
inkscape:export-xdpi="51.42857"
inkscape:export-ydpi="51.42857" />
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -11,7 +11,7 @@
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
id="svg3621" id="svg3621"
version="1.1" version="1.1"
inkscape:version="0.48.4 r9939" inkscape:version="0.91 r13725"
width="96" width="96"
height="96" height="96"
sodipodi:docname="ic_action_send_now.svg" sodipodi:docname="ic_action_send_now.svg"
@ -26,7 +26,7 @@
<dc:format>image/svg+xml</dc:format> <dc:format>image/svg+xml</dc:format>
<dc:type <dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title> <dc:title />
</cc:Work> </cc:Work>
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
@ -41,16 +41,16 @@
guidetolerance="10" guidetolerance="10"
inkscape:pageopacity="0" inkscape:pageopacity="0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:window-width="1916" inkscape:window-width="1920"
inkscape:window-height="1161" inkscape:window-height="1200"
id="namedview3623" id="namedview3623"
showgrid="true" showgrid="true"
showguides="true" showguides="true"
inkscape:zoom="1" inkscape:zoom="8"
inkscape:cx="47.28873" inkscape:cx="69.783303"
inkscape:cy="43.262706" inkscape:cy="56.761328"
inkscape:window-x="0" inkscape:window-x="1920"
inkscape:window-y="18" inkscape:window-y="0"
inkscape:window-maximized="0" inkscape:window-maximized="0"
inkscape:current-layer="svg3621"> inkscape:current-layer="svg3621">
<inkscape:grid <inkscape:grid
@ -58,8 +58,8 @@
id="grid3631" /> id="grid3631" />
</sodipodi:namedview> </sodipodi:namedview>
<path <path
style="fill:#e51c28;fill-opacity:0.627451;stroke:none" style="fill:#259b24;fill-opacity:0.62745098;stroke:none"
d="M 20.012575,21.028577 76,49 20.012575,77.028577 26,52 58.012575,49.028577 26,46 z" d="M 3.887575,4.1549246 90.999747,47.676331 3.887575,91.286663 13.203552,52.344101 63.012683,47.720794 13.203552,43.008558 Z"
id="path3633" id="path3633"
inkscape:connector-curvature="0" inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" sodipodi:nodetypes="ccccccc"

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_voice_away.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="1156"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-7.9322034"
inkscape:cy="24"
inkscape:window-x="2880"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 30c3.31 0 5.98-2.69 5.98-6L30 12c0-3.32-2.68-6-6-6-3.31 0-6 2.68-6 6v12c0 3.31 2.69 6 6 6zm10.6-6c0 6-5.07 10.2-10.6 10.2-5.52 0-10.6-4.2-10.6-10.2H10c0 6.83 5.44 12.47 12 13.44V44h4v-6.56c6.56-.97 12-6.61 12-13.44h-3.4z"
id="path4"
style="fill:#ff9800;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

54
art/ic_send_voice_dnd.svg Normal file
View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_voice_dnd.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="1156"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-7.9322034"
inkscape:cy="24"
inkscape:window-x="2880"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 30c3.31 0 5.98-2.69 5.98-6L30 12c0-3.32-2.68-6-6-6-3.31 0-6 2.68-6 6v12c0 3.31 2.69 6 6 6zm10.6-6c0 6-5.07 10.2-10.6 10.2-5.52 0-10.6-4.2-10.6-10.2H10c0 6.83 5.44 12.47 12 13.44V44h4v-6.56c6.56-.97 12-6.61 12-13.44h-3.4z"
id="path4"
style="fill:#f44336;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_voice_offline.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="1156"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-7.9322034"
inkscape:cy="24"
inkscape:window-x="2880"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 30c3.31 0 5.98-2.69 5.98-6L30 12c0-3.32-2.68-6-6-6-3.31 0-6 2.68-6 6v12c0 3.31 2.69 6 6 6zm10.6-6c0 6-5.07 10.2-10.6 10.2-5.52 0-10.6-4.2-10.6-10.2H10c0 6.83 5.44 12.47 12 13.44V44h4v-6.56c6.56-.97 12-6.61 12-13.44h-3.4z"
id="path4"
style="fill:#000000;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48"
height="48"
viewBox="0 0 48 48"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="ic_send_voice_online.svg">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs8" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="956"
inkscape:window-height="1156"
id="namedview6"
showgrid="false"
inkscape:zoom="4.9166667"
inkscape:cx="-7.9322034"
inkscape:cy="24"
inkscape:window-x="2880"
inkscape:window-y="20"
inkscape:window-maximized="0"
inkscape:current-layer="svg2" />
<path
d="M24 30c3.31 0 5.98-2.69 5.98-6L30 12c0-3.32-2.68-6-6-6-3.31 0-6 2.68-6 6v12c0 3.31 2.69 6 6 6zm10.6-6c0 6-5.07 10.2-10.6 10.2-5.52 0-10.6-4.2-10.6-10.2H10c0 6.83 5.44 12.47 12 13.44V44h4v-6.56c6.56-.97 12-6.61 12-13.44h-3.4z"
id="path4"
style="fill:#259b24;fill-opacity:0.627451" />
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -10,6 +10,30 @@ images = {
'conversations_baloon.svg' => ['ic_launcher', 48], 'conversations_baloon.svg' => ['ic_launcher', 48],
'conversations_mono.svg' => ['ic_notification', 24], 'conversations_mono.svg' => ['ic_notification', 24],
'ic_received_indicator.svg' => ['ic_received_indicator', 12], 'ic_received_indicator.svg' => ['ic_received_indicator', 12],
'ic_send_text_offline.svg' => ['ic_send_text_offline', 36],
'ic_send_text_online.svg' => ['ic_send_text_online', 36],
'ic_send_text_away.svg' => ['ic_send_text_away', 36],
'ic_send_text_dnd.svg' => ['ic_send_text_dnd', 36],
'ic_send_photo_online.svg' => ['ic_send_photo_online', 36],
'ic_send_photo_offline.svg' => ['ic_send_photo_offline', 36],
'ic_send_photo_away.svg' => ['ic_send_photo_away', 36],
'ic_send_photo_dnd.svg' => ['ic_send_photo_dnd', 36],
'ic_send_location_online.svg' => ['ic_send_location_online', 36],
'ic_send_location_offline.svg' => ['ic_send_location_offline', 36],
'ic_send_location_away.svg' => ['ic_send_location_away', 36],
'ic_send_location_dnd.svg' => ['ic_send_location_dnd', 36],
'ic_send_voice_online.svg' => ['ic_send_voice_online', 36],
'ic_send_voice_offline.svg' => ['ic_send_voice_offline', 36],
'ic_send_voice_away.svg' => ['ic_send_voice_away', 36],
'ic_send_voice_dnd.svg' => ['ic_send_voice_dnd', 36],
'ic_send_cancel_online.svg' => ['ic_send_cancel_online', 36],
'ic_send_cancel_offline.svg' => ['ic_send_cancel_offline', 36],
'ic_send_cancel_away.svg' => ['ic_send_cancel_away', 36],
'ic_send_cancel_dnd.svg' => ['ic_send_cancel_dnd', 36],
'ic_send_picture_online.svg' => ['ic_send_picture_online', 36],
'ic_send_picture_offline.svg' => ['ic_send_picture_offline', 36],
'ic_send_picture_away.svg' => ['ic_send_picture_away', 36],
'ic_send_picture_dnd.svg' => ['ic_send_picture_dnd', 36]
} }
images.each do |source, result| images.each do |source, result|
resolutions.each do |name, factor| resolutions.each do |name, factor|

View file

@ -6,7 +6,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:1.0.1' classpath 'com.android.tools.build:gradle:1.2.3'
} }
} }
@ -25,26 +25,30 @@ repositories {
} }
dependencies { dependencies {
compile project(':libs:openpgp-api-lib') compile project(':libs:openpgp-api-lib')
compile project(':libs:MemorizingTrustManager') compile project(':libs:MemorizingTrustManager')
compile 'com.android.support:support-v13:21.0.3' compile 'com.android.support:support-v13:21.0.3'
compile 'org.bouncycastle:bcprov-jdk15on:1.51' compile 'org.bouncycastle:bcprov-jdk15on:1.51'
compile 'org.jitsi:org.otr4j:0.22' compile 'org.jitsi:org.otr4j:0.22'
compile 'org.gnu.inet:libidn:1.15' compile 'org.gnu.inet:libidn:1.15'
compile 'com.google.zxing:core:3.1.0' compile 'com.google.zxing:core:3.1.0'
compile 'com.google.zxing:android-integration:3.1.0' compile 'com.google.zxing:android-integration:3.1.0'
compile 'de.measite.minidns:minidns:0.1.3' compile 'de.measite.minidns:minidns:0.1.3'
compile 'de.timroes.android:EnhancedListView:0.3.4'
compile 'me.leolin:ShortcutBadger:1.1.1@aar'
compile project(':libs:emojicon')
compile project(':libs:colorpicker')
} }
android { android {
compileSdkVersion 21 compileSdkVersion 22
buildToolsVersion "21.1.2" buildToolsVersion "22.0.1"
defaultConfig { defaultConfig {
minSdkVersion 14 minSdkVersion 14
targetSdkVersion 21 targetSdkVersion 21
versionCode 56 versionCode 64
versionName "1.2.0" versionName "1.5.2.1"
} }
compileOptions { compileOptions {
@ -91,7 +95,7 @@ android {
} }
lintOptions { lintOptions {
disable 'ExtraTranslation', 'MissingTranslation', 'InvalidPackage' disable 'ExtraTranslation', 'MissingTranslation', 'InvalidPackage', 'MissingQuantity'
} }
subprojects { subprojects {

View file

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip distributionUrl=http\://services.gradle.org/distributions/gradle-2.2.1-all.zip

View file

@ -3,7 +3,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:0.7.+' classpath 'com.android.tools.build:gradle:1.2.3'
} }
} }

Binary file not shown.

1
libs/colorpicker/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/build

View file

@ -0,0 +1,18 @@
apply plugin: 'com.android.library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 7
targetSdkVersion 21
versionCode 2
versionName "2.0"
}
buildTypes {
release {
minifyEnabled false
}
}
}

17
libs/colorpicker/proguard-rules.pro vendored Normal file
View file

@ -0,0 +1,17 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in /Developer/android-sdk-macosx/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

View file

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="yuku.ambilwarna" />

View file

@ -0,0 +1,298 @@
package yuku.ambilwarna;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class AmbilWarnaDialog {
public interface OnAmbilWarnaListener {
void onCancel(AmbilWarnaDialog dialog);
void onOk(AmbilWarnaDialog dialog, int color);
}
final AlertDialog dialog;
private final boolean supportsAlpha;
final OnAmbilWarnaListener listener;
final View viewHue;
final AmbilWarnaSquare viewSatVal;
final ImageView viewCursor;
final ImageView viewAlphaCursor;
final View viewOldColor;
final View viewNewColor;
final View viewAlphaOverlay;
final ImageView viewTarget;
final ImageView viewAlphaCheckered;
final ViewGroup viewContainer;
final float[] currentColorHsv = new float[3];
int alpha;
/**
* Create an AmbilWarnaDialog.
*
* @param context activity context
* @param color current color
* @param listener an OnAmbilWarnaListener, allowing you to get back error or OK
*/
public AmbilWarnaDialog(final Context context, int color, OnAmbilWarnaListener listener) {
this(context, color, false, listener);
}
/**
* Create an AmbilWarnaDialog.
*
* @param context activity context
* @param color current color
* @param supportsAlpha whether alpha/transparency controls are enabled
* @param listener an OnAmbilWarnaListener, allowing you to get back error or OK
*/
public AmbilWarnaDialog(final Context context, int color, boolean supportsAlpha, OnAmbilWarnaListener listener) {
this.supportsAlpha = supportsAlpha;
this.listener = listener;
if (!supportsAlpha) { // remove alpha if not supported
color = color | 0xff000000;
}
Color.colorToHSV(color, currentColorHsv);
alpha = Color.alpha(color);
final View view = LayoutInflater.from(context).inflate(R.layout.ambilwarna_dialog, null);
viewHue = view.findViewById(R.id.ambilwarna_viewHue);
viewSatVal = (AmbilWarnaSquare) view.findViewById(R.id.ambilwarna_viewSatBri);
viewCursor = (ImageView) view.findViewById(R.id.ambilwarna_cursor);
viewOldColor = view.findViewById(R.id.ambilwarna_oldColor);
viewNewColor = view.findViewById(R.id.ambilwarna_newColor);
viewTarget = (ImageView) view.findViewById(R.id.ambilwarna_target);
viewContainer = (ViewGroup) view.findViewById(R.id.ambilwarna_viewContainer);
viewAlphaOverlay = view.findViewById(R.id.ambilwarna_overlay);
viewAlphaCursor = (ImageView) view.findViewById(R.id.ambilwarna_alphaCursor);
viewAlphaCheckered = (ImageView) view.findViewById(R.id.ambilwarna_alphaCheckered);
{ // hide/show alpha
viewAlphaOverlay.setVisibility(supportsAlpha? View.VISIBLE: View.GONE);
viewAlphaCursor.setVisibility(supportsAlpha? View.VISIBLE: View.GONE);
viewAlphaCheckered.setVisibility(supportsAlpha? View.VISIBLE: View.GONE);
}
viewSatVal.setHue(getHue());
viewOldColor.setBackgroundColor(color);
viewNewColor.setBackgroundColor(color);
viewHue.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE
|| event.getAction() == MotionEvent.ACTION_DOWN
|| event.getAction() == MotionEvent.ACTION_UP) {
float y = event.getY();
if (y < 0.f) y = 0.f;
if (y > viewHue.getMeasuredHeight()) {
y = viewHue.getMeasuredHeight() - 0.001f; // to avoid jumping the cursor from bottom to top.
}
float hue = 360.f - 360.f / viewHue.getMeasuredHeight() * y;
if (hue == 360.f) hue = 0.f;
setHue(hue);
// update view
viewSatVal.setHue(getHue());
moveCursor();
viewNewColor.setBackgroundColor(getColor());
updateAlphaView();
return true;
}
return false;
}
});
if (supportsAlpha) viewAlphaCheckered.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if ((event.getAction() == MotionEvent.ACTION_MOVE)
|| (event.getAction() == MotionEvent.ACTION_DOWN)
|| (event.getAction() == MotionEvent.ACTION_UP)) {
float y = event.getY();
if (y < 0.f) {
y = 0.f;
}
if (y > viewAlphaCheckered.getMeasuredHeight()) {
y = viewAlphaCheckered.getMeasuredHeight() - 0.001f; // to avoid jumping the cursor from bottom to top.
}
final int a = Math.round(255.f - ((255.f / viewAlphaCheckered.getMeasuredHeight()) * y));
AmbilWarnaDialog.this.setAlpha(a);
// update view
moveAlphaCursor();
int col = AmbilWarnaDialog.this.getColor();
int c = a << 24 | col & 0x00ffffff;
viewNewColor.setBackgroundColor(c);
return true;
}
return false;
}
});
viewSatVal.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE
|| event.getAction() == MotionEvent.ACTION_DOWN
|| event.getAction() == MotionEvent.ACTION_UP) {
float x = event.getX(); // touch event are in dp units.
float y = event.getY();
if (x < 0.f) x = 0.f;
if (x > viewSatVal.getMeasuredWidth()) x = viewSatVal.getMeasuredWidth();
if (y < 0.f) y = 0.f;
if (y > viewSatVal.getMeasuredHeight()) y = viewSatVal.getMeasuredHeight();
setSat(1.f / viewSatVal.getMeasuredWidth() * x);
setVal(1.f - (1.f / viewSatVal.getMeasuredHeight() * y));
// update view
moveTarget();
viewNewColor.setBackgroundColor(getColor());
return true;
}
return false;
}
});
dialog = new AlertDialog.Builder(context)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (AmbilWarnaDialog.this.listener != null) {
AmbilWarnaDialog.this.listener.onOk(AmbilWarnaDialog.this, getColor());
}
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (AmbilWarnaDialog.this.listener != null) {
AmbilWarnaDialog.this.listener.onCancel(AmbilWarnaDialog.this);
}
}
})
.setOnCancelListener(new OnCancelListener() {
// if back button is used, call back our listener.
@Override
public void onCancel(DialogInterface paramDialogInterface) {
if (AmbilWarnaDialog.this.listener != null) {
AmbilWarnaDialog.this.listener.onCancel(AmbilWarnaDialog.this);
}
}
})
.create();
// kill all padding from the dialog window
dialog.setView(view, 0, 0, 0, 0);
// move cursor & target on first draw
ViewTreeObserver vto = view.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
moveCursor();
if (AmbilWarnaDialog.this.supportsAlpha) moveAlphaCursor();
moveTarget();
if (AmbilWarnaDialog.this.supportsAlpha) updateAlphaView();
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
}
protected void moveCursor() {
float y = viewHue.getMeasuredHeight() - (getHue() * viewHue.getMeasuredHeight() / 360.f);
if (y == viewHue.getMeasuredHeight()) y = 0.f;
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) viewCursor.getLayoutParams();
layoutParams.leftMargin = (int) (viewHue.getLeft() - Math.floor(viewCursor.getMeasuredWidth() / 2) - viewContainer.getPaddingLeft());
layoutParams.topMargin = (int) (viewHue.getTop() + y - Math.floor(viewCursor.getMeasuredHeight() / 2) - viewContainer.getPaddingTop());
viewCursor.setLayoutParams(layoutParams);
}
protected void moveTarget() {
float x = getSat() * viewSatVal.getMeasuredWidth();
float y = (1.f - getVal()) * viewSatVal.getMeasuredHeight();
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) viewTarget.getLayoutParams();
layoutParams.leftMargin = (int) (viewSatVal.getLeft() + x - Math.floor(viewTarget.getMeasuredWidth() / 2) - viewContainer.getPaddingLeft());
layoutParams.topMargin = (int) (viewSatVal.getTop() + y - Math.floor(viewTarget.getMeasuredHeight() / 2) - viewContainer.getPaddingTop());
viewTarget.setLayoutParams(layoutParams);
}
protected void moveAlphaCursor() {
final int measuredHeight = this.viewAlphaCheckered.getMeasuredHeight();
float y = measuredHeight - ((this.getAlpha() * measuredHeight) / 255.f);
final RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) this.viewAlphaCursor.getLayoutParams();
layoutParams.leftMargin = (int) (this.viewAlphaCheckered.getLeft() - Math.floor(this.viewAlphaCursor.getMeasuredWidth() / 2) - this.viewContainer.getPaddingLeft());
layoutParams.topMargin = (int) ((this.viewAlphaCheckered.getTop() + y) - Math.floor(this.viewAlphaCursor.getMeasuredHeight() / 2) - this.viewContainer.getPaddingTop());
this.viewAlphaCursor.setLayoutParams(layoutParams);
}
private int getColor() {
final int argb = Color.HSVToColor(currentColorHsv);
return alpha << 24 | (argb & 0x00ffffff);
}
private float getHue() {
return currentColorHsv[0];
}
private float getAlpha() {
return this.alpha;
}
private float getSat() {
return currentColorHsv[1];
}
private float getVal() {
return currentColorHsv[2];
}
private void setHue(float hue) {
currentColorHsv[0] = hue;
}
private void setSat(float sat) {
currentColorHsv[1] = sat;
}
private void setAlpha(int alpha) {
this.alpha = alpha;
}
private void setVal(float val) {
currentColorHsv[2] = val;
}
public void show() {
dialog.show();
}
public AlertDialog getDialog() {
return dialog;
}
private void updateAlphaView() {
final GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[] {
Color.HSVToColor(currentColorHsv), 0x0
});
viewAlphaOverlay.setBackgroundDrawable(gd);
}
}

View file

@ -0,0 +1,46 @@
package yuku.ambilwarna;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ComposeShader;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.Shader;
import android.graphics.Shader.TileMode;
import android.util.AttributeSet;
import android.view.View;
public class AmbilWarnaSquare extends View {
Paint paint;
Shader luar;
final float[] color = { 1.f, 1.f, 1.f };
public AmbilWarnaSquare(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AmbilWarnaSquare(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (paint == null) {
paint = new Paint();
luar = new LinearGradient(0.f, 0.f, 0.f, this.getMeasuredHeight(), 0xffffffff, 0xff000000, TileMode.CLAMP);
}
int rgb = Color.HSVToColor(color);
Shader dalam = new LinearGradient(0.f, 0.f, this.getMeasuredWidth(), 0.f, 0xffffffff, rgb, TileMode.CLAMP);
ComposeShader shader = new ComposeShader(luar, dalam, PorterDuff.Mode.MULTIPLY);
paint.setShader(shader);
canvas.drawRect(0.f, 0.f, this.getMeasuredWidth(), this.getMeasuredHeight(), paint);
}
void setHue(float hue) {
color[0] = hue;
invalidate();
}
}

View file

@ -0,0 +1,34 @@
package yuku.ambilwarna.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.util.FloatMath;
import android.view.View;
public class AmbilWarnaPrefWidgetView extends View {
Paint paint;
float rectSize;
float strokeWidth;
public AmbilWarnaPrefWidgetView(Context context, AttributeSet attrs) {
super(context, attrs);
float density = context.getResources().getDisplayMetrics().density;
rectSize = FloatMath.floor(24.f * density + 0.5f);
strokeWidth = FloatMath.floor(1.f * density + 0.5f);
paint = new Paint();
paint.setColor(0xffffffff);
paint.setStyle(Style.STROKE);
paint.setStrokeWidth(strokeWidth);
}
@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(strokeWidth, strokeWidth, rectSize - strokeWidth, rectSize - strokeWidth, paint);
}
}

View file

@ -0,0 +1,134 @@
package yuku.ambilwarna.widget;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Parcel;
import android.os.Parcelable;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import yuku.ambilwarna.AmbilWarnaDialog;
import yuku.ambilwarna.R;
public class AmbilWarnaPreference extends Preference {
private final boolean supportsAlpha;
int value;
public AmbilWarnaPreference(Context context, AttributeSet attrs) {
super(context, attrs);
final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.AmbilWarnaPreference);
supportsAlpha = ta.getBoolean(R.styleable.AmbilWarnaPreference_supportsAlpha, false);
setWidgetLayoutResource(R.layout.ambilwarna_pref_widget);
}
@Override protected void onBindView(View view) {
super.onBindView(view);
// Set our custom views inside the layout
final View box = view.findViewById(R.id.ambilwarna_pref_widget_box);
if (box != null) {
box.setBackgroundColor(value);
}
}
@Override protected void onClick() {
new AmbilWarnaDialog(getContext(), value, supportsAlpha, new AmbilWarnaDialog.OnAmbilWarnaListener() {
@Override public void onOk(AmbilWarnaDialog dialog, int color) {
if (!callChangeListener(color)) return; // They don't want the value to be set
value = color;
persistInt(value);
notifyChanged();
}
@Override public void onCancel(AmbilWarnaDialog dialog) {
// nothing to do
}
}).show();
}
public void forceSetValue(int value) {
this.value = value;
persistInt(value);
notifyChanged();
}
@Override protected Object onGetDefaultValue(TypedArray a, int index) {
// This preference type's value type is Integer, so we read the default value from the attributes as an Integer.
return a.getInteger(index, 0);
}
@Override protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
if (restoreValue) { // Restore state
value = getPersistedInt(value);
} else { // Set state
int value = (Integer) defaultValue;
this.value = value;
persistInt(value);
}
}
/*
* Suppose a client uses this preference type without persisting. We
* must save the instance state so it is able to, for example, survive
* orientation changes.
*/
@Override protected Parcelable onSaveInstanceState() {
final Parcelable superState = super.onSaveInstanceState();
if (isPersistent()) return superState; // No need to save instance state since it's persistent
final SavedState myState = new SavedState(superState);
myState.value = value;
return myState;
}
@Override protected void onRestoreInstanceState(Parcelable state) {
if (!state.getClass().equals(SavedState.class)) {
// Didn't save state for us in onSaveInstanceState
super.onRestoreInstanceState(state);
return;
}
// Restore the instance state
SavedState myState = (SavedState) state;
super.onRestoreInstanceState(myState.getSuperState());
this.value = myState.value;
notifyChanged();
}
/**
* SavedState, a subclass of {@link android.preference.Preference.BaseSavedState}, will store the state
* of MyPreference, a subclass of Preference.
* <p>
* It is important to always call through to super methods.
*/
private static class SavedState extends BaseSavedState {
int value;
public SavedState(Parcel source) {
super(source);
value = source.readInt();
}
@Override public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeInt(value);
}
public SavedState(Parcelable superState) {
super(superState);
}
@SuppressWarnings("unused") public static final Creator<SavedState> CREATOR = new Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 666 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 751 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 889 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 816 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/ambilwarna_alphacheckered"
android:tileMode="repeat" >
</bitmap>

View file

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ambilwarna_viewContainer"
android:paddingTop="@dimen/ambilwarna_spacer"
android:paddingRight="@dimen/ambilwarna_spacer"
android:paddingBottom="0dp"
android:paddingLeft="@dimen/ambilwarna_spacer"
android:clipToPadding="false"
android:layout_gravity="center"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/ambilwarna_state"
android:orientation="vertical"
android:paddingRight="@dimen/ambilwarna_spacer"
android:gravity="center"
android:layout_centerVertical="true"
>
<FrameLayout
android:layout_width="60dp"
android:layout_height="30dp">
<View
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/ambilwarna_alphacheckered_tiled" />
<View
android:id="@+id/ambilwarna_oldColor"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#faa" />
</FrameLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ambilwarna_arrow_down"
android:paddingTop="@dimen/ambilwarna_spacer"
android:paddingBottom="@dimen/ambilwarna_spacer"
/>
<FrameLayout
android:layout_width="60dp"
android:layout_height="30dp">
<View
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/ambilwarna_alphacheckered_tiled" />
<View
android:id="@+id/ambilwarna_newColor"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#aaf" />
</FrameLayout>
</LinearLayout>
<yuku.ambilwarna.AmbilWarnaSquare
android:id="@+id/ambilwarna_viewSatBri"
android:layout_width="@dimen/ambilwarna_hsvWidth"
android:layout_height="@dimen/ambilwarna_hsvHeight"
android:layout_toRightOf="@id/ambilwarna_state"
android:layerType="software"
/>
<!-- needed because i can't get parent keeping its bottom layout
and its wrap_content height. This view will serve as a bottom spacer. -->
<View
android:layout_width="@dimen/ambilwarna_spacer"
android:layout_height="@dimen/ambilwarna_spacer"
android:layout_below="@id/ambilwarna_viewSatBri"
/>
<ImageView
android:id="@+id/ambilwarna_viewHue"
android:layout_width="@dimen/ambilwarna_hueWidth"
android:layout_height="@dimen/ambilwarna_hsvHeight"
android:layout_toRightOf="@id/ambilwarna_viewSatBri"
android:layout_marginLeft="@dimen/ambilwarna_spacer"
android:src="@drawable/ambilwarna_hue"
android:scaleType="fitXY"
/>
<ImageView
android:id="@+id/ambilwarna_alphaCheckered"
android:layout_width="@dimen/ambilwarna_hueWidth"
android:layout_height="@dimen/ambilwarna_hsvHeight"
android:layout_marginLeft="@dimen/ambilwarna_spacer"
android:layout_toRightOf="@id/ambilwarna_viewHue"
android:scaleType="fitXY"
android:src="@drawable/ambilwarna_alphacheckered_tiled" />
<View
android:id="@+id/ambilwarna_overlay"
android:layout_width="@dimen/ambilwarna_hueWidth"
android:layout_height="@dimen/ambilwarna_hsvHeight"
android:layout_marginLeft="@dimen/ambilwarna_spacer"
android:layout_toRightOf="@id/ambilwarna_viewHue" />
<ImageView
android:id="@+id/ambilwarna_cursor"
android:layout_width="9dp"
android:layout_height="9dp"
android:src="@drawable/ambilwarna_cursor"
android:scaleType="matrix"
/>
<ImageView
android:id="@+id/ambilwarna_alphaCursor"
android:layout_width="9dp"
android:layout_height="9dp"
android:scaleType="matrix"
android:src="@drawable/ambilwarna_cursor" />
<ImageView
android:id="@+id/ambilwarna_target"
android:layout_width="15dp"
android:layout_height="15dp"
android:src="@drawable/ambilwarna_target"
android:scaleType="matrix"
/>
</RelativeLayout>

View file

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ambilwarna_dialogView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" >
<RelativeLayout
android:id="@+id/ambilwarna_viewContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clipToPadding="false"
android:paddingBottom="@dimen/ambilwarna_spacer"
android:paddingLeft="@dimen/ambilwarna_spacer"
android:paddingRight="@dimen/ambilwarna_spacer"
android:paddingTop="@dimen/ambilwarna_spacer" >
<yuku.ambilwarna.AmbilWarnaSquare
android:id="@+id/ambilwarna_viewSatBri"
android:layout_width="@dimen/ambilwarna_hsvWidth"
android:layout_height="@dimen/ambilwarna_hsvHeight"
android:layerType="software" />
<ImageView
android:id="@+id/ambilwarna_viewHue"
android:layout_width="@dimen/ambilwarna_hueWidth"
android:layout_height="@dimen/ambilwarna_hsvHeight"
android:layout_marginLeft="@dimen/ambilwarna_spacer"
android:layout_toRightOf="@id/ambilwarna_viewSatBri"
android:scaleType="fitXY"
android:src="@drawable/ambilwarna_hue" />
<ImageView
android:id="@+id/ambilwarna_alphaCheckered"
android:layout_width="@dimen/ambilwarna_hueWidth"
android:layout_height="@dimen/ambilwarna_hsvHeight"
android:layout_marginLeft="@dimen/ambilwarna_spacer"
android:layout_toRightOf="@id/ambilwarna_viewHue"
android:scaleType="fitXY"
android:src="@drawable/ambilwarna_alphacheckered_tiled" />
<View
android:id="@+id/ambilwarna_overlay"
android:layout_width="@dimen/ambilwarna_hueWidth"
android:layout_height="@dimen/ambilwarna_hsvHeight"
android:layout_marginLeft="@dimen/ambilwarna_spacer"
android:layout_toRightOf="@id/ambilwarna_viewHue" />
<ImageView
android:id="@+id/ambilwarna_cursor"
android:layout_width="9dp"
android:layout_height="9dp"
android:scaleType="matrix"
android:src="@drawable/ambilwarna_cursor" />
<ImageView
android:id="@+id/ambilwarna_alphaCursor"
android:layout_width="9dp"
android:layout_height="9dp"
android:scaleType="matrix"
android:src="@drawable/ambilwarna_cursor" />
<ImageView
android:id="@+id/ambilwarna_target"
android:layout_width="15dp"
android:layout_height="15dp"
android:scaleType="matrix"
android:src="@drawable/ambilwarna_target" />
<LinearLayout
android:id="@+id/ambilwarna_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/ambilwarna_viewSatBri"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/ambilwarna_spacer"
android:gravity="center"
android:orientation="horizontal" >
<FrameLayout
android:layout_width="60dp"
android:layout_height="30dp" >
<View
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/ambilwarna_alphacheckered_tiled" />
<View
android:id="@+id/ambilwarna_oldColor"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#faa" />
</FrameLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/ambilwarna_spacer"
android:paddingRight="@dimen/ambilwarna_spacer"
android:src="@drawable/ambilwarna_arrow_right" />
<FrameLayout
android:layout_width="60dp"
android:layout_height="30dp" >
<View
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/ambilwarna_alphacheckered_tiled" />
<View
android:id="@+id/ambilwarna_newColor"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#aaf" />
</FrameLayout>
</LinearLayout>
</RelativeLayout>
</FrameLayout>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_vertical"
android:layout_marginRight="6dp"
android:focusable="false"
android:clickable="false">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/ambilwarna_alphacheckered_tiled"/>
<yuku.ambilwarna.widget.AmbilWarnaPrefWidgetView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/ambilwarna_pref_widget_box"
/>
</FrameLayout>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="ambilwarna_hsvWidth">240dp</dimen>
<dimen name="ambilwarna_hsvHeight">120dp</dimen>
</resources>

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="ambilwarna_hsvWidth">240dp</dimen>
<dimen name="ambilwarna_hsvHeight">240dp</dimen>
</resources>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="AmbilWarnaPreference">
<attr name="supportsAlpha"
format="boolean"/>
</declare-styleable>
</resources>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="ambilwarna_hsvHeight">240dp</dimen>
<dimen name="ambilwarna_hsvWidth">240dp</dimen>
<dimen name="ambilwarna_hueWidth">30dp</dimen>
<dimen name="ambilwarna_spacer">8dp</dimen>
</resources>

View file

@ -0,0 +1,27 @@
apply plugin: 'com.android.library'
android {
compileSdkVersion 13
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:support-v4:21.0.3'
}

3
libs/emojicon/lint.xml Normal file
View file

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<lint>
</lint>

View file

@ -0,0 +1,12 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="github.ankushsachdeva.emojicon">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19"/>
<application android:allowBackup="true"
android:label="@string/app_name"
android:icon="@drawable/ic_launcher">
</application>
</manifest>

View file

@ -0,0 +1,101 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
/**
* @author Ankush Sachdeva (sankush@yahoo.co.in)
*/
class EmojiAdapter extends BaseAdapter {
private final List<Emojicon> mEmojicons = new ArrayList<>();
private OnEmojiClickedListener mClickListener;
private final Context mContext;
public EmojiAdapter(Context context) {
this.mContext = context;
}
public void setEmojiconList(List<Emojicon> emojiconList) {
mEmojicons.clear();
mEmojicons.addAll(emojiconList);
notifyDataSetChanged();
}
public void setClickListener(OnEmojiClickedListener clickListener) {
mClickListener = clickListener;
}
@Override
public int getCount() {
return mEmojicons.size();
}
@Override
public Emojicon getItem(int position) {
return mEmojicons.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
v = LayoutInflater.from(mContext).inflate(R.layout.emojicon_item, null);
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mClickListener != null) {
mClickListener.onEmojiClicked(((ViewHolder) v.getTag()).mEmoji);
}
}
});
ViewHolder holder = new ViewHolder();
holder.mEmojiContainer = (TextView) v.findViewById(R.id.emojiContainer);
holder.mEmojiId = (TextView) v.findViewById(R.id.emojiId);
v.setTag(holder);
}
Emojicon emoji = getItem(position);
ViewHolder holder = (ViewHolder) v.getTag();
holder.mEmoji = emoji;
holder.mEmojiId.setText(emoji.getId());
holder.mEmojiContainer.setText(emoji.toString());
return v;
}
private class ViewHolder {
TextView mEmojiContainer;
TextView mEmojiId;
Emojicon mEmoji;
}
public interface OnEmojiClickedListener {
void onEmojiClicked(Emojicon emojicon);
}
}

View file

@ -0,0 +1,21 @@
package github.ankushsachdeva.emojicon;
import android.content.Context;
/**
* Created by aleksandr.naumov on 14.05.2015.
*/
class EmojiRecentAdapter extends EmojiAdapter implements Updatable {
private final EmojiconRecentsManager mRecentsManager;
public EmojiRecentAdapter(Context context, EmojiconRecentsManager mRecentsManager) {
super(context);
this.mRecentsManager = mRecentsManager;
update();
}
@Override
public void update() {
setEmojiconList(mRecentsManager.getEmojiList());
}
}

View file

@ -0,0 +1,53 @@
package github.ankushsachdeva.emojicon;
import java.nio.charset.Charset;
/**
* Created by aleksandr.naumov on 13.05.2015.
*/
public class Emojicon {
private final String mStringRepresentation;
public Emojicon(String stringRepresentation) {
byte bytes[] = new byte[stringRepresentation.length() / 2];
for (int i = 0; i < stringRepresentation.length(); i += 2) {
try {
bytes[i / 2] = (byte) Integer.parseInt(stringRepresentation.substring(i, i + 2), 16);
} catch (NumberFormatException ex) {
throw new RuntimeException(String.format("Cannot parse '%s' as emojicon code", stringRepresentation), ex);
}
}
this.mStringRepresentation = new String(bytes, Charset.forName("Utf-8"));
}
@Override
public String toString() {
return mStringRepresentation;
}
public String getId() {
String id = "";
for (byte b : mStringRepresentation.getBytes()) {
id += String.format("%x", b);
}
return id;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Emojicon emojicon = (Emojicon) o;
return mStringRepresentation.equals(emojicon.mStringRepresentation);
}
@Override
public int hashCode() {
return mStringRepresentation.hashCode();
}
}

View file

@ -0,0 +1,67 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon;
import github.ankushsachdeva.emojicon.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.widget.EditText;
/**
* @author Hieu Rocker (rockerhieu@gmail.com).
*/
public class EmojiconEditText extends EditText {
private int mEmojiconSize;
public EmojiconEditText(Context context) {
super(context);
mEmojiconSize = (int) getTextSize();
}
public EmojiconEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public EmojiconEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
private void init(AttributeSet attrs) {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emojicon);
mEmojiconSize = (int) a.getDimension(R.styleable.Emojicon_emojiconSize, getTextSize());
a.recycle();
setText(getText());
}
@Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
super.onTextChanged(text,start,lengthBefore,lengthAfter);
EmojiconHandler.addEmojis(getContext(), getText(), mEmojiconSize);
}
/**
* Set the size of emojicon in pixels.
*/
public void setEmojiconSize(int pixels) {
mEmojiconSize = pixels;
}
}

View file

@ -0,0 +1,78 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon;
import github.ankushsachdeva.emojicon.emoji.Emojicon;
import github.ankushsachdeva.emojicon.emoji.People;
import java.util.Arrays;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.GridView;
import github.ankushsachdeva.emojicon.R;
/**
* @author Hieu Rocker (rockerhieu@gmail.com)
* @author Ankush Sachdeva (sankush@yahoo.co.in)
*/
public class EmojiconGridView{
public View rootView;
EmojiconsPopup mEmojiconPopup;
EmojiconRecents mRecents;
Emojicon[] mData;
public EmojiconGridView(Context context, Emojicon[] emojicons, EmojiconRecents recents, EmojiconsPopup emojiconPopup) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
mEmojiconPopup = emojiconPopup;
rootView = inflater.inflate(R.layout.emojicon_grid, null);
setRecents(recents);
GridView gridView = (GridView) rootView.findViewById(R.id.Emoji_GridView);
if (emojicons== null) {
mData = People.DATA;
} else {
Object[] o = (Object[]) emojicons;
mData = Arrays.asList(o).toArray(new Emojicon[o.length]);
}
EmojiAdapter mAdapter = new EmojiAdapter(rootView.getContext(), mData);
mAdapter.setEmojiClickListener(new OnEmojiconClickedListener() {
@Override
public void onEmojiconClicked(Emojicon emojicon) {
if (mEmojiconPopup.onEmojiconClickedListener != null) {
mEmojiconPopup.onEmojiconClickedListener.onEmojiconClicked(emojicon);
}
if (mRecents != null) {
mRecents.addRecentEmoji(rootView.getContext(), emojicon);
}
}
});
gridView.setAdapter(mAdapter);
}
private void setRecents(EmojiconRecents recents) {
mRecents = recents;
}
public interface OnEmojiconClickedListener {
void onEmojiconClicked(Emojicon emojicon);
}
}

View file

@ -0,0 +1,39 @@
package github.ankushsachdeva.emojicon;
import android.content.Context;
import java.util.ArrayList;
import java.util.List;
/**
* Created by aleksandr.naumov on 14.05.2015.
*/
abstract class EmojiconGroup {
protected final int mIconResId;
public EmojiconGroup(int iconResId) {
mIconResId = iconResId;
}
public static EmojiconGroup fromString(String allEmojicons, int mIconResId) {
return new StaticEmojiconGroup(extractEmojicons(allEmojicons), mIconResId);
}
private static List<Emojicon> extractEmojicons(String emojiconsString) {
List<Emojicon> emojicons = new ArrayList<>();
for (String emojiconString : emojiconsString.split(" ")) {
if(!emojiconString.isEmpty()) {
emojicons.add(new Emojicon(emojiconString));
}
}
return emojicons;
}
public abstract List<Emojicon> getEmojicons();
public abstract EmojiAdapter createAdapter(Context context);
public int getIconResId() {
return mIconResId;
}
}

View file

@ -0,0 +1,92 @@
package github.ankushsachdeva.emojicon;
import android.content.Context;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
/**
* Created by aleksandr.naumov on 14.05.2015.
*/
class EmojiconGroupsLoader {
private static EmojiconGroupsLoader sInstance;
private final List<EmojiconGroup> mGroups;
public static synchronized EmojiconGroupsLoader getInstance(Context context) {
if (sInstance == null) {
sInstance = new EmojiconGroupsLoader(context);
}
return sInstance;
}
private EmojiconGroupsLoader(Context context) {
try {
mGroups = parseEmojiXml(context);
} catch (IOException | XmlPullParserException ex) {
throw new RuntimeException(ex);
}
}
private List<EmojiconGroup> parseEmojiXml(Context context) throws IOException, XmlPullParserException {
ArrayList<EmojiconGroup> groups = new ArrayList<>();
XmlPullParser parser = context.getResources().getXml(R.xml.emoji);
parser.next();
String groupName = null;
for (int eventType = parser.getEventType(); eventType != XmlPullParser.END_DOCUMENT; eventType = parser.next()) {
switch (eventType) {
case XmlPullParser.START_TAG:
if ("group".equals(parser.getName())) {
groupName = parser.getAttributeValue(0);
}
break;
case XmlPullParser.TEXT:
if (groupName != null) {
groups.add(EmojiconGroup.fromString(
parser.getText(),
getGroupNameIcon(groupName)
));
groupName = null;
}
break;
}
}
return groups;
}
private int getGroupNameIcon(String groupName) {
for (KnownGroupNames knownGroupName : KnownGroupNames.values()) {
if (groupName.toLowerCase().equals(knownGroupName.name().toLowerCase())) {
return knownGroupName.getIconResId();
}
}
throw new IllegalArgumentException(String.format("Unknown group name '%s'", groupName));
}
public List<EmojiconGroup> getGroups() {
return mGroups;
}
public enum KnownGroupNames {
RECENT(R.drawable.ic_emoji_recent_light),
SMILES(R.drawable.ic_emoji_people_light),
NATURE(R.drawable.ic_emoji_nature_light),
OBJECTS(R.drawable.ic_emoji_objects_light),
TECH(R.drawable.ic_emoji_places_light),
SYMBOLS(R.drawable.ic_emoji_symbols_light);
private final int iconResId;
KnownGroupNames(int iconResId) {
this.iconResId = iconResId;
}
public int getIconResId() {
return iconResId;
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,196 @@
package github.ankushsachdeva.emojicon;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.ContextThemeWrapper;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.PopupWindow;
/**
* Created by aleksandr.naumov on 15.05.2015.
*/
public class EmojiconPopupDelegate {
public static final String KEY_EMOJI_POPUP_SHOWN = "key_emoji_popup_shown";
private Context mContext;
private EmojiconsPopup mPopup;
private EditText mPrefferredEditText;
private boolean mPendingShow;
private View mRootView;
@Nullable
private PopupShownListener mListener;
public void setShowHideListener(PopupShownListener listener) {
this.mListener = listener;
}
public void setInputEditText(EditText editText) {
mPrefferredEditText = editText;
}
public void attach(View rootView) {
mContext = createThemedContext(rootView.getContext());
mRootView = rootView;
mPopup = new EmojiconsPopup(rootView, mContext);
mPopup.setOnDismissListener(new DismissListener());
mPopup.setOnSoftKeyboardOpenCloseListener(new KeyboardOpenCloseListener());
mPopup.setOnEmojiconClickedListener(new EmojiconClickedListener());
mPopup.setOnEmojiconBackspaceClickedListener(new BackspaceClickedListener());
mPopup.attachGlobalLayoutListener();
if (mPendingShow) {
show();
}
}
private Context createThemedContext(Context context) {
TypedArray typedArray = context.obtainStyledAttributes(null, new int[]{R.attr.emojicon_theme});
int themeId = typedArray.getResourceId(0, R.style.Emojicon);
typedArray.recycle();
return new ContextThemeWrapper(context, themeId);
}
public void detach() {
hide();
if (mPopup != null) {
mPopup.detachGlobalLayoutListener();
mPopup = null;
}
mContext = null;
mPrefferredEditText = null;
mRootView = null;
}
public void saveState(Bundle bundle) {
bundle.putBoolean(KEY_EMOJI_POPUP_SHOWN, isShown());
}
public void restoreState(Bundle bundle) {
if (bundle.containsKey(KEY_EMOJI_POPUP_SHOWN)) {
if (bundle.getBoolean(KEY_EMOJI_POPUP_SHOWN)) {
show();
} else {
hide();
}
}
}
public void show() {
if (mPopup != null && !mPopup.isShowing()) {
if (mPopup.isKeyBoardOpen()) {
//If keyboard is visible, simply show the emoji popup
mPopup.showAtBottom();
} else {
//else, open the text keyboard first and immediately after that show the emoji popup
mPrefferredEditText.setFocusableInTouchMode(true);
mPrefferredEditText.requestFocus();
mPopup.showAtBottomPending();
final InputMethodManager inputMethodManager = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(mPrefferredEditText, InputMethodManager.SHOW_IMPLICIT);
}
mPendingShow = false;
notifyShown();
} else if (!mPendingShow) {
mPendingShow = true;
notifyShown();
}
}
public void hide() {
if (mPopup != null && mPopup.isShowing()) {
mPopup.dismiss();
notifyHidden();
} else if (mPendingShow) {
mPendingShow = false;
notifyHidden();
}
}
private void notifyShown() {
if (mListener != null) {
mListener.onPopupShown();
}
}
private void notifyHidden() {
if (mListener != null) {
mListener.onPopupHidden();
}
}
public boolean isShown() {
return mPopup != null ? mPopup.isShowing() : mPendingShow;
}
public void toggle() {
if (isShown()) {
hide();
} else {
show();
}
}
@Nullable
public EditText findFocusedEditText() {
View view = mRootView != null ? mRootView.findFocus() : null;
if (view instanceof EditText) {
return (EditText) view;
} else {
return null;
}
}
public interface PopupShownListener {
void onPopupShown();
void onPopupHidden();
}
private class BackspaceClickedListener implements EmojiconsPopup.OnEmojiconBackspaceClickedListener {
@Override
public void onEmojiconBackspaceClicked(View v) {
EditText currentFocus = findFocusedEditText();
if (currentFocus != null) {
KeyEvent event = new KeyEvent(0, 0, 0, KeyEvent.KEYCODE_DEL, 0, 0, 0, 0, KeyEvent.KEYCODE_ENDCALL);
currentFocus.dispatchKeyEvent(event);
}
}
}
private class EmojiconClickedListener implements EmojiconsPopup.OnEmojiconClickedListener {
@Override
public void onEmojiconClicked(Emojicon emojicon) {
EditText currentFocus = findFocusedEditText();
if (currentFocus != null) {
String textToInsert = emojicon.toString();
int start = Math.max(currentFocus.getSelectionStart(), 0);
int end = Math.max(currentFocus.getSelectionEnd(), 0);
currentFocus.getText().replace(Math.min(start, end), Math.max(start, end), textToInsert, 0, textToInsert.length());
}
}
}
private class KeyboardOpenCloseListener implements EmojiconsPopup.OnSoftKeyboardOpenCloseListener {
@Override
public void onKeyboardOpen(int keyBoardHeight) {
}
@Override
public void onKeyboardClose() {
hide();
}
}
private class DismissListener implements PopupWindow.OnDismissListener {
@Override
public void onDismiss() {
notifyHidden();
}
}
}

View file

@ -0,0 +1,28 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon;
import github.ankushsachdeva.emojicon.emoji.Emojicon;
import android.content.Context;
/**
* @author Daniele Ricci
*/
public interface EmojiconRecents {
public void addRecentEmoji(Context context, Emojicon emojicon);
}

View file

@ -0,0 +1,62 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon;
import github.ankushsachdeva.emojicon.emoji.Emojicon;
import android.content.Context;
import android.widget.GridView;
import github.ankushsachdeva.emojicon.R;
/**
* @author Daniele Ricci
* @author Ankush Sachdeva (sankush@yahoo.co.in)
*/
public class EmojiconRecentsGridView extends EmojiconGridView implements EmojiconRecents {
EmojiAdapter mAdapter;
public EmojiconRecentsGridView(Context context, Emojicon[] emojicons,
EmojiconRecents recents,EmojiconsPopup emojiconsPopup) {
super(context, emojicons, recents, emojiconsPopup);
EmojiconRecentsManager recents1 = EmojiconRecentsManager
.getInstance(rootView.getContext());
mAdapter = new EmojiAdapter(rootView.getContext(), recents1);
mAdapter.setEmojiClickListener(new OnEmojiconClickedListener() {
@Override
public void onEmojiconClicked(Emojicon emojicon) {
if (mEmojiconPopup.onEmojiconClickedListener != null) {
mEmojiconPopup.onEmojiconClickedListener.onEmojiconClicked(emojicon);
}
}
});
GridView gridView = (GridView) rootView.findViewById(R.id.Emoji_GridView);
gridView.setAdapter(mAdapter);
}
@Override
public void addRecentEmoji(Context context, Emojicon emojicon) {
EmojiconRecentsManager recents = EmojiconRecentsManager
.getInstance(context);
recents.push(emojicon);
// notify dataset changed
if (mAdapter != null)
mAdapter.notifyDataSetChanged();
}
}

View file

@ -0,0 +1,84 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon;
import java.util.Iterator;
import java.util.LinkedList;
import android.content.Context;
import android.content.SharedPreferences;
/**
* @author Daniele Ricci
*/
class EmojiconRecentsManager {
private static final String PREFERENCE_NAME = "emojicon_v2";
private static final String PREF_RECENTS = "recent_emojis_v2";
private static final String PREF_PAGE = "recent_page_v2";
private static final String EMOJI_DIVIDER = " ";
private final LinkedList<Emojicon> mEmoji;
private Context mContext;
public EmojiconRecentsManager(Context context) {
mContext = context.getApplicationContext();
mEmoji = loadRecent();
}
public LinkedList<Emojicon> getEmojiList() {
return mEmoji;
}
public int getRecentPage() {
return getPreferences().getInt(PREF_PAGE, 0);
}
public void setRecentPage(int page) {
getPreferences().edit().putInt(PREF_PAGE, page).commit();
}
public void push(Emojicon object) {
if (mEmoji.contains(object)) {
mEmoji.remove(object);
}
mEmoji.addFirst(object);
}
private SharedPreferences getPreferences() {
return mContext.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
}
private LinkedList<Emojicon> loadRecent() {
String allEmoji = getPreferences().getString(PREF_RECENTS, "");
if (allEmoji != null) {
return new LinkedList<>(EmojiconGroup.fromString(allEmoji, 0).getEmojicons());
} else {
return new LinkedList<>();
}
}
public void save() {
StringBuilder str = new StringBuilder();
for (Iterator<Emojicon> iterator = mEmoji.iterator(); iterator.hasNext(); ) {
Emojicon emojicon = iterator.next();
str.append(emojicon.getId()).append(iterator.hasNext() ? EMOJI_DIVIDER : "");
}
getPreferences().edit().putString(PREF_RECENTS, str.toString()).apply();
}
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.style.DynamicDrawableSpan;
/**
* @author Hieu Rocker (rockerhieu@gmail.com)
*/
class EmojiconSpan extends DynamicDrawableSpan {
private final Context mContext;
private final int mResourceId;
private final int mSize;
private Drawable mDrawable;
public EmojiconSpan(Context context, int resourceId, int size) {
super();
mContext = context;
mResourceId = resourceId;
mSize = size;
}
public Drawable getDrawable() {
if (mDrawable == null) {
try {
mDrawable = mContext.getResources().getDrawable(mResourceId);
int size = mSize;
mDrawable.setBounds(0, 0, size, size);
} catch (Exception e) {
// swallow
}
}
return mDrawable;
}
}

View file

@ -0,0 +1,76 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon;
import github.ankushsachdeva.emojicon.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.text.SpannableStringBuilder;
import android.util.AttributeSet;
import android.widget.TextView;
/**
* @author Hieu Rocker (rockerhieu@gmail.com).
*/
public class EmojiconTextView extends TextView {
private int mEmojiconSize;
private int mTextStart = 0;
private int mTextLength = -1;
public EmojiconTextView(Context context) {
super(context);
init(null);
}
public EmojiconTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public EmojiconTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(attrs);
}
private void init(AttributeSet attrs) {
if (attrs == null) {
mEmojiconSize = (int) getTextSize();
} else {
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emojicon);
mEmojiconSize = (int) a.getDimension(R.styleable.Emojicon_emojiconSize, getTextSize());
mTextStart = a.getInteger(R.styleable.Emojicon_emojiconTextStart, 0);
mTextLength = a.getInteger(R.styleable.Emojicon_emojiconTextLength, -1);
a.recycle();
}
setText(getText());
}
@Override
public void setText(CharSequence text, BufferType type) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
EmojiconHandler.addEmojis(getContext(), builder, mEmojiconSize, mTextStart, mTextLength);
super.setText(builder, type);
}
/**
* Set the size of emojicon in pixels.
*/
public void setEmojiconSize(int pixels) {
mEmojiconSize = pixels;
}
}

View file

@ -0,0 +1,361 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Rect;
import android.support.annotation.Nullable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.WindowManager.LayoutParams;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
/**
* @author Ankush Sachdeva (sankush@yahoo.co.in).
*/
public class EmojiconsPopup extends PopupWindow implements ViewPager.OnPageChangeListener, EmojiAdapter.OnEmojiClickedListener {
private View[] mEmojiTabs;
private EmojiconRecentsManager mRecentsManager;
private int keyBoardHeight = 0;
private boolean mWaitingForKbOpen = false;
private boolean mIsOpened = false;
private View mRootView;
private Context mContext;
private ViewPager mEmojisPager;
@Nullable
private OnSoftKeyboardOpenCloseListener mSoftKeyboardOpenCloseListener;
@Nullable
private OnEmojiconClickedListener mEmojiconClickedListener;
@Nullable
private OnEmojiconBackspaceClickedListener mEmojiconBackspaceClickedListener;
private GlobalLayoutListener mGlobalLayoutListener = new GlobalLayoutListener();
/**
* Constructor
*
* @param rootView The top most layout in your view hierarchy. The difference of this view and the screen height will be used to calculate the keyboard height.
* @param context The context of current activity.
*/
public EmojiconsPopup(View rootView, Context context) {
super(context, null, R.attr.emojicon_dialog_style);
mContext = context;
mRootView = rootView;
mRecentsManager = new EmojiconRecentsManager(context);
setContentView(createCustomView());
setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
/**
* Set the listener for the event of keyboard opening or closing.
*/
public void setOnSoftKeyboardOpenCloseListener(OnSoftKeyboardOpenCloseListener listener) {
this.mSoftKeyboardOpenCloseListener = listener;
}
/**
* Set the listener for the event when any of the emojicon is clicked
*/
public void setOnEmojiconClickedListener(OnEmojiconClickedListener listener) {
this.mEmojiconClickedListener = listener;
}
/**
* Set the listener for the event when backspace on emojicon popup is clicked
*/
public void setOnEmojiconBackspaceClickedListener(OnEmojiconBackspaceClickedListener listener) {
this.mEmojiconBackspaceClickedListener = listener;
}
/**
* Use this function to show the emoji popup.
* NOTE: Since, the soft keyboard sizes are variable on different android devices, the
* library needs you to open the soft keyboard atleast once before calling this function.
* If that is not possible see showAtBottomPending() function.
*/
public void showAtBottom() {
showAtLocation(mRootView, Gravity.BOTTOM, 0, 0);
}
/**
* Use this function when the soft keyboard has not been opened yet. This
* will show the emoji popup after the keyboard is up next time.
* Generally, you will be calling InputMethodManager.showSoftInput function after
* calling this function.
*/
public void showAtBottomPending() {
if (isKeyBoardOpen()) {
showAtBottom();
} else {
mWaitingForKbOpen = true;
}
}
/**
* @return Returns true if the soft keyboard is open, false otherwise.
*/
public Boolean isKeyBoardOpen() {
return mIsOpened;
}
/**
* Dismiss the popup
*/
@Override
public void dismiss() {
super.dismiss();
mRecentsManager.save();
}
/**
* Call this function to resize the emoji popup according to your soft keyboard size
*/
public void attachGlobalLayoutListener() {
mRootView.getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);
}
public void detachGlobalLayoutListener() {
mRootView.getViewTreeObserver().removeGlobalOnLayoutListener(mGlobalLayoutListener);
}
/**
* Manually set the popup window size
*
* @param width Width of the popup
* @param height Height of the popup
*/
public void setSize(int width, int height) {
setWidth(width);
setHeight(height);
}
private View createCustomView() {
View view = LayoutInflater.from(mContext).inflate(R.layout.emojicons, null);
List<EmojiconGroup> displayedGroups = collectDisplayedGroups();
initViewPager(view, displayedGroups);
initTabs(view, displayedGroups);
initCurrentPage();
return view;
}
private void initCurrentPage() {
// get last selected page
int page = mRecentsManager.getRecentPage();
// last page was recents, check if there are recents to use
// if none was found, go to page 1
if (page == 0 && mRecentsManager.getEmojiList().isEmpty()) {
page = 1;
}
if (page == 0) {
onPageSelected(page);
} else {
mEmojisPager.setCurrentItem(page, false);
}
}
private void initTabs(View view, List<EmojiconGroup> displayedGroups) {
LinearLayout tabHostLayout = (LinearLayout) view.findViewById(R.id.emojis_tab);
mEmojiTabs = new View[displayedGroups.size()];
for (int i = 0; i < displayedGroups.size(); i++) {
final int position = i;
mEmojiTabs[i] = inflateTab(tabHostLayout, displayedGroups.get(i).getIconResId());
mEmojiTabs[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mEmojisPager.setCurrentItem(position);
}
});
inflateDivider(tabHostLayout);
}
View backSpace = inflateTab(tabHostLayout, R.drawable.ic_keyboard_delete);
backSpace.setOnTouchListener(new RepeatTouchListener(1000, 50, new OnClickListener() {
@Override
public void onClick(View v) {
if (mEmojiconBackspaceClickedListener != null) {
mEmojiconBackspaceClickedListener.onEmojiconBackspaceClicked(v);
}
}
}));
}
private View inflateTab(LinearLayout tabHostLayout, int iconResId) {
ImageButton tabView = (ImageButton) LayoutInflater.from(mContext)
.inflate(R.layout.emojicon_tab, tabHostLayout, false);
tabHostLayout.addView(tabView);
tabView.setImageDrawable(mContext.getResources().getDrawable(iconResId));
return tabView;
}
private View inflateDivider(LinearLayout tabHostLayout) {
return LayoutInflater.from(mContext).inflate(R.layout.emojicon_tab_divider, tabHostLayout);
}
private void initViewPager(View view, List<EmojiconGroup> displayedGroups) {
mEmojisPager = (ViewPager) view.findViewById(R.id.emojis_pager);
mEmojisPager.setOnPageChangeListener(this);
mEmojisPager.setAdapter(new EmojisPagerAdapter(displayedGroups));
}
private List<EmojiconGroup> collectDisplayedGroups() {
List<EmojiconGroup> groups = new ArrayList<>();
groups.add(new RecentsEmojiconGroup(mRecentsManager, EmojiconGroupsLoader.KnownGroupNames.RECENT.getIconResId()));
groups.addAll(EmojiconGroupsLoader.getInstance(mContext).getGroups());
return groups;
}
@Override
public void onPageScrolled(int i, float v, int i2) {
// ignore
}
@Override
public void onPageSelected(int position) {
for (int i = 0; i < mEmojiTabs.length; i++) {
mEmojiTabs[i].setSelected(i == position);
}
mRecentsManager.setRecentPage(position);
EmojiAdapter adapter = ((EmojisPagerAdapter) mEmojisPager.getAdapter()).getPageAdapter(position);
if (adapter instanceof Updatable) {
((Updatable) adapter).update();
}
}
@Override
public void onPageScrollStateChanged(int i) {
// ignore
}
@Override
public void onEmojiClicked(Emojicon emojicon) {
mRecentsManager.push(emojicon);
if (mEmojiconClickedListener != null) {
mEmojiconClickedListener.onEmojiconClicked(emojicon);
}
}
private class EmojisPagerAdapter extends PagerAdapter {
private final List<EmojiconGroup> mGroups;
private final SparseArray<EmojiAdapter> mAdapters = new SparseArray<>();
public EmojisPagerAdapter(List<EmojiconGroup> groups) {
mGroups = groups;
}
public EmojiAdapter getPageAdapter(int pageIndex) {
return mAdapters.get(pageIndex);
}
@Override
public int getCount() {
return mGroups.size();
}
@Override
public GridView instantiateItem(ViewGroup container, final int viewPosition) {
GridView gridView = (GridView) LayoutInflater.from(mContext).inflate(R.layout.emojicon_grid, container, false);
container.addView(gridView);
final EmojiAdapter adapter = mGroups.get(viewPosition).createAdapter(mContext);
gridView.setAdapter(adapter);
adapter.setClickListener(EmojiconsPopup.this);
mAdapters.put(viewPosition, adapter);
return gridView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object view) {
container.removeView((View) view);
mAdapters.remove(position);
}
@Override
public boolean isViewFromObject(View view, Object key) {
return key == view;
}
}
public interface OnEmojiconClickedListener {
void onEmojiconClicked(Emojicon emojicon);
}
public interface OnEmojiconBackspaceClickedListener {
void onEmojiconBackspaceClicked(View v);
}
public interface OnSoftKeyboardOpenCloseListener {
void onKeyboardOpen(int keyBoardHeight);
void onKeyboardClose();
}
private class GlobalLayoutListener implements OnGlobalLayoutListener {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
mRootView.getWindowVisibleDisplayFrame(r);
int screenHeight = mRootView.getRootView().getHeight();
int heightDifference = screenHeight - (r.bottom - r.top);
int resourceId = mContext.getResources()
.getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
heightDifference -= mContext.getResources().getDimensionPixelSize(resourceId);
}
if (heightDifference > 100) {
int oldHeight = getHeight();
keyBoardHeight = heightDifference;
setSize(LayoutParams.MATCH_PARENT, keyBoardHeight);
if (!mIsOpened) {
if (mSoftKeyboardOpenCloseListener != null) {
mSoftKeyboardOpenCloseListener.onKeyboardOpen(keyBoardHeight);
}
}
mIsOpened = true;
if (mWaitingForKbOpen) {
showAtBottom();
mWaitingForKbOpen = false;
} else if(isShowing() && oldHeight != keyBoardHeight) {
dismiss();
showAtBottom();
}
} else {
mIsOpened = false;
if (mSoftKeyboardOpenCloseListener != null) {
mSoftKeyboardOpenCloseListener.onKeyboardClose();
}
}
}
}
}

View file

@ -0,0 +1,28 @@
package github.ankushsachdeva.emojicon;
import android.content.Context;
import java.util.List;
/**
* Created by aleksandr.naumov on 14.05.2015.
*/
class RecentsEmojiconGroup extends EmojiconGroup {
private final EmojiconRecentsManager mRecentsManager;
public RecentsEmojiconGroup(EmojiconRecentsManager mRecentsManager, int iconResId) {
super(iconResId);
this.mRecentsManager = mRecentsManager;
}
@Override
public List<Emojicon> getEmojicons() {
return mRecentsManager.getEmojiList();
}
@Override
public EmojiAdapter createAdapter(Context context) {
return new EmojiRecentAdapter(context, mRecentsManager);
}
}

View file

@ -0,0 +1,74 @@
package github.ankushsachdeva.emojicon;
import android.os.Handler;
import android.os.SystemClock;
import android.view.MotionEvent;
import android.view.View;
/**
* A class, that can be used as a TouchListener on any view (e.g. a Button).
* It cyclically runs a clickListener, emulating keyboard-like behaviour. First
* click is fired immediately, next before initialInterval, and subsequent before
* normalInterval.
* <p/>
* <p>Interval is scheduled before the onClick completes, so it has to run fast.
* If it runs slow, it does not generate skipped onClicks.
*/
class RepeatTouchListener implements View.OnTouchListener {
private Handler handler = new Handler();
private int initialInterval;
private final int normalInterval;
private final View.OnClickListener clickListener;
private Runnable handlerRunnable = new Runnable() {
@Override
public void run() {
if (downView == null) {
return;
}
handler.removeCallbacksAndMessages(downView);
handler.postAtTime(this, downView, SystemClock.uptimeMillis() + normalInterval);
clickListener.onClick(downView);
}
};
private View downView;
/**
* @param initialInterval The interval before first click event
* @param normalInterval The interval before second and subsequent click
* events
* @param clickListener The OnClickListener, that will be called
* periodically
*/
public RepeatTouchListener(int initialInterval, int normalInterval, View.OnClickListener clickListener) {
if (clickListener == null)
throw new IllegalArgumentException("null runnable");
if (initialInterval < 0 || normalInterval < 0)
throw new IllegalArgumentException("negative interval");
this.initialInterval = initialInterval;
this.normalInterval = normalInterval;
this.clickListener = clickListener;
}
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
downView = view;
handler.removeCallbacks(handlerRunnable);
handler.postAtTime(handlerRunnable, downView, SystemClock.uptimeMillis() + initialInterval);
clickListener.onClick(view);
return true;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_OUTSIDE:
handler.removeCallbacksAndMessages(downView);
downView = null;
return true;
}
return false;
}
}

View file

@ -0,0 +1,29 @@
package github.ankushsachdeva.emojicon;
import android.content.Context;
import java.util.List;
/**
* Created by aleksandr.naumov on 13.05.2015.
*/
class StaticEmojiconGroup extends EmojiconGroup {
private final List<Emojicon> mEmojicons;
public StaticEmojiconGroup(List<Emojicon> emojicons, int iconResId) {
super(iconResId);
mEmojicons = emojicons;
}
@Override
public List<Emojicon> getEmojicons() {
return mEmojicons;
}
@Override
public EmojiAdapter createAdapter(Context context) {
EmojiAdapter adapter = new EmojiAdapter(context);
adapter.setEmojiconList(getEmojicons());
return adapter;
}
}

View file

@ -0,0 +1,8 @@
package github.ankushsachdeva.emojicon;
/**
* Created by aleksandr.naumov on 14.05.2015.
*/
interface Updatable {
void update();
}

View file

@ -0,0 +1,74 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon.emoji;
import java.io.Serializable;
/**
* @author Hieu Rocker (rockerhieu@gmail.com)
*/
public class Emojicon implements Serializable {
private static final long serialVersionUID = 1L;
private String emoji;
private Emojicon() {
}
public static Emojicon fromCodePoint(int codePoint) {
Emojicon emoji = new Emojicon();
emoji.emoji = newString(codePoint);
return emoji;
}
public static Emojicon fromChar(char ch) {
Emojicon emoji = new Emojicon();
emoji.emoji = Character.toString(ch);
return emoji;
}
public static Emojicon fromChars(String chars) {
Emojicon emoji = new Emojicon();
emoji.emoji = chars;
return emoji;
}
public Emojicon(String emoji) {
this.emoji = emoji;
}
public String getEmoji() {
return emoji;
}
@Override
public boolean equals(Object o) {
return o instanceof Emojicon && emoji.equals(((Emojicon) o).emoji);
}
@Override
public int hashCode() {
return emoji.hashCode();
}
public static final String newString(int codePoint) {
if (Character.charCount(codePoint) == 1) {
return String.valueOf(codePoint);
} else {
return new String(Character.toChars(codePoint));
}
}
}

View file

@ -0,0 +1,141 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon.emoji;
/**
* @author Hieu Rocker (rockerhieu@gmail.com)
*/
public class Nature {
public static final Emojicon[] DATA = new Emojicon[]{
Emojicon.fromCodePoint(0x1f436),
Emojicon.fromCodePoint(0x1f43a),
Emojicon.fromCodePoint(0x1f431),
Emojicon.fromCodePoint(0x1f42d),
Emojicon.fromCodePoint(0x1f439),
Emojicon.fromCodePoint(0x1f430),
Emojicon.fromCodePoint(0x1f438),
Emojicon.fromCodePoint(0x1f42f),
Emojicon.fromCodePoint(0x1f428),
Emojicon.fromCodePoint(0x1f43b),
Emojicon.fromCodePoint(0x1f437),
Emojicon.fromCodePoint(0x1f43d),
Emojicon.fromCodePoint(0x1f42e),
Emojicon.fromCodePoint(0x1f417),
Emojicon.fromCodePoint(0x1f435),
Emojicon.fromCodePoint(0x1f412),
Emojicon.fromCodePoint(0x1f434),
Emojicon.fromCodePoint(0x1f411),
Emojicon.fromCodePoint(0x1f418),
Emojicon.fromCodePoint(0x1f43c),
Emojicon.fromCodePoint(0x1f427),
Emojicon.fromCodePoint(0x1f426),
Emojicon.fromCodePoint(0x1f424),
Emojicon.fromCodePoint(0x1f425),
Emojicon.fromCodePoint(0x1f423),
Emojicon.fromCodePoint(0x1f414),
Emojicon.fromCodePoint(0x1f40d),
Emojicon.fromCodePoint(0x1f422),
Emojicon.fromCodePoint(0x1f41b),
Emojicon.fromCodePoint(0x1f41d),
Emojicon.fromCodePoint(0x1f41c),
Emojicon.fromCodePoint(0x1f41e),
Emojicon.fromCodePoint(0x1f40c),
Emojicon.fromCodePoint(0x1f419),
Emojicon.fromCodePoint(0x1f41a),
Emojicon.fromCodePoint(0x1f420),
Emojicon.fromCodePoint(0x1f41f),
Emojicon.fromCodePoint(0x1f42c),
Emojicon.fromCodePoint(0x1f433),
Emojicon.fromCodePoint(0x1f40b),
Emojicon.fromCodePoint(0x1f404),
Emojicon.fromCodePoint(0x1f40f),
Emojicon.fromCodePoint(0x1f400),
Emojicon.fromCodePoint(0x1f403),
Emojicon.fromCodePoint(0x1f405),
Emojicon.fromCodePoint(0x1f407),
Emojicon.fromCodePoint(0x1f409),
Emojicon.fromCodePoint(0x1f40e),
Emojicon.fromCodePoint(0x1f410),
Emojicon.fromCodePoint(0x1f413),
Emojicon.fromCodePoint(0x1f415),
Emojicon.fromCodePoint(0x1f416),
Emojicon.fromCodePoint(0x1f401),
Emojicon.fromCodePoint(0x1f402),
Emojicon.fromCodePoint(0x1f432),
Emojicon.fromCodePoint(0x1f421),
Emojicon.fromCodePoint(0x1f40a),
Emojicon.fromCodePoint(0x1f42b),
Emojicon.fromCodePoint(0x1f42a),
Emojicon.fromCodePoint(0x1f406),
Emojicon.fromCodePoint(0x1f408),
Emojicon.fromCodePoint(0x1f429),
Emojicon.fromCodePoint(0x1f43e),
Emojicon.fromCodePoint(0x1f490),
Emojicon.fromCodePoint(0x1f338),
Emojicon.fromCodePoint(0x1f337),
Emojicon.fromCodePoint(0x1f340),
Emojicon.fromCodePoint(0x1f339),
Emojicon.fromCodePoint(0x1f33b),
Emojicon.fromCodePoint(0x1f33a),
Emojicon.fromCodePoint(0x1f341),
Emojicon.fromCodePoint(0x1f343),
Emojicon.fromCodePoint(0x1f342),
Emojicon.fromCodePoint(0x1f33f),
Emojicon.fromCodePoint(0x1f33e),
Emojicon.fromCodePoint(0x1f344),
Emojicon.fromCodePoint(0x1f335),
Emojicon.fromCodePoint(0x1f334),
Emojicon.fromCodePoint(0x1f332),
Emojicon.fromCodePoint(0x1f333),
Emojicon.fromCodePoint(0x1f330),
Emojicon.fromCodePoint(0x1f331),
Emojicon.fromCodePoint(0x1f33c),
Emojicon.fromCodePoint(0x1f310),
Emojicon.fromCodePoint(0x1f31e),
Emojicon.fromCodePoint(0x1f31d),
Emojicon.fromCodePoint(0x1f31a),
Emojicon.fromCodePoint(0x1f311),
Emojicon.fromCodePoint(0x1f312),
Emojicon.fromCodePoint(0x1f313),
Emojicon.fromCodePoint(0x1f314),
Emojicon.fromCodePoint(0x1f315),
Emojicon.fromCodePoint(0x1f316),
Emojicon.fromCodePoint(0x1f317),
Emojicon.fromCodePoint(0x1f318),
Emojicon.fromCodePoint(0x1f31c),
Emojicon.fromCodePoint(0x1f31b),
Emojicon.fromCodePoint(0x1f319),
Emojicon.fromCodePoint(0x1f30d),
Emojicon.fromCodePoint(0x1f30e),
Emojicon.fromCodePoint(0x1f30f),
Emojicon.fromCodePoint(0x1f30b),
Emojicon.fromCodePoint(0x1f30c),
Emojicon.fromCodePoint(0x1f320),
Emojicon.fromChar((char) 0x2b50),
Emojicon.fromChar((char) 0x2600),
Emojicon.fromChar((char) 0x26c5),
Emojicon.fromChar((char) 0x2601),
Emojicon.fromChar((char) 0x26a1),
Emojicon.fromChar((char) 0x2614),
Emojicon.fromChar((char) 0x2744),
Emojicon.fromChar((char) 0x26c4),
Emojicon.fromCodePoint(0x1f300),
Emojicon.fromCodePoint(0x1f301),
Emojicon.fromCodePoint(0x1f308),
Emojicon.fromCodePoint(0x1f30a),
};
}

View file

@ -0,0 +1,255 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon.emoji;
/**
* @author Hieu Rocker (rockerhieu@gmail.com)
*/
public class Objects {
public static final Emojicon[] DATA = new Emojicon[]{
Emojicon.fromCodePoint(0x1f38d),
Emojicon.fromCodePoint(0x1f49d),
Emojicon.fromCodePoint(0x1f38e),
Emojicon.fromCodePoint(0x1f392),
Emojicon.fromCodePoint(0x1f393),
Emojicon.fromCodePoint(0x1f38f),
Emojicon.fromCodePoint(0x1f386),
Emojicon.fromCodePoint(0x1f387),
Emojicon.fromCodePoint(0x1f390),
Emojicon.fromCodePoint(0x1f391),
Emojicon.fromCodePoint(0x1f383),
Emojicon.fromCodePoint(0x1f47b),
Emojicon.fromCodePoint(0x1f385),
Emojicon.fromCodePoint(0x1f384),
Emojicon.fromCodePoint(0x1f381),
Emojicon.fromCodePoint(0x1f38b),
Emojicon.fromCodePoint(0x1f389),
Emojicon.fromCodePoint(0x1f38a),
Emojicon.fromCodePoint(0x1f388),
Emojicon.fromCodePoint(0x1f38c),
Emojicon.fromCodePoint(0x1f52e),
Emojicon.fromCodePoint(0x1f3a5),
Emojicon.fromCodePoint(0x1f4f7),
Emojicon.fromCodePoint(0x1f4f9),
Emojicon.fromCodePoint(0x1f4fc),
Emojicon.fromCodePoint(0x1f4bf),
Emojicon.fromCodePoint(0x1f4c0),
Emojicon.fromCodePoint(0x1f4bd),
Emojicon.fromCodePoint(0x1f4be),
Emojicon.fromCodePoint(0x1f4bb),
Emojicon.fromCodePoint(0x1f4f1),
Emojicon.fromChar((char) 0x260e),
Emojicon.fromCodePoint(0x1f4de),
Emojicon.fromCodePoint(0x1f4df),
Emojicon.fromCodePoint(0x1f4e0),
Emojicon.fromCodePoint(0x1f4e1),
Emojicon.fromCodePoint(0x1f4fa),
Emojicon.fromCodePoint(0x1f4fb),
Emojicon.fromCodePoint(0x1f508),
Emojicon.fromCodePoint(0x1f509),
Emojicon.fromCodePoint(0x1f50a),
Emojicon.fromCodePoint(0x1f507),
Emojicon.fromCodePoint(0x1f514),
Emojicon.fromCodePoint(0x1f515),
Emojicon.fromCodePoint(0x1f4e2),
Emojicon.fromCodePoint(0x1f4e3),
Emojicon.fromChar((char) 0x23f3),
Emojicon.fromChar((char) 0x231b),
Emojicon.fromChar((char) 0x23f0),
Emojicon.fromChar((char) 0x231a),
Emojicon.fromCodePoint(0x1f513),
Emojicon.fromCodePoint(0x1f512),
Emojicon.fromCodePoint(0x1f50f),
Emojicon.fromCodePoint(0x1f510),
Emojicon.fromCodePoint(0x1f511),
Emojicon.fromCodePoint(0x1f50e),
Emojicon.fromCodePoint(0x1f4a1),
Emojicon.fromCodePoint(0x1f526),
Emojicon.fromCodePoint(0x1f506),
Emojicon.fromCodePoint(0x1f505),
Emojicon.fromCodePoint(0x1f50c),
Emojicon.fromCodePoint(0x1f50b),
Emojicon.fromCodePoint(0x1f50d),
Emojicon.fromCodePoint(0x1f6c1),
Emojicon.fromCodePoint(0x1f6c0),
Emojicon.fromCodePoint(0x1f6bf),
Emojicon.fromCodePoint(0x1f6bd),
Emojicon.fromCodePoint(0x1f527),
Emojicon.fromCodePoint(0x1f529),
Emojicon.fromCodePoint(0x1f528),
Emojicon.fromCodePoint(0x1f6aa),
Emojicon.fromCodePoint(0x1f6ac),
Emojicon.fromCodePoint(0x1f4a3),
Emojicon.fromCodePoint(0x1f52b),
Emojicon.fromCodePoint(0x1f52a),
Emojicon.fromCodePoint(0x1f48a),
Emojicon.fromCodePoint(0x1f489),
Emojicon.fromCodePoint(0x1f4b0),
Emojicon.fromCodePoint(0x1f4b4),
Emojicon.fromCodePoint(0x1f4b5),
Emojicon.fromCodePoint(0x1f4b7),
Emojicon.fromCodePoint(0x1f4b6),
Emojicon.fromCodePoint(0x1f4b3),
Emojicon.fromCodePoint(0x1f4b8),
Emojicon.fromCodePoint(0x1f4f2),
Emojicon.fromCodePoint(0x1f4e7),
Emojicon.fromCodePoint(0x1f4e5),
Emojicon.fromCodePoint(0x1f4e4),
Emojicon.fromChar((char) 0x2709),
Emojicon.fromCodePoint(0x1f4e9),
Emojicon.fromCodePoint(0x1f4e8),
Emojicon.fromCodePoint(0x1f4ef),
Emojicon.fromCodePoint(0x1f4eb),
Emojicon.fromCodePoint(0x1f4ea),
Emojicon.fromCodePoint(0x1f4ec),
Emojicon.fromCodePoint(0x1f4ed),
Emojicon.fromCodePoint(0x1f4ee),
Emojicon.fromCodePoint(0x1f4e6),
Emojicon.fromCodePoint(0x1f4dd),
Emojicon.fromCodePoint(0x1f4c4),
Emojicon.fromCodePoint(0x1f4c3),
Emojicon.fromCodePoint(0x1f4d1),
Emojicon.fromCodePoint(0x1f4ca),
Emojicon.fromCodePoint(0x1f4c8),
Emojicon.fromCodePoint(0x1f4c9),
Emojicon.fromCodePoint(0x1f4dc),
Emojicon.fromCodePoint(0x1f4cb),
Emojicon.fromCodePoint(0x1f4c5),
Emojicon.fromCodePoint(0x1f4c6),
Emojicon.fromCodePoint(0x1f4c7),
Emojicon.fromCodePoint(0x1f4c1),
Emojicon.fromCodePoint(0x1f4c2),
Emojicon.fromChar((char) 0x2702),
Emojicon.fromCodePoint(0x1f4cc),
Emojicon.fromCodePoint(0x1f4ce),
Emojicon.fromChar((char) 0x2712),
Emojicon.fromChar((char) 0x270f),
Emojicon.fromCodePoint(0x1f4cf),
Emojicon.fromCodePoint(0x1f4d0),
Emojicon.fromCodePoint(0x1f4d5),
Emojicon.fromCodePoint(0x1f4d7),
Emojicon.fromCodePoint(0x1f4d8),
Emojicon.fromCodePoint(0x1f4d9),
Emojicon.fromCodePoint(0x1f4d3),
Emojicon.fromCodePoint(0x1f4d4),
Emojicon.fromCodePoint(0x1f4d2),
Emojicon.fromCodePoint(0x1f4da),
Emojicon.fromCodePoint(0x1f4d6),
Emojicon.fromCodePoint(0x1f516),
Emojicon.fromCodePoint(0x1f4db),
Emojicon.fromCodePoint(0x1f52c),
Emojicon.fromCodePoint(0x1f52d),
Emojicon.fromCodePoint(0x1f4f0),
Emojicon.fromCodePoint(0x1f3a8),
Emojicon.fromCodePoint(0x1f3ac),
Emojicon.fromCodePoint(0x1f3a4),
Emojicon.fromCodePoint(0x1f3a7),
Emojicon.fromCodePoint(0x1f3bc),
Emojicon.fromCodePoint(0x1f3b5),
Emojicon.fromCodePoint(0x1f3b6),
Emojicon.fromCodePoint(0x1f3b9),
Emojicon.fromCodePoint(0x1f3bb),
Emojicon.fromCodePoint(0x1f3ba),
Emojicon.fromCodePoint(0x1f3b7),
Emojicon.fromCodePoint(0x1f3b8),
Emojicon.fromCodePoint(0x1f47e),
Emojicon.fromCodePoint(0x1f3ae),
Emojicon.fromCodePoint(0x1f0cf),
Emojicon.fromCodePoint(0x1f3b4),
Emojicon.fromCodePoint(0x1f004),
Emojicon.fromCodePoint(0x1f3b2),
Emojicon.fromCodePoint(0x1f3af),
Emojicon.fromCodePoint(0x1f3c8),
Emojicon.fromCodePoint(0x1f3c0),
Emojicon.fromChar((char) 0x26bd),
Emojicon.fromChar((char) 0x26be),
Emojicon.fromCodePoint(0x1f3be),
Emojicon.fromCodePoint(0x1f3b1),
Emojicon.fromCodePoint(0x1f3c9),
Emojicon.fromCodePoint(0x1f3b3),
Emojicon.fromChar((char) 0x26f3),
Emojicon.fromCodePoint(0x1f6b5),
Emojicon.fromCodePoint(0x1f6b4),
Emojicon.fromCodePoint(0x1f3c1),
Emojicon.fromCodePoint(0x1f3c7),
Emojicon.fromCodePoint(0x1f3c6),
Emojicon.fromCodePoint(0x1f3bf),
Emojicon.fromCodePoint(0x1f3c2),
Emojicon.fromCodePoint(0x1f3ca),
Emojicon.fromCodePoint(0x1f3c4),
Emojicon.fromCodePoint(0x1f3a3),
Emojicon.fromChar((char) 0x2615),
Emojicon.fromCodePoint(0x1f375),
Emojicon.fromCodePoint(0x1f376),
Emojicon.fromCodePoint(0x1f37c),
Emojicon.fromCodePoint(0x1f37a),
Emojicon.fromCodePoint(0x1f37b),
Emojicon.fromCodePoint(0x1f378),
Emojicon.fromCodePoint(0x1f379),
Emojicon.fromCodePoint(0x1f377),
Emojicon.fromCodePoint(0x1f374),
Emojicon.fromCodePoint(0x1f355),
Emojicon.fromCodePoint(0x1f354),
Emojicon.fromCodePoint(0x1f35f),
Emojicon.fromCodePoint(0x1f357),
Emojicon.fromCodePoint(0x1f356),
Emojicon.fromCodePoint(0x1f35d),
Emojicon.fromCodePoint(0x1f35b),
Emojicon.fromCodePoint(0x1f364),
Emojicon.fromCodePoint(0x1f371),
Emojicon.fromCodePoint(0x1f363),
Emojicon.fromCodePoint(0x1f365),
Emojicon.fromCodePoint(0x1f359),
Emojicon.fromCodePoint(0x1f358),
Emojicon.fromCodePoint(0x1f35a),
Emojicon.fromCodePoint(0x1f35c),
Emojicon.fromCodePoint(0x1f372),
Emojicon.fromCodePoint(0x1f362),
Emojicon.fromCodePoint(0x1f361),
Emojicon.fromCodePoint(0x1f373),
Emojicon.fromCodePoint(0x1f35e),
Emojicon.fromCodePoint(0x1f369),
Emojicon.fromCodePoint(0x1f36e),
Emojicon.fromCodePoint(0x1f366),
Emojicon.fromCodePoint(0x1f368),
Emojicon.fromCodePoint(0x1f367),
Emojicon.fromCodePoint(0x1f382),
Emojicon.fromCodePoint(0x1f370),
Emojicon.fromCodePoint(0x1f36a),
Emojicon.fromCodePoint(0x1f36b),
Emojicon.fromCodePoint(0x1f36c),
Emojicon.fromCodePoint(0x1f36d),
Emojicon.fromCodePoint(0x1f36f),
Emojicon.fromCodePoint(0x1f34e),
Emojicon.fromCodePoint(0x1f34f),
Emojicon.fromCodePoint(0x1f34a),
Emojicon.fromCodePoint(0x1f34b),
Emojicon.fromCodePoint(0x1f352),
Emojicon.fromCodePoint(0x1f347),
Emojicon.fromCodePoint(0x1f349),
Emojicon.fromCodePoint(0x1f353),
Emojicon.fromCodePoint(0x1f351),
Emojicon.fromCodePoint(0x1f348),
Emojicon.fromCodePoint(0x1f34c),
Emojicon.fromCodePoint(0x1f350),
Emojicon.fromCodePoint(0x1f34d),
Emojicon.fromCodePoint(0x1f360),
Emojicon.fromCodePoint(0x1f346),
Emojicon.fromCodePoint(0x1f345),
Emojicon.fromCodePoint(0x1f33d),
};
}

View file

@ -0,0 +1,214 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon.emoji;
/**
* @author Hieu Rocker (rockerhieu@gmail.com)
*/
public class People {
public static final Emojicon[] DATA = new Emojicon[]{
Emojicon.fromCodePoint(0x1f604),
Emojicon.fromCodePoint(0x1f603),
Emojicon.fromCodePoint(0x1f600),
Emojicon.fromCodePoint(0x1f60a),
Emojicon.fromChar((char) 0x263a),
Emojicon.fromCodePoint(0x1f609),
Emojicon.fromCodePoint(0x1f60d),
Emojicon.fromCodePoint(0x1f618),
Emojicon.fromCodePoint(0x1f61a),
Emojicon.fromCodePoint(0x1f617),
Emojicon.fromCodePoint(0x1f619),
Emojicon.fromCodePoint(0x1f61c),
Emojicon.fromCodePoint(0x1f61d),
Emojicon.fromCodePoint(0x1f61b),
Emojicon.fromCodePoint(0x1f633),
Emojicon.fromCodePoint(0x1f601),
Emojicon.fromCodePoint(0x1f614),
Emojicon.fromCodePoint(0x1f60c),
Emojicon.fromCodePoint(0x1f612),
Emojicon.fromCodePoint(0x1f61e),
Emojicon.fromCodePoint(0x1f623),
Emojicon.fromCodePoint(0x1f622),
Emojicon.fromCodePoint(0x1f602),
Emojicon.fromCodePoint(0x1f62d),
Emojicon.fromCodePoint(0x1f62a),
Emojicon.fromCodePoint(0x1f625),
Emojicon.fromCodePoint(0x1f630),
Emojicon.fromCodePoint(0x1f605),
Emojicon.fromCodePoint(0x1f613),
Emojicon.fromCodePoint(0x1f629),
Emojicon.fromCodePoint(0x1f62b),
Emojicon.fromCodePoint(0x1f628),
Emojicon.fromCodePoint(0x1f631),
Emojicon.fromCodePoint(0x1f620),
Emojicon.fromCodePoint(0x1f621),
Emojicon.fromCodePoint(0x1f624),
Emojicon.fromCodePoint(0x1f616),
Emojicon.fromCodePoint(0x1f606),
Emojicon.fromCodePoint(0x1f60b),
Emojicon.fromCodePoint(0x1f637),
Emojicon.fromCodePoint(0x1f60e),
Emojicon.fromCodePoint(0x1f634),
Emojicon.fromCodePoint(0x1f635),
Emojicon.fromCodePoint(0x1f632),
Emojicon.fromCodePoint(0x1f61f),
Emojicon.fromCodePoint(0x1f626),
Emojicon.fromCodePoint(0x1f627),
Emojicon.fromCodePoint(0x1f608),
Emojicon.fromCodePoint(0x1f47f),
Emojicon.fromCodePoint(0x1f62e),
Emojicon.fromCodePoint(0x1f62c),
Emojicon.fromCodePoint(0x1f610),
Emojicon.fromCodePoint(0x1f615),
Emojicon.fromCodePoint(0x1f62f),
Emojicon.fromCodePoint(0x1f636),
Emojicon.fromCodePoint(0x1f607),
Emojicon.fromCodePoint(0x1f60f),
Emojicon.fromCodePoint(0x1f611),
Emojicon.fromCodePoint(0x1f472),
Emojicon.fromCodePoint(0x1f473),
Emojicon.fromCodePoint(0x1f46e),
Emojicon.fromCodePoint(0x1f477),
Emojicon.fromCodePoint(0x1f482),
Emojicon.fromCodePoint(0x1f476),
Emojicon.fromCodePoint(0x1f466),
Emojicon.fromCodePoint(0x1f467),
Emojicon.fromCodePoint(0x1f468),
Emojicon.fromCodePoint(0x1f469),
Emojicon.fromCodePoint(0x1f474),
Emojicon.fromCodePoint(0x1f475),
Emojicon.fromCodePoint(0x1f471),
Emojicon.fromCodePoint(0x1f47c),
Emojicon.fromCodePoint(0x1f478),
Emojicon.fromCodePoint(0x1f63a),
Emojicon.fromCodePoint(0x1f638),
Emojicon.fromCodePoint(0x1f63b),
Emojicon.fromCodePoint(0x1f63d),
Emojicon.fromCodePoint(0x1f63c),
Emojicon.fromCodePoint(0x1f640),
Emojicon.fromCodePoint(0x1f63f),
Emojicon.fromCodePoint(0x1f639),
Emojicon.fromCodePoint(0x1f63e),
Emojicon.fromCodePoint(0x1f479),
Emojicon.fromCodePoint(0x1f47a),
Emojicon.fromCodePoint(0x1f648),
Emojicon.fromCodePoint(0x1f649),
Emojicon.fromCodePoint(0x1f64a),
Emojicon.fromCodePoint(0x1f480),
Emojicon.fromCodePoint(0x1f47d),
Emojicon.fromCodePoint(0x1f4a9),
Emojicon.fromCodePoint(0x1f525),
Emojicon.fromChar((char) 0x2728),
Emojicon.fromCodePoint(0x1f31f),
Emojicon.fromCodePoint(0x1f4ab),
Emojicon.fromCodePoint(0x1f4a5),
Emojicon.fromCodePoint(0x1f4a2),
Emojicon.fromCodePoint(0x1f4a6),
Emojicon.fromCodePoint(0x1f4a7),
Emojicon.fromCodePoint(0x1f4a4),
Emojicon.fromCodePoint(0x1f4a8),
Emojicon.fromCodePoint(0x1f442),
Emojicon.fromCodePoint(0x1f440),
Emojicon.fromCodePoint(0x1f443),
Emojicon.fromCodePoint(0x1f445),
Emojicon.fromCodePoint(0x1f444),
Emojicon.fromCodePoint(0x1f44d),
Emojicon.fromCodePoint(0x1f44e),
Emojicon.fromCodePoint(0x1f44c),
Emojicon.fromCodePoint(0x1f44a),
Emojicon.fromChar((char) 0x270a),
Emojicon.fromChar((char) 0x270c),
Emojicon.fromCodePoint(0x1f44b),
Emojicon.fromChar((char) 0x270b),
Emojicon.fromCodePoint(0x1f450),
Emojicon.fromCodePoint(0x1f446),
Emojicon.fromCodePoint(0x1f447),
Emojicon.fromCodePoint(0x1f449),
Emojicon.fromCodePoint(0x1f448),
Emojicon.fromCodePoint(0x1f64c),
Emojicon.fromCodePoint(0x1f64f),
Emojicon.fromChar((char) 0x261d),
Emojicon.fromCodePoint(0x1f44f),
Emojicon.fromCodePoint(0x1f4aa),
Emojicon.fromCodePoint(0x1f6b6),
Emojicon.fromCodePoint(0x1f3c3),
Emojicon.fromCodePoint(0x1f483),
Emojicon.fromCodePoint(0x1f46b),
Emojicon.fromCodePoint(0x1f46a),
Emojicon.fromCodePoint(0x1f46c),
Emojicon.fromCodePoint(0x1f46d),
Emojicon.fromCodePoint(0x1f48f),
Emojicon.fromCodePoint(0x1f491),
Emojicon.fromCodePoint(0x1f46f),
Emojicon.fromCodePoint(0x1f646),
Emojicon.fromCodePoint(0x1f645),
Emojicon.fromCodePoint(0x1f481),
Emojicon.fromCodePoint(0x1f64b),
Emojicon.fromCodePoint(0x1f486),
Emojicon.fromCodePoint(0x1f487),
Emojicon.fromCodePoint(0x1f485),
Emojicon.fromCodePoint(0x1f470),
Emojicon.fromCodePoint(0x1f64e),
Emojicon.fromCodePoint(0x1f64d),
Emojicon.fromCodePoint(0x1f647),
Emojicon.fromCodePoint(0x1f3a9),
Emojicon.fromCodePoint(0x1f451),
Emojicon.fromCodePoint(0x1f452),
Emojicon.fromCodePoint(0x1f45f),
Emojicon.fromCodePoint(0x1f45e),
Emojicon.fromCodePoint(0x1f461),
Emojicon.fromCodePoint(0x1f460),
Emojicon.fromCodePoint(0x1f462),
Emojicon.fromCodePoint(0x1f455),
Emojicon.fromCodePoint(0x1f454),
Emojicon.fromCodePoint(0x1f45a),
Emojicon.fromCodePoint(0x1f457),
Emojicon.fromCodePoint(0x1f3bd),
Emojicon.fromCodePoint(0x1f456),
Emojicon.fromCodePoint(0x1f458),
Emojicon.fromCodePoint(0x1f459),
Emojicon.fromCodePoint(0x1f4bc),
Emojicon.fromCodePoint(0x1f45c),
Emojicon.fromCodePoint(0x1f45d),
Emojicon.fromCodePoint(0x1f45b),
Emojicon.fromCodePoint(0x1f453),
Emojicon.fromCodePoint(0x1f380),
Emojicon.fromCodePoint(0x1f302),
Emojicon.fromCodePoint(0x1f484),
Emojicon.fromCodePoint(0x1f49b),
Emojicon.fromCodePoint(0x1f499),
Emojicon.fromCodePoint(0x1f49c),
Emojicon.fromCodePoint(0x1f49a),
Emojicon.fromChar((char) 0x2764),
Emojicon.fromCodePoint(0x1f494),
Emojicon.fromCodePoint(0x1f497),
Emojicon.fromCodePoint(0x1f493),
Emojicon.fromCodePoint(0x1f495),
Emojicon.fromCodePoint(0x1f496),
Emojicon.fromCodePoint(0x1f49e),
Emojicon.fromCodePoint(0x1f498),
Emojicon.fromCodePoint(0x1f48c),
Emojicon.fromCodePoint(0x1f48b),
Emojicon.fromCodePoint(0x1f48d),
Emojicon.fromCodePoint(0x1f48e),
Emojicon.fromCodePoint(0x1f464),
Emojicon.fromCodePoint(0x1f465),
Emojicon.fromCodePoint(0x1f4ac),
Emojicon.fromCodePoint(0x1f463),
Emojicon.fromCodePoint(0x1f4ad),
};
}

View file

@ -0,0 +1,126 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon.emoji;
/**
* @author Hieu Rocker (rockerhieu@gmail.com)
*/
public class Places {
public static final Emojicon[] DATA = new Emojicon[]{
Emojicon.fromCodePoint(0x1f3e0),
Emojicon.fromCodePoint(0x1f3e1),
Emojicon.fromCodePoint(0x1f3eb),
Emojicon.fromCodePoint(0x1f3e2),
Emojicon.fromCodePoint(0x1f3e3),
Emojicon.fromCodePoint(0x1f3e5),
Emojicon.fromCodePoint(0x1f3e6),
Emojicon.fromCodePoint(0x1f3ea),
Emojicon.fromCodePoint(0x1f3e9),
Emojicon.fromCodePoint(0x1f3e8),
Emojicon.fromCodePoint(0x1f492),
Emojicon.fromChar((char) 0x26ea),
Emojicon.fromCodePoint(0x1f3ec),
Emojicon.fromCodePoint(0x1f3e4),
Emojicon.fromCodePoint(0x1f307),
Emojicon.fromCodePoint(0x1f306),
Emojicon.fromCodePoint(0x1f3ef),
Emojicon.fromCodePoint(0x1f3f0),
Emojicon.fromChar((char) 0x26fa),
Emojicon.fromCodePoint(0x1f3ed),
Emojicon.fromCodePoint(0x1f5fc),
Emojicon.fromCodePoint(0x1f5fe),
Emojicon.fromCodePoint(0x1f5fb),
Emojicon.fromCodePoint(0x1f304),
Emojicon.fromCodePoint(0x1f305),
Emojicon.fromCodePoint(0x1f303),
Emojicon.fromCodePoint(0x1f5fd),
Emojicon.fromCodePoint(0x1f309),
Emojicon.fromCodePoint(0x1f3a0),
Emojicon.fromCodePoint(0x1f3a1),
Emojicon.fromChar((char) 0x26f2),
Emojicon.fromCodePoint(0x1f3a2),
Emojicon.fromCodePoint(0x1f6a2),
Emojicon.fromChar((char) 0x26f5),
Emojicon.fromCodePoint(0x1f6a4),
Emojicon.fromCodePoint(0x1f6a3),
Emojicon.fromChar((char) 0x2693),
Emojicon.fromCodePoint(0x1f680),
Emojicon.fromChar((char) 0x2708),
Emojicon.fromCodePoint(0x1f4ba),
Emojicon.fromCodePoint(0x1f681),
Emojicon.fromCodePoint(0x1f682),
Emojicon.fromCodePoint(0x1f68a),
Emojicon.fromCodePoint(0x1f689),
Emojicon.fromCodePoint(0x1f69e),
Emojicon.fromCodePoint(0x1f686),
Emojicon.fromCodePoint(0x1f684),
Emojicon.fromCodePoint(0x1f685),
Emojicon.fromCodePoint(0x1f688),
Emojicon.fromCodePoint(0x1f687),
Emojicon.fromCodePoint(0x1f69d),
Emojicon.fromCodePoint(0x1f68b),
Emojicon.fromCodePoint(0x1f683),
Emojicon.fromCodePoint(0x1f68e),
Emojicon.fromCodePoint(0x1f68c),
Emojicon.fromCodePoint(0x1f68d),
Emojicon.fromCodePoint(0x1f699),
Emojicon.fromCodePoint(0x1f698),
Emojicon.fromCodePoint(0x1f697),
Emojicon.fromCodePoint(0x1f695),
Emojicon.fromCodePoint(0x1f696),
Emojicon.fromCodePoint(0x1f69b),
Emojicon.fromCodePoint(0x1f69a),
Emojicon.fromCodePoint(0x1f6a8),
Emojicon.fromCodePoint(0x1f693),
Emojicon.fromCodePoint(0x1f694),
Emojicon.fromCodePoint(0x1f692),
Emojicon.fromCodePoint(0x1f691),
Emojicon.fromCodePoint(0x1f690),
Emojicon.fromCodePoint(0x1f6b2),
Emojicon.fromCodePoint(0x1f6a1),
Emojicon.fromCodePoint(0x1f69f),
Emojicon.fromCodePoint(0x1f6a0),
Emojicon.fromCodePoint(0x1f69c),
Emojicon.fromCodePoint(0x1f488),
Emojicon.fromCodePoint(0x1f68f),
Emojicon.fromCodePoint(0x1f3ab),
Emojicon.fromCodePoint(0x1f6a6),
Emojicon.fromCodePoint(0x1f6a5),
Emojicon.fromChar((char) 0x26a0),
Emojicon.fromCodePoint(0x1f6a7),
Emojicon.fromCodePoint(0x1f530),
Emojicon.fromChar((char) 0x26fd),
Emojicon.fromCodePoint(0x1f3ee),
Emojicon.fromCodePoint(0x1f3b0),
Emojicon.fromChar((char) 0x2668),
Emojicon.fromCodePoint(0x1f5ff),
Emojicon.fromCodePoint(0x1f3aa),
Emojicon.fromCodePoint(0x1f3ad),
Emojicon.fromCodePoint(0x1f4cd),
Emojicon.fromCodePoint(0x1f6a9),
Emojicon.fromChars("\ud83c\uddef\ud83c\uddf5"),
Emojicon.fromChars("\ud83c\uddf0\ud83c\uddf7"),
Emojicon.fromChars("\ud83c\udde9\ud83c\uddea"),
Emojicon.fromChars("\ud83c\udde8\ud83c\uddf3"),
Emojicon.fromChars("\ud83c\uddfa\ud83c\uddf8"),
Emojicon.fromChars("\ud83c\uddeb\ud83c\uddf7"),
Emojicon.fromChars("\ud83c\uddea\ud83c\uddf8"),
Emojicon.fromChars("\ud83c\uddee\ud83c\uddf9"),
Emojicon.fromChars("\ud83c\uddf7\ud83c\uddfa"),
Emojicon.fromChars("\ud83c\uddec\ud83c\udde7"),
};
}

View file

@ -0,0 +1,237 @@
/*
* Copyright 2014 Ankush Sachdeva
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package github.ankushsachdeva.emojicon.emoji;
/**
* @author Hieu Rocker (rockerhieu@gmail.com)
*/
public class Symbols {
public static final Emojicon[] DATA = new Emojicon[]{
Emojicon.fromChars("\u0031\u20e3"),
Emojicon.fromChars("\u0032\u20e3"),
Emojicon.fromChars("\u0033\u20e3"),
Emojicon.fromChars("\u0034\u20e3"),
Emojicon.fromChars("\u0035\u20e3"),
Emojicon.fromChars("\u0036\u20e3"),
Emojicon.fromChars("\u0037\u20e3"),
Emojicon.fromChars("\u0038\u20e3"),
Emojicon.fromChars("\u0039\u20e3"),
Emojicon.fromChars("\u0030\u20e3"),
Emojicon.fromCodePoint(0x1f51f),
Emojicon.fromCodePoint(0x1f522),
Emojicon.fromChars("\u0023\u20e3"),
Emojicon.fromCodePoint(0x1f523),
Emojicon.fromChar((char) 0x2b06),
Emojicon.fromChar((char) 0x2b07),
Emojicon.fromChar((char) 0x2b05),
Emojicon.fromChar((char) 0x27a1),
Emojicon.fromCodePoint(0x1f520),
Emojicon.fromCodePoint(0x1f521),
Emojicon.fromCodePoint(0x1f524),
Emojicon.fromChar((char) 0x2197),
Emojicon.fromChar((char) 0x2196),
Emojicon.fromChar((char) 0x2198),
Emojicon.fromChar((char) 0x2199),
Emojicon.fromChar((char) 0x2194),
Emojicon.fromChar((char) 0x2195),
Emojicon.fromCodePoint(0x1f504),
Emojicon.fromChar((char) 0x25c0),
Emojicon.fromChar((char) 0x25b6),
Emojicon.fromCodePoint(0x1f53c),
Emojicon.fromCodePoint(0x1f53d),
Emojicon.fromChar((char) 0x21a9),
Emojicon.fromChar((char) 0x21aa),
Emojicon.fromChar((char) 0x2139),
Emojicon.fromChar((char) 0x23ea),
Emojicon.fromChar((char) 0x23e9),
Emojicon.fromChar((char) 0x23eb),
Emojicon.fromChar((char) 0x23ec),
Emojicon.fromChar((char) 0x2935),
Emojicon.fromChar((char) 0x2934),
Emojicon.fromCodePoint(0x1f197),
Emojicon.fromCodePoint(0x1f500),
Emojicon.fromCodePoint(0x1f501),
Emojicon.fromCodePoint(0x1f502),
Emojicon.fromCodePoint(0x1f195),
Emojicon.fromCodePoint(0x1f199),
Emojicon.fromCodePoint(0x1f192),
Emojicon.fromCodePoint(0x1f193),
Emojicon.fromCodePoint(0x1f196),
Emojicon.fromCodePoint(0x1f4f6),
Emojicon.fromCodePoint(0x1f3a6),
Emojicon.fromCodePoint(0x1f201),
Emojicon.fromCodePoint(0x1f22f),
Emojicon.fromCodePoint(0x1f233),
Emojicon.fromCodePoint(0x1f235),
Emojicon.fromCodePoint(0x1f234),
Emojicon.fromCodePoint(0x1f232),
Emojicon.fromCodePoint(0x1f250),
Emojicon.fromCodePoint(0x1f239),
Emojicon.fromCodePoint(0x1f23a),
Emojicon.fromCodePoint(0x1f236),
Emojicon.fromCodePoint(0x1f21a),
Emojicon.fromCodePoint(0x1f6bb),
Emojicon.fromCodePoint(0x1f6b9),
Emojicon.fromCodePoint(0x1f6ba),
Emojicon.fromCodePoint(0x1f6bc),
Emojicon.fromCodePoint(0x1f6be),
Emojicon.fromCodePoint(0x1f6b0),
Emojicon.fromCodePoint(0x1f6ae),
Emojicon.fromCodePoint(0x1f17f),
Emojicon.fromChar((char) 0x267f),
Emojicon.fromCodePoint(0x1f6ad),
Emojicon.fromCodePoint(0x1f237),
Emojicon.fromCodePoint(0x1f238),
Emojicon.fromCodePoint(0x1f202),
Emojicon.fromChar((char) 0x24c2),
Emojicon.fromCodePoint(0x1f6c2),
Emojicon.fromCodePoint(0x1f6c4),
Emojicon.fromCodePoint(0x1f6c5),
Emojicon.fromCodePoint(0x1f6c3),
Emojicon.fromCodePoint(0x1f251),
Emojicon.fromChar((char) 0x3299),
Emojicon.fromChar((char) 0x3297),
Emojicon.fromCodePoint(0x1f191),
Emojicon.fromCodePoint(0x1f198),
Emojicon.fromCodePoint(0x1f194),
Emojicon.fromCodePoint(0x1f6ab),
Emojicon.fromCodePoint(0x1f51e),
Emojicon.fromCodePoint(0x1f4f5),
Emojicon.fromCodePoint(0x1f6af),
Emojicon.fromCodePoint(0x1f6b1),
Emojicon.fromCodePoint(0x1f6b3),
Emojicon.fromCodePoint(0x1f6b7),
Emojicon.fromCodePoint(0x1f6b8),
Emojicon.fromChar((char) 0x26d4),
Emojicon.fromChar((char) 0x2733),
Emojicon.fromChar((char) 0x2747),
Emojicon.fromChar((char) 0x274e),
Emojicon.fromChar((char) 0x2705),
Emojicon.fromChar((char) 0x2734),
Emojicon.fromCodePoint(0x1f49f),
Emojicon.fromCodePoint(0x1f19a),
Emojicon.fromCodePoint(0x1f4f3),
Emojicon.fromCodePoint(0x1f4f4),
Emojicon.fromCodePoint(0x1f170),
Emojicon.fromCodePoint(0x1f171),
Emojicon.fromCodePoint(0x1f18e),
Emojicon.fromCodePoint(0x1f17e),
Emojicon.fromCodePoint(0x1f4a0),
Emojicon.fromChar((char) 0x27bf),
Emojicon.fromChar((char) 0x267b),
Emojicon.fromChar((char) 0x2648),
Emojicon.fromChar((char) 0x2649),
Emojicon.fromChar((char) 0x264a),
Emojicon.fromChar((char) 0x264b),
Emojicon.fromChar((char) 0x264c),
Emojicon.fromChar((char) 0x264d),
Emojicon.fromChar((char) 0x264e),
Emojicon.fromChar((char) 0x264f),
Emojicon.fromChar((char) 0x2650),
Emojicon.fromChar((char) 0x2651),
Emojicon.fromChar((char) 0x2652),
Emojicon.fromChar((char) 0x2653),
Emojicon.fromChar((char) 0x26ce),
Emojicon.fromCodePoint(0x1f52f),
Emojicon.fromCodePoint(0x1f3e7),
Emojicon.fromCodePoint(0x1f4b9),
Emojicon.fromCodePoint(0x1f4b2),
Emojicon.fromCodePoint(0x1f4b1),
// Emoji.fromChar((char)0x00a9),
// Emoji.fromChar((char)0x00ae),
Emojicon.fromChar((char) 0xe24e),
Emojicon.fromChar((char) 0xe24f),
Emojicon.fromChar((char) 0x2122),
Emojicon.fromChar((char) 0x274c),
Emojicon.fromChar((char) 0x203c),
Emojicon.fromChar((char) 0x2049),
Emojicon.fromChar((char) 0x2757),
Emojicon.fromChar((char) 0x2753),
Emojicon.fromChar((char) 0x2755),
Emojicon.fromChar((char) 0x2754),
Emojicon.fromChar((char) 0x2b55),
Emojicon.fromCodePoint(0x1f51d),
Emojicon.fromCodePoint(0x1f51a),
Emojicon.fromCodePoint(0x1f519),
Emojicon.fromCodePoint(0x1f51b),
Emojicon.fromCodePoint(0x1f51c),
Emojicon.fromCodePoint(0x1f503),
Emojicon.fromCodePoint(0x1f55b),
Emojicon.fromCodePoint(0x1f567),
Emojicon.fromCodePoint(0x1f550),
Emojicon.fromCodePoint(0x1f55c),
Emojicon.fromCodePoint(0x1f551),
Emojicon.fromCodePoint(0x1f55d),
Emojicon.fromCodePoint(0x1f552),
Emojicon.fromCodePoint(0x1f55e),
Emojicon.fromCodePoint(0x1f553),
Emojicon.fromCodePoint(0x1f55f),
Emojicon.fromCodePoint(0x1f554),
Emojicon.fromCodePoint(0x1f560),
Emojicon.fromCodePoint(0x1f555),
Emojicon.fromCodePoint(0x1f556),
Emojicon.fromCodePoint(0x1f557),
Emojicon.fromCodePoint(0x1f558),
Emojicon.fromCodePoint(0x1f559),
Emojicon.fromCodePoint(0x1f55a),
Emojicon.fromCodePoint(0x1f561),
Emojicon.fromCodePoint(0x1f562),
Emojicon.fromCodePoint(0x1f563),
Emojicon.fromCodePoint(0x1f564),
Emojicon.fromCodePoint(0x1f565),
Emojicon.fromCodePoint(0x1f566),
Emojicon.fromChar((char) 0x2716),
Emojicon.fromChar((char) 0x2795),
Emojicon.fromChar((char) 0x2796),
Emojicon.fromChar((char) 0x2797),
Emojicon.fromChar((char) 0x2660),
Emojicon.fromChar((char) 0x2665),
Emojicon.fromChar((char) 0x2663),
Emojicon.fromChar((char) 0x2666),
Emojicon.fromCodePoint(0x1f4ae),
Emojicon.fromCodePoint(0x1f4af),
Emojicon.fromChar((char) 0x2714),
Emojicon.fromChar((char) 0x2611),
Emojicon.fromCodePoint(0x1f518),
Emojicon.fromCodePoint(0x1f517),
Emojicon.fromChar((char) 0x27b0),
Emojicon.fromChar((char) 0x3030),
Emojicon.fromChar((char) 0x303d),
Emojicon.fromCodePoint(0x1f531),
Emojicon.fromChar((char) 0x25fc),
Emojicon.fromChar((char) 0x25fb),
Emojicon.fromChar((char) 0x25fe),
Emojicon.fromChar((char) 0x25fd),
Emojicon.fromChar((char) 0x25aa),
Emojicon.fromChar((char) 0x25ab),
Emojicon.fromCodePoint(0x1f53a),
Emojicon.fromCodePoint(0x1f532),
Emojicon.fromCodePoint(0x1f533),
Emojicon.fromChar((char) 0x26ab),
Emojicon.fromChar((char) 0x26aa),
Emojicon.fromCodePoint(0x1f534),
Emojicon.fromCodePoint(0x1f535),
Emojicon.fromCodePoint(0x1f53b),
Emojicon.fromChar((char) 0x2b1c),
Emojicon.fromChar((char) 0x2b1b),
Emojicon.fromCodePoint(0x1f536),
Emojicon.fromCodePoint(0x1f537),
Emojicon.fromCodePoint(0x1f538),
Emojicon.fromCodePoint(0x1f539),
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Some files were not shown because too many files have changed in this diff Show more