Skip to content

Commit 0c93b69

Browse files
committed
Fixed Toolbar, Menu, MenuItem and more.
1 parent cdfdeb5 commit 0c93b69

10 files changed

+229
-40
lines changed

Sources/AndroidNamespace.swift

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,21 @@ public enum SupportV4: JavaPackage {
9696

9797
public static let package: JNIPackage = SupportV4.package + ["content"]
9898
}
99+
100+
public enum Graphics: JavaPackage {
101+
102+
public static let package: JNIPackage = SupportV4.package + ["graphics"]
103+
104+
public enum Drawable: JavaPackage {
105+
106+
public static let package: JNIPackage = SupportV4.Graphics.package + ["drawable"]
107+
}
108+
}
99109
}
100110

101111
/// Support Library namespace.
102112
public enum SwiftSupport: JavaPackage {
103-
113+
104114
public static let package: JNIPackage = ["org", "pureswift", "swiftandroidsupport"]
105115

106116
public enum Bluetooth: JavaPackage {
@@ -112,7 +122,7 @@ public enum SwiftSupport: JavaPackage {
112122
public static let package: JNIPackage = SwiftSupport.Bluetooth.package + ["le"]
113123
}
114124
}
115-
125+
116126
public enum Widget: JavaPackage {
117127

118128
public static let package: JNIPackage = SwiftSupport.package + ["widget"]
@@ -147,7 +157,7 @@ public protocol JavaPackage {
147157
public extension JavaPackage {
148158

149159
static func className(_ metaClass: JNIMetaClass) -> JNIClassName {
150-
160+
151161
return (Self.package ☕️ metaClass)
152162
}
153163
}

Sources/AppCompatActivity.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ open class SwiftSupportAppCompatActivity: AndroidContextWrapper {
7777
return getActionBarHeighPixels()
7878
}
7979
}
80+
public var resources: AndroidContentResResources? {
81+
get {
82+
return getResources()
83+
}
84+
}
8085

8186
// MARK: - Listener
8287

@@ -282,7 +287,8 @@ open class SwiftSupportAppCompatActivity: AndroidContextWrapper {
282287
return result!
283288
}
284289

285-
public func getResources() -> Android.Content.Res.Resources? {
290+
@inline(__always)
291+
internal func getResources() -> Android.Content.Res.Resources? {
286292

287293
var __locals = [jobject]()
288294

Sources/ContextCompat.swift

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ public extension AndroidContextCompat {
5959
__args[1] = jvalue(i: jint(drawableRes))
6060

6161
let __return = JNIMethod.CallStaticObjectMethod(className: JNICache.className,
62-
classCache: &JNICache.jniClass,
63-
methodName: "getDrawable",
64-
methodSig: "(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;",
65-
methodCache: &JNICache.MethodID.getDrawable,
66-
args: &__args,
67-
locals: &__locals )
62+
classCache: &JNICache.jniClass,
63+
methodName: "getDrawable",
64+
methodSig: "(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;",
65+
methodCache: &JNICache.MethodID.getDrawable,
66+
args: &__args,
67+
locals: &__locals )
6868

6969
return __return != nil ? AndroidGraphicsDrawableDrawable(javaObject: __return) : nil
7070
}
@@ -92,3 +92,4 @@ internal extension AndroidContextCompat {
9292
}
9393
}
9494

95+

Sources/DrawableCompat.swift

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ open class AndroidDrawableCompat: JavaObject {
3030

3131
public extension AndroidDrawableCompat {
3232

33-
public static func wrap(drawable: AndroidGraphicsDrawableDrawable) -> AndroidGraphicsDrawableDrawable? {
33+
public static func wrap(drawable: AndroidGraphicsDrawableDrawable) -> AndroidGraphicsDrawableDrawable {
3434

3535
var __locals = [jobject]()
3636

@@ -46,7 +46,45 @@ public extension AndroidDrawableCompat {
4646
args: &__args,
4747
locals: &__locals )
4848

49-
return __return != nil ? AndroidGraphicsDrawableDrawable(javaObject: __return) : nil
49+
return AndroidGraphicsDrawableDrawable(javaObject: __return)
50+
}
51+
52+
public static func setTint(drawable: AndroidGraphicsDrawableDrawable, color: Int64){
53+
54+
var __locals = [jobject]()
55+
56+
var __args = [jvalue]( repeating: jvalue(), count: 2 )
57+
58+
__args[0] = JNIType.toJava(value: drawable, locals: &__locals)
59+
__args[1] = jvalue(i: jint(color))
60+
61+
JNIMethod.CallStaticVoidMethod(className: JNICache.className,
62+
classCache: &JNICache.jniClass,
63+
methodName: "setTint",
64+
methodSig: "(Landroid/graphics/drawable/Drawable;I)V",
65+
methodCache: &JNICache.MethodID.setTint,
66+
args: &__args,
67+
locals: &__locals )
68+
69+
}
70+
71+
public static func setTint(drawable: AndroidGraphicsDrawableDrawable, colorRes: Int){
72+
73+
var __locals = [jobject]()
74+
75+
var __args = [jvalue]( repeating: jvalue(), count: 2 )
76+
77+
__args[0] = JNIType.toJava(value: drawable, locals: &__locals)
78+
__args[1] = jvalue(i: jint(colorRes))
79+
80+
JNIMethod.CallStaticVoidMethod(className: JNICache.className,
81+
classCache: &JNICache.jniClass,
82+
methodName: "setTint",
83+
methodSig: "(Landroid/graphics/drawable/Drawable;I)V",
84+
methodCache: &JNICache.MethodID.setTint,
85+
args: &__args,
86+
locals: &__locals )
87+
5088
}
5189
}
5290

@@ -55,7 +93,7 @@ internal extension AndroidDrawableCompat {
5593
/// JNI Cache
5694
struct JNICache {
5795

58-
static let classSignature = Android.Graphics.Drawable.className(["DrawableCompat"])
96+
static let classSignature = SupportV4.Graphics.Drawable.className(["DrawableCompat"])
5997

6098
/// JNI Java class name
6199
static let className = classSignature.rawValue
@@ -67,6 +105,8 @@ internal extension AndroidDrawableCompat {
67105
struct MethodID {
68106

69107
static var wrap: jmethodID?
108+
static var setTint: jmethodID?
70109
}
71110
}
72111
}
112+

Sources/Menu.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public extension AndroidMenuForward {
9999
__args[0] = jvalue(i: jint(groupId))
100100
__args[1] = jvalue(i: jint(itemId))
101101
__args[2] = jvalue(i: jint(order))
102-
__args[0] = JNIType.toJava(value: title, locals: &__locals)
102+
__args[3] = JNIType.toJava(value: title, locals: &__locals)
103103

104104
let __return = JNIMethod.CallObjectMethod(
105105
object: javaObject,
@@ -137,3 +137,4 @@ internal extension AndroidMenuForward {
137137
}
138138
}
139139
}
140+

Sources/MenuItem.swift

Lines changed: 132 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ open class AndroidMenuItemForward: JavaObject {
2626
self.javaObject = $0
2727
}
2828
}
29-
29+
3030
public var title: String? {
3131

3232
@inline(__always)
@@ -170,7 +170,7 @@ public extension AndroidMenuItemForward {
170170
let __return = JNIMethod.CallObjectMethod(
171171
object: javaObject,
172172
methodName: "setIcon",
173-
methodSig: "(I)V",
173+
methodSig: "(I)Landroid/view/MenuItem;",
174174
methodCache: &MenuItemJNICache.MethodID.setIcon1,
175175
args: &__args,
176176
locals: &__locals )
@@ -189,7 +189,7 @@ public extension AndroidMenuItemForward {
189189
let __return = JNIMethod.CallObjectMethod(
190190
object: javaObject,
191191
methodName: "setIcon",
192-
methodSig: "(Landroid/graphics/drawable/Drawable;)V",
192+
methodSig: "(Landroid/graphics/drawable/Drawable;)Landroid/view/MenuItem;",
193193
methodCache: &MenuItemJNICache.MethodID.setIcon2,
194194
args: &__args,
195195
locals: &__locals )
@@ -264,6 +264,102 @@ public extension AndroidMenuItemForward {
264264

265265
return Int(__return)
266266
}
267+
268+
public func setShowAsAction(action: ShowAsAction) {
269+
270+
var __locals = [jobject]()
271+
272+
var __args = [jvalue]( repeating: jvalue(), count: 1 )
273+
274+
__args[0] = jvalue(i: jint(action.rawValue))
275+
276+
JNIMethod.CallVoidMethod(
277+
object: javaObject,
278+
methodName: "setShowAsAction",
279+
methodSig: "(I)V",
280+
methodCache: &MenuItemJNICache.MethodID.setShowAsAction,
281+
args: &__args,
282+
locals: &__locals )
283+
}
284+
}
285+
286+
internal extension AndroidMenuItemForward {
287+
288+
internal static var SHOW_AS_ACTION_NEVER: Int {
289+
290+
get {
291+
292+
let __value = JNIField.GetStaticIntField(
293+
fieldName: "SHOW_AS_ACTION_NEVER",
294+
fieldType: "I",
295+
fieldCache: &MenuItemJNICache.FieldID.SHOW_AS_ACTION_NEVER,
296+
className: MenuItemJNICache.className,
297+
classCache: &MenuItemJNICache.jniClass )
298+
299+
return Int(__value)
300+
}
301+
}
302+
303+
internal static var SHOW_AS_ACTION_IF_ROOM: Int {
304+
305+
get {
306+
307+
let __value = JNIField.GetStaticIntField(
308+
fieldName: "SHOW_AS_ACTION_IF_ROOM",
309+
fieldType: "I",
310+
fieldCache: &MenuItemJNICache.FieldID.SHOW_AS_ACTION_IF_ROOM,
311+
className: MenuItemJNICache.className,
312+
classCache: &MenuItemJNICache.jniClass )
313+
314+
return Int(__value)
315+
}
316+
}
317+
318+
internal static var SHOW_AS_ACTION_ALWAYS: Int {
319+
320+
get {
321+
322+
let __value = JNIField.GetStaticIntField(
323+
fieldName: "SHOW_AS_ACTION_ALWAYS",
324+
fieldType: "I",
325+
fieldCache: &MenuItemJNICache.FieldID.SHOW_AS_ACTION_ALWAYS,
326+
className: MenuItemJNICache.className,
327+
classCache: &MenuItemJNICache.jniClass )
328+
329+
return Int(__value)
330+
}
331+
}
332+
333+
internal static var SHOW_AS_ACTION_WITH_TEXT: Int {
334+
335+
get {
336+
337+
let __value = JNIField.GetStaticIntField(
338+
fieldName: "SHOW_AS_ACTION_WITH_TEXT",
339+
fieldType: "I",
340+
fieldCache: &MenuItemJNICache.FieldID.SHOW_AS_ACTION_WITH_TEXT,
341+
className: MenuItemJNICache.className,
342+
classCache: &MenuItemJNICache.jniClass )
343+
344+
return Int(__value)
345+
}
346+
}
347+
348+
internal static var SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW: Int {
349+
350+
get {
351+
352+
let __value = JNIField.GetStaticIntField(
353+
fieldName: "SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW",
354+
fieldType: "I",
355+
fieldCache: &MenuItemJNICache.FieldID.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW,
356+
className: MenuItemJNICache.className,
357+
classCache: &MenuItemJNICache.jniClass )
358+
359+
return Int(__value)
360+
}
361+
}
362+
267363
}
268364

269365
internal extension AndroidMenuItemForward {
@@ -279,6 +375,15 @@ internal extension AndroidMenuItemForward {
279375
/// JNI Java class
280376
static var jniClass: jclass?
281377

378+
struct FieldID {
379+
380+
static var SHOW_AS_ACTION_NEVER: jfieldID?
381+
static var SHOW_AS_ACTION_IF_ROOM: jfieldID?
382+
static var SHOW_AS_ACTION_ALWAYS: jfieldID?
383+
static var SHOW_AS_ACTION_WITH_TEXT: jfieldID?
384+
static var SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW: jfieldID?
385+
}
386+
282387
/// JNI Method ID cache
283388
struct MethodID {
284389

@@ -293,6 +398,30 @@ internal extension AndroidMenuItemForward {
293398
static var getGroupId: jmethodID?
294399
static var setTitleCondensed: jmethodID?
295400
static var getTitleCondensed: jmethodID?
401+
static var setShowAsAction: jmethodID?
402+
}
403+
}
404+
}
405+
406+
public extension AndroidMenuItemForward {
407+
408+
public struct ShowAsAction: RawRepresentable, Equatable {
409+
410+
public let rawValue: Int
411+
412+
public init(rawValue: Int) {
413+
self.rawValue = rawValue
296414
}
415+
416+
public static let never = AndroidMenuItemForward.ShowAsAction(rawValue: AndroidMenuItemForward.SHOW_AS_ACTION_NEVER)
417+
418+
public static let ifRoom = AndroidMenuItemForward.ShowAsAction(rawValue: AndroidMenuItemForward.SHOW_AS_ACTION_IF_ROOM)
419+
420+
public static let always = AndroidMenuItemForward.ShowAsAction(rawValue: AndroidMenuItemForward.SHOW_AS_ACTION_ALWAYS)
421+
422+
public static let withText = AndroidMenuItemForward.ShowAsAction(rawValue: AndroidMenuItemForward.SHOW_AS_ACTION_WITH_TEXT)
423+
424+
public static let collapseActionView = AndroidMenuItemForward.ShowAsAction(rawValue: AndroidMenuItemForward.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)
297425
}
298426
}
427+

Sources/Toolbar.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ public extension AndroidToolbar {
338338
return __return != nil ? Android.Graphics.Drawable.Drawable(javaObject: __return) : nil
339339
}
340340

341-
public func setOnMenuItemClickListener(_ block: @escaping () -> (Bool)) {
341+
public func setOnMenuItemClickListener(_ block: @escaping (AndroidMenuItemForward?) -> (Bool)) {
342342

343343
let onMenuItemClickListener = Android.Widget.Toolbar.OnMenuItemClickListener(block: block)
344344

@@ -356,7 +356,7 @@ public extension AndroidToolbar {
356356
JNIMethod.CallVoidMethod(
357357
object: javaObject,
358358
methodName: "setOnMenuItemClickListener",
359-
methodSig: "(Landroid/support/v7/widget/Toolbar$;OnMenuItemClickListener)V",
359+
methodSig: "(Landroid/support/v7/widget/Toolbar$OnMenuItemClickListener;)V",
360360
methodCache: &ToolbarJNICache.MethodID.setOnMenuItemClickListener,
361361
args: &__args,
362362
locals: &__locals )
@@ -418,3 +418,4 @@ internal extension AndroidToolbar {
418418
}
419419
}
420420

421+

0 commit comments

Comments
 (0)