From 1d20845b7c615a3b352924e9ad65ffb17d351aaf Mon Sep 17 00:00:00 2001 From: Alexander Vakrilov Date: Wed, 14 Jun 2017 14:11:04 +0300 Subject: [PATCH] Use AppCompat SearchView (#4371) * Use AppCompat SearchView * GetNative elements for appcompat * Classes renamed * test modified --- .../ui-tests-app/search-bar/issue-4147.xml | 13 +++--- .../search-bar-tests-native.android.ts | 5 ++- .../ui/search-bar/search-bar.android.ts | 42 ++++++++++++------- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/apps/app/ui-tests-app/search-bar/issue-4147.xml b/apps/app/ui-tests-app/search-bar/issue-4147.xml index 32e905be3..79df36dfa 100644 --- a/apps/app/ui-tests-app/search-bar/issue-4147.xml +++ b/apps/app/ui-tests-app/search-bar/issue-4147.xml @@ -5,11 +5,10 @@ - - - - - - - + + + + + + \ No newline at end of file diff --git a/tests/app/ui/search-bar/search-bar-tests-native.android.ts b/tests/app/ui/search-bar/search-bar-tests-native.android.ts index 75a14073a..743638199 100644 --- a/tests/app/ui/search-bar/search-bar-tests-native.android.ts +++ b/tests/app/ui/search-bar/search-bar-tests-native.android.ts @@ -4,9 +4,10 @@ import * as utils from "tns-core-modules/utils/utils"; function getTextView(bar: android.widget.SearchView): android.widget.TextView { if (bar) { - var id = bar.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); + const pkgName = bar.getContext().getPackageName(); + var id = bar.getContext().getResources().getIdentifier("search_src_text", "id", pkgName); if (id) { - return bar.findViewById(id); + return bar.findViewById(id); } } diff --git a/tns-core-modules/ui/search-bar/search-bar.android.ts b/tns-core-modules/ui/search-bar/search-bar.android.ts index 39a86c175..c6c8b06e2 100644 --- a/tns-core-modules/ui/search-bar/search-bar.android.ts +++ b/tns-core-modules/ui/search-bar/search-bar.android.ts @@ -11,11 +11,11 @@ const SEARCHTEXT = Symbol("searchText"); const QUERY = Symbol("query"); interface QueryTextListener { - new (owner: SearchBar): android.widget.SearchView.OnQueryTextListener; + new (owner: SearchBar): android.support.v7.widget.SearchView.OnQueryTextListener; } interface CloseListener { - new (owner: SearchBar): android.widget.SearchView.OnCloseListener; + new (owner: SearchBar): android.support.v7.widget.SearchView.OnCloseListener; } let QueryTextListener: QueryTextListener; @@ -26,8 +26,8 @@ function initializeNativeClasses(): void { return; } - @Interfaces([android.widget.SearchView.OnQueryTextListener]) - class QueryTextListenerImpl extends java.lang.Object implements android.widget.SearchView.OnQueryTextListener { + @Interfaces([android.support.v7.widget.SearchView.OnQueryTextListener]) + class CompatQueryTextListenerImpl extends java.lang.Object implements android.support.v7.widget.SearchView.OnQueryTextListener { constructor(private owner: SearchBar) { super(); return global.__native(this); @@ -58,8 +58,8 @@ function initializeNativeClasses(): void { } } - @Interfaces([android.widget.SearchView.OnCloseListener]) - class CloseListenerImpl extends java.lang.Object implements android.widget.SearchView.OnCloseListener { + @Interfaces([android.support.v7.widget.SearchView.OnCloseListener]) + class CompatCloseListenerImpl extends java.lang.Object implements android.support.v7.widget.SearchView.OnCloseListener { constructor(private owner: SearchBar) { super(); return global.__native(this); @@ -71,12 +71,14 @@ function initializeNativeClasses(): void { } } - QueryTextListener = QueryTextListenerImpl; - CloseListener = CloseListenerImpl; + QueryTextListener = CompatQueryTextListenerImpl; + CloseListener = CompatCloseListenerImpl; } export class SearchBar extends SearchBarBase { - nativeView: android.widget.SearchView; + nativeView: android.support.v7.widget.SearchView; + private _searchTextView: android.widget.TextView; + private _searchPlate: android.widget.LinearLayout; public dismissSoftInput() { ad.dismissSoftInput(this.nativeView); @@ -93,7 +95,7 @@ export class SearchBar extends SearchBarBase { public createNativeView() { initializeNativeClasses(); - const nativeView = new android.widget.SearchView(this._context); + const nativeView = new android.support.v7.widget.SearchView(this._context) nativeView.setIconified(false); const queryTextListener = new QueryTextListener(this); @@ -118,6 +120,8 @@ export class SearchBar extends SearchBarBase { const nativeView: any = this.nativeView; nativeView.closeListener.owner = null; nativeView.queryTextListener.owner = null; + this._searchPlate = null; + this._searchTextView = null; super.disposeNativeView(); } @@ -208,12 +212,22 @@ export class SearchBar extends SearchBarBase { } private _getTextView(): android.widget.TextView { - const id = this.nativeView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); - return this.nativeView.findViewById(id); + if (!this._searchTextView) { + const pkgName = this.nativeView.getContext().getPackageName(); + const id = this.nativeView.getContext().getResources().getIdentifier("search_src_text", "id", pkgName); + this._searchTextView = this.nativeView.findViewById(id); + } + + return this._searchTextView; } private _getSearchPlate(): android.widget.LinearLayout { - const id = this.nativeView.getContext().getResources().getIdentifier("android:id/search_plate", null, null); - return this.nativeView.findViewById(id); + if (!this._searchPlate) { + const pkgName = this.nativeView.getContext().getPackageName(); + const id = this.nativeView.getContext().getResources().getIdentifier("search_plate", "id", pkgName); + this._searchPlate = this.nativeView.findViewById(id); + } + + return this._searchPlate; } }