Skip to content

Commit ab0db10

Browse files
committed
Merge branch 'master' into remove-domain
Conflicts: linkable-text/src/main/java/com/github/fobid/linkabletext/widget/LinkableTextView.java sample/src/main/java/com/github/fobid/linkabletext/sample/ui/activity/ListViewActivity.java sample/src/main/java/com/github/fobid/linkabletext/sample/ui/activity/MainActivity.java sample/src/main/java/com/github/fobid/linkabletext/sample/ui/activity/RecyclerViewActivity.java
2 parents a6c6131 + 8d0b999 commit ab0db10

File tree

12 files changed

+158
-116
lines changed

12 files changed

+158
-116
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## 0.1.1
2+
- Added `setEnabledLinks()`, `setEnabledHashtag`, `setEnabledMention`, `setEnabledEmailAddress`, `setEnabledPhone`, `setEnabledWebUrl`, `setEnabledDomainName`, `setEnabledIpAddress` to `LinkableTextView`.
3+
14
## 0.1.0
25
- This is first public version.
36
- `LinkableTextView` supports clickable @mentions, #hashtags, links, emails, phones and ....

README.md

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# Linkable Text Library
2+
[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-linkable--text-green.svg?style=flat)](http://android-arsenal.com/details/1/4674)
3+
4+
[![Join the chat at https://gitter.im/fobid/linkable-text/Lobby](https://badges.gitter.im/fobid/linkable-text/Lobby.svg)](https://gitter.im/fobid/linkable-text?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
25

36
[![Github Release][release-image]][release-url]
47

@@ -7,20 +10,29 @@ You can download Linkable Text Sample application on Google Play.
710
[![Get it on Google Play](http://www.android.com/images/brand/get_it_on_play_logo_small.png)](https://play.google.com/store/apps/details?id=com.github.fobid.linkabletext.sample)
811

912
# Download
10-
Download [the latest JAR](https://repo1.maven.org/maven2/com/github/fobid/linkabletext/0.1.0/linkabletext-0.1.0.aar) or grab via Maven:
13+
Download [the latest JAR](https://repo1.maven.org/maven2/com/github/fobid/linkabletext/0.1.1/linkabletext-0.1.1.aar) or grab via Maven:
1114
```
1215
<dependency>
1316
<groupId>com.github.fobid</groupId>
1417
<artifactId>linkable-text</artifactId>
15-
<version>0.1.0</version>
18+
<version>0.1.1</version>
1619
</dependency>
1720
```
1821
or Gradle:
1922
```
20-
compile 'com.github.fobid:linkable-text:0.1.0'
23+
compile 'com.github.fobid:linkable-text:0.1.1'
2124
```
2225

2326
# Usage
27+
```
28+
<com.github.fobid.linkabletext.widget.LinkableTextView
29+
android:layout_width="wrap_content"
30+
android:layout_height="wrap_content" />
31+
```
32+
If you don't want to set link, then add `app:enabledLinks="false"` in your xml.
33+
Or, `LinkableTextView.setEnabledLinks(false)` in your code.
34+
35+
You must call `LinkableTextView.setOnLinkClickListener()` after `setText()` to set links clickable.
2436

2537
# License
2638
```
@@ -39,5 +51,5 @@ See the License for the specific language governing permissions and
3951
limitations under the License.
4052
```
4153

42-
[release-image]: https://img.shields.io/badge/release-v0.1.0-lightgrey.svg
43-
[release-url]: https://github.com/fobid/linkable-text-android/releases/tag/v0.1.0
54+
[release-image]: https://img.shields.io/badge/release-v0.1.1-lightgrey.svg
55+
[release-url]: https://github.com/fobid/linkable-text-android/releases/tag/v0.1.1

linkable-text/build.gradle

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apply plugin: 'com.jfrog.bintray'
33
apply plugin: 'com.github.dcendents.android-maven'
44
apply plugin: 'signing'
55

6-
version = '0.1.0'
6+
version = '0.1.1'
77

88
def siteUrl = 'https://github.com/fobid/linkable-text-android' // Homepage URL of the library
99
def gitUrl = 'https://github.com/fobid/linkable-text-android.git' // Git repository URL
@@ -16,7 +16,7 @@ android {
1616
defaultConfig {
1717
minSdkVersion 9
1818
targetSdkVersion 24
19-
versionCode 1
19+
versionCode 2
2020
versionName version
2121

2222
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
@@ -110,12 +110,12 @@ bintray {
110110
sign = true //Determines whether to GPG sign the files. The default is false
111111
passphrase = properties.getProperty("bintray.gpg.password") //Optional. The passphrase for GPG signing'
112112
}
113-
// mavenCentralSync {
114-
// sync = true //Optional (true by default). Determines whether to sync the version to Maven Central.
115-
// user = properties.getProperty("bintray.oss.user") //OSS user token
116-
// password = properties.getProperty("bintray.oss.password") //OSS user password
117-
// close = '1' //Optional property. By default the staging repository is closed and artifacts are released to Maven Central. You can optionally turn this behaviour off (by puting 0 as value) and release the version manually.
118-
// }
113+
mavenCentralSync {
114+
sync = true //Optional (true by default). Determines whether to sync the version to Maven Central.
115+
user = properties.getProperty("bintray.oss.user") //OSS user token
116+
password = properties.getProperty("bintray.oss.password") //OSS user password
117+
close = '1' //Optional property. By default the staging repository is closed and artifacts are released to Maven Central. You can optionally turn this behaviour off (by puting 0 as value) and release the version manually.
118+
}
119119
}
120120
}
121121
}

linkable-text/src/main/java/com/github/fobid/linkabletext/util/LinkableMovementMethod.java renamed to linkable-text/src/main/java/com/github/fobid/linkabletext/text/method/LinkableMovementMethod.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.github.fobid.linkabletext.util;
1+
package com.github.fobid.linkabletext.text.method;
22

33
import android.text.Layout;
44
import android.text.Selection;
@@ -8,6 +8,7 @@
88
import android.view.MotionEvent;
99

1010
import com.github.fobid.linkabletext.annotation.LinkType;
11+
import com.github.fobid.linkabletext.view.LinkableCallback;
1112
import com.github.fobid.linkabletext.widget.LinkableTextView;
1213

1314
/**
@@ -16,10 +17,10 @@
1617

1718
public class LinkableMovementMethod extends LinkMovementMethod {
1819

19-
private static final String SOCIAL_UI_BASE_SCHEME = "http://blog.fobid.me";
20-
public static final String SOCIAL_UI_HASHTAG_SCHEME = SOCIAL_UI_BASE_SCHEME + "/hashtag";
21-
public static final String SOCIAL_UI_MENTION_SCHEME = SOCIAL_UI_BASE_SCHEME + "/mention";
22-
public static final String SOCIAL_UI_IP_ADDRESS_SCHEME = SOCIAL_UI_BASE_SCHEME + "/ip";
20+
private static final String LINKABLE_BASE_SCHEME = "https://github.com/fobid/linkable-text-android";
21+
public static final String LINKABLE_HASHTAG_SCHEME = LINKABLE_BASE_SCHEME + "/hashtag";
22+
public static final String LINKABLE_MENTION_SCHEME = LINKABLE_BASE_SCHEME + "/mention";
23+
public static final String LINKABLE_IP_ADDRESS_SCHEME = LINKABLE_BASE_SCHEME + "/ip";
2324

2425
private final LinkableCallback mLinkableCallback;
2526

@@ -67,16 +68,16 @@ public boolean onTouchEvent(android.widget.TextView widget, android.text.Spannab
6768
}
6869

6970
private void handleLink(String link) {
70-
if (link.startsWith(SOCIAL_UI_HASHTAG_SCHEME)) {
71-
String hashtag = link.replaceFirst(SOCIAL_UI_HASHTAG_SCHEME, "");
71+
if (link.startsWith(LINKABLE_HASHTAG_SCHEME)) {
72+
String hashtag = link.replaceFirst(LINKABLE_HASHTAG_SCHEME, "");
7273
hashtag = hashtag.replaceFirst(".*#", "");
7374
mLinkableCallback.onMatch(LinkableTextView.Link.HASH_TAG, hashtag);
74-
} else if (link.startsWith(SOCIAL_UI_MENTION_SCHEME)) {
75-
String mention = link.replaceFirst(SOCIAL_UI_MENTION_SCHEME, "");
75+
} else if (link.startsWith(LINKABLE_MENTION_SCHEME)) {
76+
String mention = link.replaceFirst(LINKABLE_MENTION_SCHEME, "");
7677
mention = mention.replaceFirst(".*@", "");
7778
mLinkableCallback.onMatch(LinkableTextView.Link.MENTION, mention);
78-
} else if (link.startsWith(SOCIAL_UI_IP_ADDRESS_SCHEME)) {
79-
String ip = link.replaceFirst(SOCIAL_UI_IP_ADDRESS_SCHEME, "");
79+
} else if (link.startsWith(LINKABLE_IP_ADDRESS_SCHEME)) {
80+
String ip = link.replaceFirst(LINKABLE_IP_ADDRESS_SCHEME, "");
8081
ip = ip.replaceFirst(".", "");
8182
mLinkableCallback.onMatch(LinkableTextView.Link.IP_ADDRESS, ip);
8283
} else if (Patterns.EMAIL_ADDRESS.matcher(link).matches()) {

linkable-text/src/main/java/com/github/fobid/linkabletext/util/LinkableCallback.java renamed to linkable-text/src/main/java/com/github/fobid/linkabletext/view/LinkableCallback.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.github.fobid.linkabletext.util;
1+
package com.github.fobid.linkabletext.view;
22

33
import com.github.fobid.linkabletext.annotation.LinkType;
44

linkable-text/src/main/java/com/github/fobid/linkabletext/util/OnLinkableClickListener.java renamed to linkable-text/src/main/java/com/github/fobid/linkabletext/view/OnLinkClickListener.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package com.github.fobid.linkabletext.util;
1+
package com.github.fobid.linkabletext.view;
22

33
/**
44
* Created by partner on 2016-11-17.
55
*/
66

7-
public interface OnLinkableClickListener {
7+
public interface OnLinkClickListener {
88
void onHashtagClick(String hashtag);
99

1010
void onMentionClick(String mention);

linkable-text/src/main/java/com/github/fobid/linkabletext/widget/LinkableTextView.java

Lines changed: 75 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.content.Context;
55
import android.content.res.TypedArray;
66
import android.os.Build;
7+
import android.support.annotation.Nullable;
78
import android.text.TextUtils;
89
import android.text.method.MovementMethod;
910
import android.text.util.Linkify;
@@ -13,9 +14,9 @@
1314

1415
import com.github.fobid.linkabletext.R;
1516
import com.github.fobid.linkabletext.annotation.LinkType;
16-
import com.github.fobid.linkabletext.util.LinkableCallback;
17-
import com.github.fobid.linkabletext.util.LinkableMovementMethod;
18-
import com.github.fobid.linkabletext.util.OnLinkableClickListener;
17+
import com.github.fobid.linkabletext.text.method.LinkableMovementMethod;
18+
import com.github.fobid.linkabletext.view.LinkableCallback;
19+
import com.github.fobid.linkabletext.view.OnLinkClickListener;
1920

2021
import java.util.regex.Matcher;
2122
import java.util.regex.Pattern;
@@ -39,6 +40,7 @@ public interface Link {
3940
private static Pattern MENTION_PATTERN;
4041
private static Pattern HASHTAG_PATTERN;
4142

43+
private boolean enabledLinks = true;
4244
private boolean enabledHashtag = true;
4345
private boolean enabledMention = true;
4446
private boolean enabledEmailAddress = true;
@@ -84,6 +86,8 @@ private void initView(Context context, AttributeSet attrs) {
8486
mentionPattern = a.getString(attr);
8587
else if (attr == R.styleable.LinkableTextView_pattern_hashtag)
8688
hashtagPattern = a.getString(attr);
89+
else if (attr == R.styleable.LinkableTextView_enabledLinks)
90+
enabledLinks = a.getBoolean(attr, true);
8791
else if (attr == R.styleable.LinkableTextView_enabledHashtag)
8892
enabledHashtag = a.getBoolean(attr, true);
8993
else if (attr == R.styleable.LinkableTextView_enabledMention)
@@ -99,6 +103,7 @@ else if (attr == R.styleable.LinkableTextView_enabledIp_address)
99103
}
100104
setMentionPattern(mentionPattern);
101105
setHashtagPattern(hashtagPattern);
106+
setEnabledLinks(enabledLinks);
102107
setEnabledHashtag(enabledHashtag);
103108
setEnabledMention(enabledMention);
104109
setEnabledEmailAddress(enabledEmailAddress);
@@ -109,7 +114,7 @@ else if (attr == R.styleable.LinkableTextView_enabledIp_address)
109114
a.recycle();
110115
}
111116

112-
public void setMentionPattern(String mentionPattern) {
117+
public void setMentionPattern(@Nullable String mentionPattern) {
113118
if (!TextUtils.isEmpty(mentionPattern)) {
114119
MENTION_PATTERN = Pattern.compile(mentionPattern);
115120
} else {
@@ -121,7 +126,11 @@ public Pattern getMentionPattern() {
121126
return MENTION_PATTERN;
122127
}
123128

124-
public void setHashtagPattern(String hashTagPattern) {
129+
public void setDefaultMentionPattern() {
130+
setMentionPattern(null);
131+
}
132+
133+
public void setHashtagPattern(@Nullable String hashTagPattern) {
125134
if (!TextUtils.isEmpty(hashTagPattern)) {
126135
HASHTAG_PATTERN = Pattern.compile(hashTagPattern);
127136
} else {
@@ -133,12 +142,16 @@ public Pattern getHashtagPattern() {
133142
return HASHTAG_PATTERN;
134143
}
135144

136-
public boolean isEnabledEmailAddress() {
137-
return enabledEmailAddress;
145+
public void setDefaultHashtagPattern() {
146+
setHashtagPattern(null);
138147
}
139148

140-
public void setEnabledEmailAddress(boolean enabledEmailAddress) {
141-
this.enabledEmailAddress = enabledEmailAddress;
149+
public boolean isEnabledLinks() {
150+
return enabledLinks;
151+
}
152+
153+
public void setEnabledLinks(boolean enabledLinks) {
154+
this.enabledLinks = enabledLinks;
142155
}
143156

144157
public boolean isEnabledHashtag() {
@@ -149,14 +162,6 @@ public void setEnabledHashtag(boolean enabledHashtag) {
149162
this.enabledHashtag = enabledHashtag;
150163
}
151164

152-
public boolean isEnabledIpAddress() {
153-
return enabledIpAddress;
154-
}
155-
156-
public void setEnabledIpAddress(boolean enabledIpAddress) {
157-
this.enabledIpAddress = enabledIpAddress;
158-
}
159-
160165
public boolean isEnabledMention() {
161166
return enabledMention;
162167
}
@@ -165,6 +170,14 @@ public void setEnabledMention(boolean enabledMention) {
165170
this.enabledMention = enabledMention;
166171
}
167172

173+
public boolean isEnabledEmailAddress() {
174+
return enabledEmailAddress;
175+
}
176+
177+
public void setEnabledEmailAddress(boolean enabledEmailAddress) {
178+
this.enabledEmailAddress = enabledEmailAddress;
179+
}
180+
168181
public boolean isEnabledPhone() {
169182
return enabledPhone;
170183
}
@@ -181,68 +194,83 @@ public void setEnabledWebUrl(boolean enabledWebUrl) {
181194
this.enabledWebUrl = enabledWebUrl;
182195
}
183196

184-
public void addLinks(final OnLinkableClickListener actionHandler) {
185-
addLinks(new LinkableCallback() {
197+
public boolean isEnabledIpAddress() {
198+
return enabledIpAddress;
199+
}
200+
201+
public void setEnabledIpAddress(boolean enabledIpAddress) {
202+
this.enabledIpAddress = enabledIpAddress;
203+
}
204+
205+
206+
public void setOnLinkClickListener(@Nullable final OnLinkClickListener listener) {
207+
setOnLinkClickListener(new LinkableCallback() {
186208
@Override
187209
public void onMatch(@LinkType int type, String value) {
210+
if (listener == null || !enabledLinks)
211+
return;
212+
188213
switch (type) {
189-
case Link.HASH_TAG: {
214+
case Link.HASH_TAG:
190215
if (enabledHashtag)
191-
actionHandler.onHashtagClick(value);
216+
listener.onHashtagClick(value);
192217
break;
193-
}
194-
case Link.MENTION: {
218+
219+
case Link.MENTION:
195220
if (enabledMention)
196-
actionHandler.onMentionClick(value);
221+
listener.onMentionClick(value);
197222
break;
198-
}
199-
case Link.EMAIL_ADDRESS: {
223+
224+
case Link.EMAIL_ADDRESS:
200225
if (enabledEmailAddress)
201-
actionHandler.onEmailAddressClick(value);
226+
listener.onEmailAddressClick(value);
202227
break;
203-
}
204228
case Link.IP_ADDRESS:
205229
if (!enabledIpAddress)
206230
break;
207-
case Link.WEB_URL: {
231+
case Link.WEB_URL:
208232
if (enabledWebUrl)
209-
actionHandler.onWebUrlClick(value);
233+
listener.onWebUrlClick(value);
210234
break;
211-
}
212-
case Link.PHONE: {
235+
236+
case Link.PHONE:
213237
if (enabledPhone)
214-
actionHandler.onPhoneClick(value);
238+
listener.onPhoneClick(value);
215239
break;
216-
}
217240
}
218241
}
219242
});
220243
}
221244

222-
public void addLinks(LinkableCallback callback) {
245+
public void setOnLinkClickListener(@Nullable final LinkableCallback callback) {
223246
Linkify.TransformFilter filter = new Linkify.TransformFilter() {
224247
public final String transformUrl(final Matcher match, String url) {
225248
return match.group();
226249
}
227250
};
228251

229-
if (enabledHashtag)
230-
Linkify.addLinks(this, HASHTAG_PATTERN, LinkableMovementMethod.SOCIAL_UI_HASHTAG_SCHEME, null, filter);
252+
if (enabledLinks) {
253+
if (enabledHashtag)
254+
Linkify.addLinks(this, HASHTAG_PATTERN,
255+
LinkableMovementMethod.LINKABLE_HASHTAG_SCHEME, null, filter);
231256

232-
if (enabledMention)
233-
Linkify.addLinks(this, MENTION_PATTERN, LinkableMovementMethod.SOCIAL_UI_MENTION_SCHEME, null, filter);
257+
if (enabledMention)
258+
Linkify.addLinks(this, MENTION_PATTERN,
259+
LinkableMovementMethod.LINKABLE_MENTION_SCHEME, null, filter);
234260

235-
if (enabledEmailAddress)
236-
Linkify.addLinks(this, Patterns.EMAIL_ADDRESS, null, null, filter);
261+
if (enabledEmailAddress)
262+
Linkify.addLinks(this, Patterns.EMAIL_ADDRESS, null, null, filter);
237263

238-
if (enabledPhone)
239-
Linkify.addLinks(this, Patterns.PHONE, null, null, filter);
264+
if (enabledPhone)
265+
Linkify.addLinks(this, Patterns.PHONE, null, null, filter);
240266

241-
if (enabledWebUrl)
242-
Linkify.addLinks(this, Patterns.WEB_URL, null, null, filter);
267+
if (enabledWebUrl)
268+
Linkify.addLinks(this, Patterns.WEB_URL, null, null, filter);
243269

244-
if (enabledIpAddress)
245-
Linkify.addLinks(this, IP_ADDRESS_PATTERN, LinkableMovementMethod.SOCIAL_UI_IP_ADDRESS_SCHEME, null, filter);
270+
if (enabledIpAddress)
271+
Linkify.addLinks(this, IP_ADDRESS_PATTERN,
272+
LinkableMovementMethod.LINKABLE_IP_ADDRESS_SCHEME, null, filter);
273+
}
246274

247275
MovementMethod movementMethod = null;
248276
if (callback != null) {

0 commit comments

Comments
 (0)