Skip to content

Commit

Permalink
Enforce rulebook linter, first release to Maven Central
Browse files Browse the repository at this point in the history
  • Loading branch information
hanggrian committed Aug 17, 2023
1 parent bdea594 commit 8c83f15
Show file tree
Hide file tree
Showing 32 changed files with 338 additions and 356 deletions.
79 changes: 40 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,14 @@ Core library contains `SocialTextView`, `SocialEditText` and helper class
applies these behavior into any `TextView`.

```xml
<com.hendraanggrian.appcompat.widget.SocialTextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="#hashtag and @mention."
app:socialFlags="hashtag|mention"
app:hashtagColor="@color/blue"
app:mentionColor="@color/red"/>
<com.hendraanggrian.appcompat.socialview.widget.SocialTextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="#hashtag and @mention."
app:socialFlags="hashtag|mention"
app:hashtagColor="@color/blue"
app:mentionColor="@color/red"/>
```

See [attrs.xml](https://github.com/HendraAnggrian/socialview/blob/master/socialview/res/values/attrs.xml)
Expand All @@ -57,10 +57,10 @@ Modify its state and set listeners programmatically.
textView.setMentionEnabled(false);
textView.setHashtagColor(Color.RED);
textView.setOnHashtagClickListener(new SocialView.OnClickListener() {
@Override
public void invoke(SocialView socialView, String s) {
// do something
}
@Override
public void invoke(SocialView socialView, String s) {
// do something
}
});
```

Expand All @@ -69,13 +69,13 @@ textView.setOnHashtagClickListener(new SocialView.OnClickListener() {
Extended library comes with `SocialAutoCompleteTextView`.

```xml
<com.hendraanggrian.appcompat.widget.SocialAutoCompleteTextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="What's on your mind?"
app:socialFlags="hyperlink"
app:hyperlinkColor="@color/green"/>
<com.hendraanggrian.appcompat.socialview.widget.SocialAutoCompleteTextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="What's on your mind?"
app:socialFlags="hyperlink"
app:hyperlinkColor="@color/green"/>
```

To display suggestions, it is required to `setHashtagAdapter()`
Expand All @@ -91,7 +91,8 @@ textView.setHashtagAdapter(hashtagAdapter);
ArrayAdapter<Mention> mentionAdapter = new MentionAdapter(getContext());
mentionAdapter.add(new Mention("dirtyhobo"));
mentionAdapter.add(new Mention("hobo", "Regular Hobo", R.mipmap.ic_launcher));
mentionAdapter.add(new Mention("hendraanggrian", "Hendra Anggrian", "https://avatars0.githubusercontent.com/u/11507430?v=3&s=460"));
mentionAdapter.add(new Mention("hendraanggrian", "Hendra Anggrian",
"https://avatars0.githubusercontent.com/u/11507430?v=3&s=460"));
textView.setMentionAdapter(mentionAdapter);
```

Expand All @@ -102,34 +103,34 @@ customized `SocialAdapter` or write your own `ArrayAdapter`.
```java
public class Person {
public final String name;
public final String name;

public Person(String name) {
this.name = name;
}
public Person(String name) {
this.name = name;
}
}

// easier
public class PersonAdapter extends SocialAdapter<Person> {
public PersonAdapter(@NonNull Context context) {
super(context, R.layout.item_person, R.id.textview_person);
}

@Override
public String convertToString(Person $receiver) {
return $receiver.name;
}

@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
...
}
public PersonAdapter(@NonNull Context context) {
super(context, R.layout.item_person, R.id.textview_person);
}

@Override
public String convertToString(Person $receiver) {
return $receiver.name;
}

@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
// ...
}
}

// this works too
public class PersonAdapter extends ArrayAdapter<Person> {
// your own adapter layout, view holder, data binding
// and of course, filtering logic
// your own adapter layout, view holder, data binding
// and of course, filtering logic
}
```

Expand Down
6 changes: 5 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
kotlin("android") version libs.versions.kotlin apply false
kotlin("kapt") version libs.versions.kotlin apply false
}

allprojects {
Expand All @@ -26,6 +25,11 @@ subprojects {
plugins.withType<AppPlugin>().configureEach {
configure<BaseAppModuleExtension>(::configureAndroid)
}
plugins.withType<KotlinAndroidPluginWrapper> {
kotlinExtension.jvmToolchain(libs.versions.jdk.get().toInt())
(the<BaseExtension>() as ExtensionAware).extensions.getByType<KotlinJvmOptions>()
.jvmTarget = JavaVersion.toVersion(libs.versions.jdk.get()).toString()
}
}

fun configureAndroid(extension: BaseExtension) {
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/Releases.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ const val DEVELOPER_URL = "https://github.com/$DEVELOPER_ID/"

const val RELEASE_GROUP = "com.hendraanggrian.appcompat"
const val RELEASE_ARTIFACT = "socialview"
const val RELEASE_VERSION = "0.1-SNAPSHOT"
const val RELEASE_VERSION = "0.1"
const val RELEASE_DESCRIPTION = "Android TextView and EditText with hashtag, mention, and hyperlink support"
const val RELEASE_URL = "https://github.com/$DEVELOPER_ID/$RELEASE_ARTIFACT/"

Expand Down
5 changes: 4 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,7 @@ robolectric = "org.robolectric:robolectric:4.10.3"
truth = "com.google.truth:truth:1.1.5"

[bundles]
androidx-test = ["androidx-test-core", "androidx-test-runner", "androidx-test-junit", "robolectric", "truth"]
androidx-test = [
"androidx-test-core", "androidx-test-runner", "androidx-test-junit",
"robolectric", "truth"
]
15 changes: 7 additions & 8 deletions rulebook_checks.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@
"https://checkstyle.org/dtds/configuration_1_3.dtd">

<!--
Checkstyle configuration file for Rulebook, find out more at https://github.com/hendraanggrian/rulebook/.
Derived from https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml
version 8.45.1 with few changes:
- Add rules from module `rulebook-checkstyle`.
- Remove check `SummaryJavadoc`.
- Remove check `MissingJavadocMethod`.
- Remove check `MissingJavadocType`.
- Change property `AbbreviationAsWordInName#allowedAbbreviationLength` from `0` to `1`.
Find out more at https://github.com/hendraanggrian/rulebook/.
- Add third-party rules from https://github.com/hendraanggrian/rulebook/wiki.
- Lenient javadoc by removing `SummaryJavadoc`, `MissingJavadocMethod`, and `MissingJavadocType`.
- Change property `AbbreviationAsWordInName#allowedAbbreviationLength` from 0 to 1.
-->

<module name="Checker">
Expand Down Expand Up @@ -46,10 +45,10 @@
</module>

<module name="TreeWalker">
<!-- Additional rules -->
<!-- Third-party rules -->
<module name="SummaryContinuation"/>
<module name="TagDescriptionSentence"/>
<module name="ThrowExceptionAmbiguity"/>
<module name="ThrowAmbiguity"/>

<module name="OuterTypeFilename"/>
<module name="IllegalTokenText">
Expand Down
4 changes: 1 addition & 3 deletions sample/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
plugins {
alias(libs.plugins.android.application)
kotlin("android") version libs.versions.kotlin
kotlin("kapt") version libs.versions.kotlin
}

android {
namespace = "com.example.$RELEASE_ARTIFACT"
testNamespace = "$namespace.test"
defaultConfig {
minSdk = 23
applicationId = "com.example.socialview"
applicationId = "com.example.$RELEASE_ARTIFACT"
multiDexEnabled = true
}
lint.abortOnError = false
Expand Down
34 changes: 17 additions & 17 deletions sample/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.socialview">
package="com.example.socialview">

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.INTERNET"/>

<application
android:name="androidx.multidex.MultiDexApplication"
android:allowBackup="true"
android:label="SocialView Example"
android:supportsRtl="true"
android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar">
<activity
android:name=".ExampleActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<application
android:name="androidx.multidex.MultiDexApplication"
android:allowBackup="true"
android:label="SocialView Example"
android:supportsRtl="true"
android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar">
<activity
android:name=".ExampleActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
15 changes: 6 additions & 9 deletions sample/src/main/kotlin/com/example/socialview/ExampleActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ import android.widget.ArrayAdapter
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import com.hendraanggrian.appcompat.socialview.Hashtag
import com.hendraanggrian.appcompat.socialview.Mention
import com.hendraanggrian.appcompat.widget.HashtagArrayAdapter
import com.hendraanggrian.appcompat.widget.MentionArrayAdapter
import com.hendraanggrian.appcompat.widget.SocialArrayAdapter
import com.hendraanggrian.appcompat.widget.SocialAutoCompleteTextView
import com.hendraanggrian.appcompat.socialview.autocomplete.Hashtag
import com.hendraanggrian.appcompat.socialview.autocomplete.Mention
import com.hendraanggrian.appcompat.socialview.widget.HashtagArrayAdapter
import com.hendraanggrian.appcompat.socialview.widget.MentionArrayAdapter
import com.hendraanggrian.appcompat.socialview.widget.SocialArrayAdapter
import com.hendraanggrian.appcompat.socialview.widget.SocialAutoCompleteTextView

class ExampleActivity : AppCompatActivity() {
private companion object {
Expand Down Expand Up @@ -100,13 +100,11 @@ class ExampleActivity : AppCompatActivity() {
textView.hashtagAdapter = customHashtagAdapter
textView.mentionAdapter = customMentionAdapter
}

else -> {
textView.hashtagAdapter = defaultHashtagAdapter
textView.mentionAdapter = defaultMentionAdapter
}
}

R.id.enableHashtagItem -> textView.isHashtagEnabled = item.isChecked
R.id.enableMentionItem -> textView.isMentionEnabled = item.isChecked
R.id.enableHyperlinkItem -> textView.isHyperlinkEnabled = item.isChecked
Expand All @@ -128,7 +126,6 @@ class ExampleActivity : AppCompatActivity() {
holder = ViewHolder(view!!)
view.tag = holder
}

else -> holder = view.tag as ViewHolder
}
getItem(position)?.let { model -> holder.textView.text = model.name }
Expand Down
2 changes: 1 addition & 1 deletion sample/src/main/res/layout/activity_example.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
android:layout_height="?actionBarSize"/>
</com.google.android.material.appbar.AppBarLayout>

<com.hendraanggrian.appcompat.widget.SocialAutoCompleteTextView
<com.hendraanggrian.appcompat.socialview.widget.SocialAutoCompleteTextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
Expand Down
2 changes: 1 addition & 1 deletion socialview-autocomplete/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ mavenPublishing {
dependencies {
checkstyle(libs.rulebook.checkstyle)
api(project(":$RELEASE_ARTIFACT"))
implementation(libs.material)
implementation(libs.androidx.appcompat)
implementation(libs.picasso)
testImplementation(libs.bundles.androidx.test)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.hendraanggrian.appcompat.socialview;
package com.hendraanggrian.appcompat.socialview.autocomplete;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package com.hendraanggrian.appcompat.socialview;
package com.hendraanggrian.appcompat.socialview.autocomplete;

import androidx.annotation.NonNull;
import com.hendraanggrian.appcompat.socialview.widget.HashtagArrayAdapter;

/**
* Abstract hashtag to be used with {@link com.hendraanggrian.appcompat.widget.HashtagArrayAdapter}.
* Abstract hashtag to be used with {@link HashtagArrayAdapter}.
*/
public interface Hashtagable {
/** Unique id of this hashtag. */
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.hendraanggrian.appcompat.socialview;
package com.hendraanggrian.appcompat.socialview.autocomplete;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.hendraanggrian.appcompat.socialview;
package com.hendraanggrian.appcompat.socialview.autocomplete;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.hendraanggrian.appcompat.socialview.widget.MentionArrayAdapter;

/**
* Abstract mention to be used with {@link com.hendraanggrian.appcompat.widget.MentionArrayAdapter}.
* Abstract mention to be used with {@link MentionArrayAdapter}.
*/
public interface Mentionable {
/** Unique id of this mention. */
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.hendraanggrian.appcompat.widget;
package com.hendraanggrian.appcompat.socialview.widget;

import android.content.Context;
import android.view.LayoutInflater;
Expand All @@ -8,8 +8,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.PluralsRes;

import com.hendraanggrian.appcompat.socialview.Hashtagable;
import com.hendraanggrian.appcompat.socialview.autocomplete.Hashtagable;
import com.hendraanggrian.appcompat.socialview.autocomplete.R;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.hendraanggrian.appcompat.widget;
package com.hendraanggrian.appcompat.socialview.widget;

import android.content.Context;
import android.graphics.Bitmap;
Expand All @@ -18,8 +18,7 @@
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.hendraanggrian.appcompat.socialview.Mentionable;
import com.hendraanggrian.appcompat.socialview.autocomplete.Mentionable;
import com.hendraanggrian.appcompat.socialview.autocomplete.R;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.hendraanggrian.appcompat.widget;
package com.hendraanggrian.appcompat.socialview.widget;

import android.content.Context;
import android.text.TextUtils;
Expand All @@ -13,8 +13,8 @@
import java.util.Locale;

/**
* An {@link ArrayAdapter} customized with filter to display items. It is a direct parent of default
* {@link HashtagArrayAdapter} and {@link MentionArrayAdapter}, which are optional adapters.
* An {@link ArrayAdapter} customized with filter to display items. It is a direct parent of
* default {@link HashtagArrayAdapter} and {@link MentionArrayAdapter}, which are optional adapters.
*/
public abstract class SocialArrayAdapter<T> extends ArrayAdapter<T> {
private Filter filter;
Expand Down
Loading

0 comments on commit 8c83f15

Please sign in to comment.