Skip to content

Commit 9b94d73

Browse files
committed
Add Fragment support to AndroidTarget and update imports in MainActivity and Runnable
1 parent 7f684fc commit 9b94d73

4 files changed

Lines changed: 97 additions & 3 deletions

File tree

Sources/AndroidSwiftUI/AndroidTarget.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ import AndroidKit
1111
final class AndroidTarget: Target {
1212

1313
enum Storage {
14-
case application
14+
case application // main activity
1515
case view(AndroidView.View)
16+
case fragment(AndroidApp.Fragment)
1617
}
1718

1819
let storage: Storage
@@ -29,6 +30,11 @@ final class AndroidTarget: Target {
2930
self.view = AnyView(view)
3031
}
3132

33+
init<V: View>(_ view: V, _ object: AndroidApp.Fragment) {
34+
self.storage = .fragment(object)
35+
self.view = AnyView(view)
36+
}
37+
3238
static var application: AndroidTarget {
3339
.init(EmptyView(), .application)
3440
}
@@ -42,6 +48,8 @@ extension AndroidTarget {
4248
break
4349
case let .view(view):
4450
break // TODO: Remove from parent
51+
case let .fragment(fragment):
52+
break // TODO:
4553
}
4654
}
4755
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
//
2+
// Fragment.swift
3+
// SwiftAndroidApp
4+
//
5+
// Created by Alsey Coleman Miller on 6/22/25.
6+
//
7+
8+
import AndroidKit
9+
10+
@JavaClass("com.pureswift.swiftandroid.Fragment")
11+
open class Fragment: AndroidApp.Fragment {
12+
13+
@JavaMethod
14+
@_nonoverride public convenience init(swiftObject: SwiftObject?, environment: JNIEnvironment? = nil)
15+
16+
@JavaMethod
17+
public func getSwiftObject() -> SwiftObject?
18+
}
19+
20+
public extension Fragment {
21+
22+
struct Callback {
23+
24+
var onViewCreated: ((AndroidView.View, AndroidOS.Bundle?) -> ())?
25+
}
26+
}
27+
28+
@JavaImplementation("com.pureswift.swiftandroid.Fragment")
29+
extension Fragment {
30+
31+
@JavaMethod
32+
func onViewCreated(
33+
view: AndroidView.View?,
34+
savedInstanceState: AndroidOS.Bundle?
35+
) {
36+
log("\(self).\(#function)")
37+
guard let onViewCreated = callback.onViewCreated else {
38+
return
39+
}
40+
guard let view else {
41+
assertionFailure("Missing view")
42+
return
43+
}
44+
onViewCreated(view, savedInstanceState)
45+
}
46+
}
47+
48+
public extension Fragment {
49+
50+
convenience init(callback: Callback, environment: JNIEnvironment? = nil) {
51+
let object = SwiftObject(callback, environment: environment)
52+
self.init(swiftObject: object, environment: environment)
53+
}
54+
55+
var callback: Callback {
56+
getSwiftObject()!.valueObject().value as! Callback
57+
}
58+
}
59+
60+
extension Fragment {
61+
62+
static var logTag: LogTag { "Fragment" }
63+
64+
static func log(_ string: String) {
65+
try? AndroidLogger(tag: logTag, priority: .debug)
66+
.log(string)
67+
}
68+
69+
static func logInfo(_ string: String) {
70+
try? AndroidLogger(tag: logTag, priority: .info)
71+
.log(string)
72+
}
73+
74+
static func logError(_ string: String) {
75+
try? AndroidLogger(tag: logTag, priority: .error)
76+
.log(string)
77+
}
78+
79+
func log(_ string: String) {
80+
Self.log(string)
81+
}
82+
83+
func logError(_ string: String) {
84+
Self.logError(string)
85+
}
86+
}

Sources/AndroidSwiftUI/MainActivity.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import Foundation
99
import AndroidKit
10-
import AndroidJavaLang
10+
import JavaLang
1111

1212
@JavaClass("com.pureswift.swiftandroid.MainActivity")
1313
open class MainActivity: AndroidApp.Activity {

Sources/AndroidSwiftUI/Runnable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import JavaKit
99
import JavaRuntime
1010
import AndroidKit
11-
import AndroidJavaLang
11+
import JavaLang
1212
/*
1313
@JavaClass("com.pureswift.swiftandroid.Runnable", extends: AndroidJavaLang.Runnable.self)
1414
open class Runnable: JavaObject {

0 commit comments

Comments
 (0)