99import android .view .KeyEvent ;
1010import android .view .View ;
1111import android .view .inputmethod .EditorInfo ;
12- import android .view .inputmethod .InputMethodManager ;
1312import android .widget .EditText ;
1413import android .widget .FrameLayout ;
1514import android .widget .TextView ;
2120import io .snabble .sdk .ui .telemetry .Telemetry ;
2221
2322public class ProductSearchView extends FrameLayout {
24- private RecyclerView recyclerView ;
2523 private SearchableProductAdapter searchableProductAdapter ;
2624 private EditText searchBar ;
2725 private boolean searchBarEnabled ;
26+ private TextView addCodeAsIs ;
27+ private String lastSearchQuery ;
2828
2929 public ProductSearchView (Context context ) {
3030 super (context );
@@ -44,7 +44,9 @@ public ProductSearchView(Context context, AttributeSet attrs, int defStyleAttr)
4444 private void inflateView () {
4545 inflate (getContext (), R .layout .view_search_product , this );
4646
47- recyclerView = findViewById (R .id .recycler_view );
47+ SnabbleSdk sdkInstance = SnabbleUI .getSdkInstance ();
48+
49+ RecyclerView recyclerView = findViewById (R .id .recycler_view );
4850 searchBar = findViewById (R .id .search_bar );
4951 searchBar .addTextChangedListener (new TextWatcher () {
5052 @ Override
@@ -59,7 +61,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) {
5961
6062 @ Override
6163 public void afterTextChanged (Editable s ) {
62- searchableProductAdapter . search (s .toString ());
64+ search (s .toString ());
6365 }
6466 });
6567
@@ -84,13 +86,7 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
8486 }
8587 });
8688
87- setSdkInstance (SnabbleUI .getSdkInstance ());
88- }
89-
90- public void setSdkInstance (SnabbleSdk sdkInstance ) {
91- if (sdkInstance == null ) {
92- return ;
93- }
89+ addCodeAsIs = findViewById (R .id .add_code_as_is );
9490
9591 recyclerView .setLayoutManager (new LinearLayoutManager (getContext ()));
9692 searchableProductAdapter = new SearchableProductAdapter (sdkInstance .getProductDatabase ());
@@ -99,17 +95,36 @@ public void setSdkInstance(SnabbleSdk sdkInstance) {
9995 searchableProductAdapter .setOnProductSelectedListener (new OnProductSelectedListener () {
10096 @ Override
10197 public void onProductSelected (String scannableCode ) {
102- Telemetry .event (Telemetry .Event .ManuallyEnteredProduct , scannableCode );
98+ showScannerWithCode (scannableCode );
99+ }
100+ });
103101
104- SnabbleUICallback callback = SnabbleUI .getUiCallback ();
105- if (callback != null ) {
106- callback .showScannerWithCode (scannableCode );
107- }
102+ searchableProductAdapter .registerAdapterDataObserver (new RecyclerView .AdapterDataObserver () {
103+ @ Override
104+ public void onChanged () {
105+ onSearchUpdated ();
106+ }
107+ });
108+
109+ addCodeAsIs .setOnClickListener (new OnClickListener () {
110+ @ Override
111+ public void onClick (View v ) {
112+ showScannerWithCode (lastSearchQuery );
108113 }
109114 });
115+
110116 recyclerView .setAdapter (searchableProductAdapter );
111117 }
112118
119+ private void showScannerWithCode (String scannableCode ) {
120+ Telemetry .event (Telemetry .Event .ManuallyEnteredProduct , scannableCode );
121+
122+ SnabbleUICallback callback = SnabbleUI .getUiCallback ();
123+ if (callback != null ) {
124+ callback .showScannerWithCode (scannableCode );
125+ }
126+ }
127+
113128 public void setSearchBarEnabled (boolean searchBarEnabled ) {
114129 this .searchBarEnabled = searchBarEnabled ;
115130
@@ -125,22 +140,17 @@ public void search(String searchQuery) {
125140 searchBar .setText (searchQuery );
126141 }
127142
143+ lastSearchQuery = searchQuery ;
128144 searchableProductAdapter .search (searchQuery );
129145 }
130146
131-
132- public void show () {
133- setVisibility (View .VISIBLE );
134- searchBar .setText ("" );
135-
136- if (searchBar .requestFocus ()) {
137- InputMethodManager imm = (InputMethodManager ) getContext ()
138- .getSystemService (Context .INPUT_METHOD_SERVICE );
139- imm .showSoftInput (searchBar , InputMethodManager .SHOW_IMPLICIT );
147+ private void onSearchUpdated () {
148+ if (searchableProductAdapter .getItemCount () == 0
149+ && lastSearchQuery != null && lastSearchQuery .length () > 0 ){
150+ addCodeAsIs .setText (getResources ().getString (R .string .Snabble_Scanner_addCodeAsIs , lastSearchQuery ));
151+ addCodeAsIs .setVisibility (View .VISIBLE );
152+ } else {
153+ addCodeAsIs .setVisibility (View .GONE );
140154 }
141155 }
142-
143- public void hide () {
144- setVisibility (View .GONE );
145- }
146156}
0 commit comments