Skip to content

Commit 79a29fd

Browse files
committed
Fixed ViewOnClickListener
1 parent f666f48 commit 79a29fd

4 files changed

Lines changed: 21 additions & 38 deletions

File tree

Demo/app/src/main/java/com/pureswift/swiftandroid/ViewOnClickListener.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.pureswift.swiftandroid
22

33
import android.view.View
44

5-
class ViewOnClickListener(val id: String): View.OnClickListener {
5+
class ViewOnClickListener(val action: SwiftObject): View.OnClickListener {
66

77
external override fun onClick(view: View)
88
}

Sources/AndroidSwiftUI/AndroidButton.swift

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,7 @@ extension AndroidButton {
109109
let view = AndroidWidget.Button(context)
110110
updateView(view)
111111
// set on click listener
112-
let id = UUID().uuidString
113-
let listener = ViewOnClickListener(id: id)
114-
assert(listener.getId() == id)
115-
listener.action = self.action
112+
let listener = ViewOnClickListener(action: action)
116113
view.setClickable(true)
117114
view.setOnClickListener(listener.as(AndroidView.View.OnClickListener.self))
118115
return view

Sources/AndroidSwiftUI/AndroidImageButton.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,15 @@ extension AndroidImageButton {
4949
func createView(context: AndroidContent.Context) -> AndroidWidget.ImageButton {
5050
let view = AndroidWidget.ImageButton(context)
5151
updateView(view)
52+
// set on click listener
53+
let listener = ViewOnClickListener(action: action)
54+
view.setClickable(true)
55+
view.setOnClickListener(listener.as(AndroidView.View.OnClickListener.self))
5256
return view
5357
}
5458

5559
func updateView(_ view: AndroidWidget.ImageButton) {
5660
// update label
5761
self.label.updateImageView(view)
58-
// set on click listener
59-
let listener = ViewOnClickListener()
60-
listener.action = self.action
61-
view.setClickable(true)
62-
view.setOnClickListener(listener.as(AndroidView.View.OnClickListener.self))
6362
}
6463
}

Sources/AndroidSwiftUI/OnClickListener.swift

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,50 +10,38 @@ import AndroidKit
1010

1111
@JavaClass("com.pureswift.swiftandroid.ViewOnClickListener", extends: AndroidView.View.OnClickListener.self)
1212
open class ViewOnClickListener: JavaObject {
13-
14-
@JavaMethod
15-
@_nonoverride public convenience init(id: String, environment: JNIEnvironment? = nil)
13+
14+
public typealias Action = () -> ()
1615

1716
@JavaMethod
18-
func getId() -> String
17+
@_nonoverride public convenience init(action: SwiftObject?, environment: JNIEnvironment? = nil)
1918

20-
deinit {
21-
log("\(self).\(#function) ID \(getId())")
22-
}
19+
@JavaMethod
20+
public func getAction() -> SwiftObject?
2321
}
2422

2523
@JavaImplementation("com.pureswift.swiftandroid.ViewOnClickListener")
2624
extension ViewOnClickListener {
2725

2826
@JavaMethod
2927
func onClick() {
30-
log("\(self).\(#function) ID \(getId())")
28+
log("\(self).\(#function)")
3129
// drain queue
3230
RunLoop.main.run(until: Date() + 0.01)
33-
// get action
34-
guard let action else {
35-
logError("\(self).\(#function): No Action Configured")
36-
return
37-
}
38-
Task {
39-
await MainActor.run {
40-
action()
41-
log("\(self).\(#function) ID \(getId()) Executed")
42-
}
43-
}
31+
action()
32+
RunLoop.main.run(until: Date() + 0.01)
4433
}
4534
}
4635

4736
public extension ViewOnClickListener {
4837

49-
static private(set) var actions: [String: (() -> ())] = [:]
50-
51-
var action: (() -> ())? {
52-
get {
53-
Self.actions[getId()]
54-
} set {
55-
Self.actions[getId()] = newValue
56-
}
38+
convenience init(action: @escaping () -> (), environment: JNIEnvironment? = nil) {
39+
let object = SwiftObject(action, environment: environment)
40+
self.init(action: object, environment: environment)
41+
}
42+
43+
var action: (() -> ()) {
44+
getAction()!.valueObject().value as! Action
5745
}
5846
}
5947

@@ -64,7 +52,6 @@ extension ViewOnClickListener {
6452
static let log = try! JavaClass<AndroidUtil.Log>()
6553

6654
func log(_ string: String) {
67-
6855
_ = Self.log.d(Self.logTag, string)
6956
}
7057

0 commit comments

Comments
 (0)