Skip to content

Commit 45b0cf0

Browse files
committed
focus detected
1 parent f43b3ab commit 45b0cf0

File tree

7 files changed

+162
-42
lines changed

7 files changed

+162
-42
lines changed

app/src/main/java/com/mapbox/mapboxsdk/plugins/testapp/activity/places/PickerAutocompleteCombinedActivity.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ import kotlinx.android.synthetic.main.activity_picker_autocomplete_combo_launche
1717
import kotlinx.android.synthetic.main.activity_picker_launcher.fabLocationPicker
1818
import kotlinx.android.synthetic.main.activity_picker_launcher.reverseGeocodingSwitch
1919

20-
import kotlinx.android.synthetic.main.activity_picker_launcher.*
21-
import kotlinx.android.synthetic.main.activity_picker_launcher.fabLocationPicker
22-
import kotlinx.android.synthetic.main.activity_picker_launcher.reverseGeocodingSwitch
2320

2421
class PickerAutocompleteCombinedActivity : AppCompatActivity() {
2522

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.mapbox.mapboxsdk.plugins.places.autocomplete.ui;
2+
3+
public interface ClearButtonListener {
4+
5+
public void onClearButtonPress();
6+
7+
public void onCancel();
8+
9+
}

plugin-places/src/main/java/com/mapbox/mapboxsdk/plugins/places/autocomplete/ui/PlaceAutocompleteFragment.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@
3030
import timber.log.Timber;
3131

3232
public class PlaceAutocompleteFragment extends Fragment implements ResultClickCallback,
33-
SearchView.QueryListener, SearchView.BackButtonListener,
33+
SearchView.QueryListener, QueryFocusListener, SearchView.BackButtonListener, ClearButtonListener,
3434
ViewTreeObserver.OnScrollChangedListener {
3535

3636
public static final String TAG = "PlaceAutocompleteFragment";
3737

3838
private PlaceSelectionListener placeSelectionListener;
39+
private QueryFocusListener queryFocusListener;
40+
private ClearButtonListener clearButtonListener;
3941
private PlaceAutocompleteViewModel viewModel;
4042
private ResultView searchHistoryView;
4143
private ResultView searchResultView;
@@ -48,6 +50,7 @@ public class PlaceAutocompleteFragment extends Fragment implements ResultClickCa
4850
private String accessToken;
4951
private Integer historyCount;
5052
private View rootView;
53+
private Activity context;
5154
private int mode;
5255

5356
public static PlaceAutocompleteFragment newInstance(@NonNull String accessToken) {
@@ -108,7 +111,7 @@ private void styleView() {
108111
}
109112

110113
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
111-
Activity context = (Activity) rootView.getContext();
114+
context = (Activity) rootView.getContext();
112115
context.getWindow().setStatusBarColor(placeOptions.statusbarColor());
113116
}
114117

@@ -162,6 +165,11 @@ public void onQueryChange(CharSequence charSequence) {
162165
}
163166
}
164167

168+
@Override
169+
public void onClearButtonPress() {
170+
clearButtonListener.onClearButtonPress();
171+
}
172+
165173
@Override
166174
public void onClick(CarmenFeature carmenFeature) {
167175
viewModel.saveCarmenFeatureToDatabase(carmenFeature);
@@ -176,6 +184,8 @@ public void onDestroyView() {
176184
resultScrollView.getViewTreeObserver().removeOnScrollChangedListener(this);
177185
}
178186
placeSelectionListener = null;
187+
queryFocusListener = null;
188+
clearButtonListener = null;
179189
super.onDestroyView();
180190
}
181191

@@ -184,18 +194,44 @@ public void onBackButtonPress() {
184194
if (placeSelectionListener != null) {
185195
placeSelectionListener.onCancel();
186196
}
197+
if (queryFocusListener != null) {
198+
queryFocusListener.onCancel();
199+
}
200+
if (clearButtonListener != null) {
201+
clearButtonListener.onCancel();
202+
}
203+
}
204+
205+
@Override
206+
public void onSearchViewHasFocus() {
207+
queryFocusListener.onSearchViewHasFocus();
208+
}
209+
210+
@Override
211+
public void onCancel() {
212+
queryFocusListener.onCancel();
187213
}
188214

189215
public void setOnPlaceSelectedListener(PlaceSelectionListener listener) {
190216
placeSelectionListener = listener;
191217
}
192218

219+
public void setOnSearchUiHasFocusListener(QueryFocusListener listener) {
220+
queryFocusListener = listener;
221+
}
222+
223+
public void setOnClearButtonListener(ClearButtonListener listener) {
224+
clearButtonListener = listener;
225+
}
226+
193227
private void bindClickListeners() {
194228
searchHistoryView.setOnItemClickListener(this);
195229
searchResultView.setOnItemClickListener(this);
196230
starredView.setOnItemClickListener(this);
197231
searchView.setBackButtonListener(this);
232+
searchView.setClearButtonListener(this);
198233
searchView.setQueryListener(this);
234+
searchView.setQueryFocusListener(this);
199235
}
200236

201237
private void bindViews() {
@@ -288,4 +324,5 @@ public String getAccessToken() {
288324
public Integer getHistoryCount() {
289325
return historyCount;
290326
}
327+
291328
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.mapbox.mapboxsdk.plugins.places.autocomplete.ui;
2+
3+
public interface QueryFocusListener {
4+
5+
public void onSearchViewHasFocus();
6+
7+
public void onCancel();
8+
9+
}

plugin-places/src/main/java/com/mapbox/mapboxsdk/plugins/places/autocomplete/ui/SearchView.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,25 @@
1616
import android.widget.ImageView;
1717
import android.widget.LinearLayout;
1818

19+
import com.mapbox.mapboxsdk.log.Logger;
1920
import com.mapbox.mapboxsdk.places.R;
2021

2122
public class SearchView extends LinearLayout implements ImageButton.OnClickListener, TextWatcher,
22-
LifecycleObserver {
23+
LifecycleObserver, View.OnFocusChangeListener {
2324

2425
@Nullable
2526
private BackButtonListener backButtonListener;
2627
@Nullable
28+
private ClearButtonListener clearButtonListener;
29+
@Nullable
2730
private QueryListener queryListener;
31+
@Nullable
32+
private QueryFocusListener focusListener;
2833

2934
private final ImageView backButton;
3035
private final ImageView clearButton;
3136
private final EditText searchEditText;
37+
private CharSequence previousText;
3238

3339
public SearchView(@NonNull Context context) {
3440
this(context, null);
@@ -51,6 +57,7 @@ private void initialize() {
5157
backButton.setOnClickListener(this);
5258
clearButton.setOnClickListener(this);
5359
searchEditText.addTextChangedListener(this);
60+
searchEditText.setOnFocusChangeListener(this);
5461
((LifecycleOwner) getContext()).getLifecycle().addObserver(this);
5562
}
5663

@@ -62,30 +69,45 @@ public void onClick(View view) {
6269
}
6370
} else {
6471
searchEditText.getText().clear();
72+
if (clearButtonListener != null) {
73+
clearButtonListener.onClearButtonPress();
74+
}
75+
}
76+
}
77+
78+
@Override
79+
public void onFocusChange(View view, boolean hasFocus) {
80+
if (view.getId() == searchEditText.getId()) {
81+
if (focusListener != null) {
82+
focusListener.onSearchViewHasFocus();
83+
}
6584
}
6685
}
6786

6887
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
6988
public void onDestroy() {
7089
backButtonListener = null;
7190
queryListener = null;
91+
focusListener = null;
92+
clearButtonListener = null;
7293
}
7394

7495
public void setHint(String hint) {
7596
searchEditText.setHint(hint);
7697
}
7798

7899
@Override
79-
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
100+
public void onTextChanged(CharSequence charSequence, int start, int count, int after) {
80101
if (queryListener != null) {
81102
queryListener.onQueryChange(charSequence);
82103
}
83104
clearButton.setVisibility(charSequence.length() > 0 ? View.VISIBLE : INVISIBLE);
84105
}
85106

86107
@Override
87-
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
88-
// Not used
108+
public void beforeTextChanged(CharSequence charSequence, int start, int count, int after) {
109+
Logger.d("SearchView", "charSequence = " + charSequence);
110+
previousText = charSequence;
89111
}
90112

91113
@Override
@@ -97,10 +119,18 @@ public void setBackButtonListener(@Nullable BackButtonListener backButtonListene
97119
this.backButtonListener = backButtonListener;
98120
}
99121

122+
public void setClearButtonListener(@Nullable ClearButtonListener clearButtonListener) {
123+
this.clearButtonListener = clearButtonListener;
124+
}
125+
100126
public void setQueryListener(@Nullable QueryListener queryListener) {
101127
this.queryListener = queryListener;
102128
}
103129

130+
public void setQueryFocusListener(@Nullable QueryFocusListener focusListener) {
131+
this.focusListener = focusListener;
132+
}
133+
104134
interface QueryListener {
105135
void onQueryChange(CharSequence charSequence);
106136
}

0 commit comments

Comments
 (0)