Compare commits
51 commits
master
...
trz/emojic
Author | SHA1 | Date | |
---|---|---|---|
4bb806585f | |||
0ee1992da2 | |||
473f035355 | |||
|
b085643555 | ||
8fd688ca96 | |||
|
553f41a2db | ||
|
a73ce32e27 | ||
b3b4a2902e | |||
549810783c | |||
8932dd9fb3 | |||
516c343e8a | |||
12486e9a29 | |||
ae8a2467aa | |||
573bfed961 | |||
3ef609cfbd | |||
03bc7dcdc9 | |||
7405d50c70 | |||
56e695cf1b | |||
98c09f18a2 | |||
d64aa6407c | |||
cae106e310 | |||
972c65b775 | |||
fd5f36b864 | |||
|
deac0df707 | ||
|
17779e7700 | ||
82bfd8ac33 | |||
ae520c2957 | |||
94a669fcb8 | |||
3a814addab | |||
c829f612cd | |||
df63c14617 | |||
87e56b534a | |||
|
e17b75511e | ||
|
6220260df3 | ||
|
52ed924a13 | ||
|
75c5275f7e | ||
|
c8fe93cf0a | ||
|
20eae39557 | ||
|
980a84a6ce | ||
c67ed416a1 | |||
0f169e8dbe | |||
77c19f81dc | |||
aed8c64e54 | |||
|
46bbf1ce5f | ||
|
e8ca2a1ae3 | ||
|
5a860416b5 | ||
71bb1e90b0 | |||
|
0464a6a3fa | ||
95e2a53951 | |||
48717dd7d3 | |||
6e3e58e3c8 |
|
@ -3,7 +3,8 @@ android:
|
|||
components:
|
||||
- platform-tools
|
||||
- tools
|
||||
- build-tools-22.0.1
|
||||
- build-tools-21.1.2
|
||||
- build-tools-19.1.0
|
||||
- android-21
|
||||
- android-22
|
||||
- extra-android-m2repository
|
||||
|
|
1400
0001-Added-possibility-to-also-use-pictures-as-smilies.patch
Normal file
29
CHANGELOG.md
|
@ -1,5 +1,34 @@
|
|||
###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
|
||||
* Send current location. (requires [plugin](https://play.google.com/store/apps/details?id=eu.siacs.conversations.sharelocation))
|
||||
* Invite multiple contacts at once
|
||||
|
|
10
ManualBuildForFdroid.md
Normal 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
|
27
README.md
|
@ -2,7 +2,7 @@
|
|||
|
||||
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)
|
||||
|
||||
|
@ -17,7 +17,8 @@ Conversations: the very last word in instant messaging
|
|||
## Features
|
||||
|
||||
* 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
|
||||
* Intuitive UI that follows Android Design guidelines
|
||||
* 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
|
||||
files if both parties are behind a firewall (NAT).
|
||||
* 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
|
||||
changes of the underlying TCP connection.
|
||||
* 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
|
||||
Conversations is in the background. Allows the server to save bandwidth by
|
||||
withholding unimportant packages.
|
||||
* XEP-0191: Blocking command lets you blacklist spammers or block contacts
|
||||
without removing them from your roster.
|
||||
* XEP-xxxx: HttpUpload allows you to share files in conferences and with offline
|
||||
contacts. Requires an [additional component](https://github.com/siacs/HttpUploadComponent)
|
||||
on your server.
|
||||
|
||||
## Team
|
||||
|
||||
|
@ -66,12 +70,13 @@ run your own XMPP server for you and your friends. These XEP's are:
|
|||
|
||||
(In order of appearance)
|
||||
|
||||
* [Rene Treffer](https://github.com/rtreffer)
|
||||
* [Andreas Straub](https://github.com/strb)
|
||||
* [Alethea Butler](https://github.com/alethea)
|
||||
* [M. Dietrich](https://github.com/emdete)
|
||||
* [betheg](https://github.com/betheg)
|
||||
* [Sam Whited](https://github.com/SamWhited)
|
||||
* [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) ([PRs](https://github.com/siacs/Conversations/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Astrb+is%3Amerged))
|
||||
* [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) ([PRs](https://github.com/siacs/Conversations/pulls?utf8=%E2%9C%93&q=is%3Apr+author%3Aemdete+is%3Amerged))
|
||||
* [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) ([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
|
||||
* [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.
|
||||
|
||||
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.
|
||||
|
||||
#### How does the encryption for conferences work?
|
||||
|
|
10
TODO
Normal 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
|
|
@ -13,7 +13,7 @@
|
|||
width="95"
|
||||
height="95"
|
||||
id="Yes_check"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="ic_received_indicator.svg">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
|
@ -23,7 +23,7 @@
|
|||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
|
@ -36,17 +36,17 @@
|
|||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1233"
|
||||
inkscape:window-height="828"
|
||||
inkscape:window-width="956"
|
||||
inkscape:window-height="1156"
|
||||
id="namedview8"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:zoom="5.04"
|
||||
inkscape:cx="26.829268"
|
||||
inkscape:cx="-4.3215257"
|
||||
inkscape:cy="37.489149"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="2880"
|
||||
inkscape:window-y="20"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="Yes_check"
|
||||
fit-margin-top="0"
|
||||
|
@ -69,7 +69,7 @@
|
|||
</defs>
|
||||
<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"
|
||||
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"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccscsccc" />
|
||||
|
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
54
art/ic_send_cancel_away.svg
Normal 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 |
54
art/ic_send_cancel_dnd.svg
Normal 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 |
54
art/ic_send_cancel_offline.svg
Normal 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 |
54
art/ic_send_cancel_online.svg
Normal 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 |
54
art/ic_send_location_away.svg
Normal 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 |
54
art/ic_send_location_dnd.svg
Normal 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 |
54
art/ic_send_location_offline.svg
Normal 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 |
54
art/ic_send_location_online.svg
Normal 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 |
60
art/ic_send_photo_away.svg
Normal 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
|
@ -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 |
60
art/ic_send_photo_offline.svg
Normal 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 |
60
art/ic_send_photo_online.svg
Normal 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 |
55
art/ic_send_picture_away.svg
Normal 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 |
55
art/ic_send_picture_dnd.svg
Normal 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 |
55
art/ic_send_picture_offline.svg
Normal 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 |
55
art/ic_send_picture_online.svg
Normal 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
|
@ -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
|
@ -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 |
69
art/ic_send_text_offline.svg
Normal 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 |
|
@ -11,7 +11,7 @@
|
|||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg3621"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.4 r9939"
|
||||
inkscape:version="0.91 r13725"
|
||||
width="96"
|
||||
height="96"
|
||||
sodipodi:docname="ic_action_send_now.svg"
|
||||
|
@ -26,7 +26,7 @@
|
|||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
|
@ -41,16 +41,16 @@
|
|||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1916"
|
||||
inkscape:window-height="1161"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1200"
|
||||
id="namedview3623"
|
||||
showgrid="true"
|
||||
showguides="true"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="47.28873"
|
||||
inkscape:cy="43.262706"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="18"
|
||||
inkscape:zoom="8"
|
||||
inkscape:cx="69.783303"
|
||||
inkscape:cy="56.761328"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg3621">
|
||||
<inkscape:grid
|
||||
|
@ -58,8 +58,8 @@
|
|||
id="grid3631" />
|
||||
</sodipodi:namedview>
|
||||
<path
|
||||
style="fill:#e51c28;fill-opacity:0.627451;stroke:none"
|
||||
d="M 20.012575,21.028577 76,49 20.012575,77.028577 26,52 58.012575,49.028577 26,46 z"
|
||||
style="fill:#259b24;fill-opacity:0.62745098;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"
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
54
art/ic_send_voice_away.svg
Normal 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
|
@ -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 |
54
art/ic_send_voice_offline.svg
Normal 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 |
54
art/ic_send_voice_online.svg
Normal 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 |
|
@ -10,6 +10,30 @@ images = {
|
|||
'conversations_baloon.svg' => ['ic_launcher', 48],
|
||||
'conversations_mono.svg' => ['ic_notification', 24],
|
||||
'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|
|
||||
resolutions.each do |name, factor|
|
||||
|
|
34
build.gradle
|
@ -6,7 +6,7 @@ buildscript {
|
|||
mavenCentral()
|
||||
}
|
||||
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 {
|
||||
compile project(':libs:openpgp-api-lib')
|
||||
compile project(':libs:MemorizingTrustManager')
|
||||
compile 'com.android.support:support-v13:21.0.3'
|
||||
compile 'org.bouncycastle:bcprov-jdk15on:1.51'
|
||||
compile 'org.jitsi:org.otr4j:0.22'
|
||||
compile 'org.gnu.inet:libidn:1.15'
|
||||
compile 'com.google.zxing:core:3.1.0'
|
||||
compile 'com.google.zxing:android-integration:3.1.0'
|
||||
compile 'de.measite.minidns:minidns:0.1.3'
|
||||
compile project(':libs:openpgp-api-lib')
|
||||
compile project(':libs:MemorizingTrustManager')
|
||||
compile 'com.android.support:support-v13:21.0.3'
|
||||
compile 'org.bouncycastle:bcprov-jdk15on:1.51'
|
||||
compile 'org.jitsi:org.otr4j:0.22'
|
||||
compile 'org.gnu.inet:libidn:1.15'
|
||||
compile 'com.google.zxing:core:3.1.0'
|
||||
compile 'com.google.zxing:android-integration:3.1.0'
|
||||
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 {
|
||||
compileSdkVersion 21
|
||||
buildToolsVersion "21.1.2"
|
||||
compileSdkVersion 22
|
||||
buildToolsVersion "22.0.1"
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 21
|
||||
versionCode 56
|
||||
versionName "1.2.0"
|
||||
versionCode 64
|
||||
versionName "1.5.2.1"
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
|
@ -91,7 +95,7 @@ android {
|
|||
}
|
||||
|
||||
lintOptions {
|
||||
disable 'ExtraTranslation', 'MissingTranslation', 'InvalidPackage'
|
||||
disable 'ExtraTranslation', 'MissingTranslation', 'InvalidPackage', 'MissingQuantity'
|
||||
}
|
||||
|
||||
subprojects {
|
||||
|
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
|
|||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
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
|
||||
|
|
|
@ -3,7 +3,7 @@ buildscript {
|
|||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:0.7.+'
|
||||
classpath 'com.android.tools.build:gradle:1.2.3'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
BIN
libs/bcprov-jdk15on-1.50.jar
Normal file
1
libs/colorpicker/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/build
|
18
libs/colorpicker/build.gradle
Normal 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
|
@ -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 *;
|
||||
#}
|
2
libs/colorpicker/src/main/AndroidManifest.xml
Normal file
|
@ -0,0 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest package="yuku.ambilwarna" />
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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];
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 666 B |
After Width: | Height: | Size: 983 B |
After Width: | Height: | Size: 748 B |
After Width: | Height: | Size: 751 B |
After Width: | Height: | Size: 480 B |
After Width: | Height: | Size: 607 B |
After Width: | Height: | Size: 135 B |
After Width: | Height: | Size: 889 B |
After Width: | Height: | Size: 814 B |
After Width: | Height: | Size: 579 B |
BIN
libs/colorpicker/src/main/res/drawable-mdpi/ambilwarna_hue.png
Normal file
After Width: | Height: | Size: 455 B |
After Width: | Height: | Size: 816 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 782 B |
After Width: | Height: | Size: 1.5 KiB |
|
@ -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>
|
127
libs/colorpicker/src/main/res/layout-land/ambilwarna_dialog.xml
Normal 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>
|
122
libs/colorpicker/src/main/res/layout/ambilwarna_dialog.xml
Normal 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>
|
|
@ -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>
|
5
libs/colorpicker/src/main/res/values-land/dimen.xml
Normal 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>
|
|
@ -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>
|
7
libs/colorpicker/src/main/res/values/attrs.xml
Normal 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>
|
7
libs/colorpicker/src/main/res/values/dimen.xml
Normal 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>
|
27
libs/emojicon/build.gradle
Normal 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
|
@ -0,0 +1,3 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<lint>
|
||||
</lint>
|
12
libs/emojicon/src/main/AndroidManifest.xml
Normal 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>
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package github.ankushsachdeva.emojicon;
|
||||
|
||||
/**
|
||||
* Created by aleksandr.naumov on 14.05.2015.
|
||||
*/
|
||||
interface Updatable {
|
||||
void update();
|
||||
}
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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),
|
||||
};
|
||||
}
|
|
@ -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),
|
||||
};
|
||||
}
|
|
@ -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),
|
||||
};
|
||||
}
|
|
@ -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"),
|
||||
};
|
||||
}
|
|
@ -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),
|
||||
};
|
||||
}
|
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.8 KiB |