Skip to content

Commit 33fdeb2

Browse files
authored
Merge pull request #6 from JDevZone/dev_new
Dev new
2 parents f4c20e4 + 7ffd6b5 commit 33fdeb2

File tree

3 files changed

+38
-7
lines changed

3 files changed

+38
-7
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
package="com.devzone.ctv_sample">
3+
xmlns:tools="http://schemas.android.com/tools" package="com.devzone.ctv_sample">
44

55
<application
66
android:allowBackup="true"
77
android:icon="@mipmap/ic_launcher"
88
android:label="@string/app_name"
99
android:roundIcon="@mipmap/ic_launcher_round"
1010
android:supportsRtl="true"
11-
android:theme="@style/AppTheme">
11+
android:theme="@style/AppTheme" tools:ignore="AllowBackup,GoogleAppIndexingWarning">
1212
<activity android:name="com.devzone.ctv_sample.MainActivity">
1313
<intent-filter>
1414
<action android:name="android.intent.action.MAIN"/>

checkabletextview/src/main/java/com/devzone/checkabletextview/CheckableTextView.kt

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import android.util.TypedValue
99
import android.view.LayoutInflater
1010
import android.view.View
1111
import android.widget.RelativeLayout
12+
import androidx.annotation.RestrictTo
1213
import androidx.appcompat.app.AppCompatDelegate
1314
import androidx.core.content.ContextCompat
1415
import kotlinx.android.synthetic.main.layout_checkable_text.view.*
@@ -79,15 +80,18 @@ class CheckableTextView : RelativeLayout {
7980
}
8081

8182
animateView(checkedIV, isChecked)
82-
rootRL.setOnClickListener {
83+
rootRL.setOnClickListener(clickListener())
84+
}
85+
86+
private fun clickListener(): (v: View) -> Unit {
87+
return {
8388
checkedTextTV.text = checkedTextTV.text
8489
checkedTextTV.isSelected = true
8590
isChecked = !isChecked
8691
animateView(checkedIV, isChecked)
8792
notifyListener(isChecked)
8893
}
8994
}
90-
9195
private fun applyTextStyle(textStyle: Int, context: Context) {
9296
if (isValidRes(textStyle)) {
9397
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -125,19 +129,46 @@ class CheckableTextView : RelativeLayout {
125129
listener?.onCheckChange(this, isChecked)
126130
}
127131

132+
133+
private fun getRippleDrawable(): Int {
134+
val outValue = TypedValue()
135+
context.theme.resolveAttribute(android.R.attr.selectableItemBackground, outValue, true)
136+
return outValue.resourceId
137+
}
138+
139+
140+
/*-------------------------------------------------public functions------------------------------------------------------------------------------------------*/
141+
142+
143+
144+
/**
145+
* Change [CheckableTextView] click state
146+
* @param isClickable = pass true for enable clicks and false for disable clicks.
147+
*/
148+
@RestrictTo(RestrictTo.Scope.TESTS)
149+
fun setClickEnabled(isClickable: Boolean) {
150+
// 0.5 second delay added to ongoing ripple animation to complete (if any)
151+
rootRL.postDelayed(
152+
{ rootRL.setBackgroundResource(if (isClickable) getRippleDrawable() else android.R.color.transparent) },
153+
500
154+
)
155+
rootRL.setOnClickListener(if (isClickable) clickListener() else null)
156+
}
157+
128158
fun setOnCheckChangeListener(listener: CheckedListener) {
129159
this.listener = listener
130160
}
131161

132-
fun setChecked(isChecked: Boolean, shouldNotifyListeners: Boolean) {
162+
fun setChecked(isChecked: Boolean, shouldNotifyListeners: Boolean=false) {
133163
this.isChecked = isChecked
134164
animateView(checkedIV, isChecked)
135165
if (shouldNotifyListeners)
136166
notifyListener(isChecked)
137167
}
138168

139-
fun setChecked(isChecked: Boolean) {
140-
setChecked(isChecked, false)
169+
170+
fun isChecked(): Boolean {
171+
return this.isChecked
141172
}
142173

143174
interface CheckedListener {

logo.png

9.6 KB
Loading

0 commit comments

Comments
 (0)