From d6574cd4d6c15479988c140394bc6deb18f6916d Mon Sep 17 00:00:00 2001 From: satchit8 Date: Mon, 14 Nov 2016 02:41:23 +0000 Subject: [PATCH] Make :container trait handle proxies of android.* classses --- src/clojure/neko/_utils.clj | 9 +++++++++ src/clojure/neko/ui/traits.clj | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/clojure/neko/_utils.clj b/src/clojure/neko/_utils.clj index 646e155..e6fbde0 100644 --- a/src/clojure/neko/_utils.clj +++ b/src/clojure/neko/_utils.clj @@ -128,3 +128,12 @@ (.getName m))) (.getDeclaredMethods c)))) methods))) + +(defn closest-android-ancestor + [^Class c] + (loop [c c] + (when c + (if-let [cand-name + (re-find #"^class (android\..*)" (str c))] + (Class/forName (second cand-name)) + (recur (.getSuperclass c)))))) diff --git a/src/clojure/neko/ui/traits.clj b/src/clojure/neko/ui/traits.clj index d391d38..1cc695f 100644 --- a/src/clojure/neko/ui/traits.clj +++ b/src/clojure/neko/ui/traits.clj @@ -6,7 +6,7 @@ [neko.listeners.text-view :as text-view-listeners] [neko.listeners.adapter-view :as adapter-view] neko.listeners.search-view - [neko.-utils :refer [memoized int-id]]) + [neko.-utils :refer [memoized int-id closest-android-ancestor]]) (:import [android.widget LinearLayout$LayoutParams ListView TextView SearchView ImageView RelativeLayout RelativeLayout$LayoutParams AdapterView AbsListView$LayoutParams FrameLayout$LayoutParams Gallery$LayoutParams] @@ -367,7 +367,7 @@ next-level elements." use the container type to choose the correct LayoutParams instance." {:applies? (constantly true)} [wdg _ __] - (let [kw (kw/keyword-by-classname (type wdg)) + (let [kw (kw/keyword-by-classname (closest-android-ancestor (class wdg))) container-type (-> (kw/get-keyword-mapping) kw :container-type)] {:options-fn #(assoc % :container-type (or container-type kw))}))