extract DelegateWindowCallback superclass for MyWindowCallback
This commit is contained in:
@@ -41,9 +41,6 @@ import com.pchmn.materialchips.views.ScrollViewMaxHeight;
|
|||||||
public class ChipsInput extends ScrollViewMaxHeight {
|
public class ChipsInput extends ScrollViewMaxHeight {
|
||||||
// context
|
// context
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
// xml element
|
|
||||||
private RecyclerView mRecyclerView;
|
|
||||||
// adapter
|
|
||||||
private ChipsAdapter mChipsAdapter;
|
private ChipsAdapter mChipsAdapter;
|
||||||
// attributes
|
// attributes
|
||||||
private static final int NONE = -1;
|
private static final int NONE = -1;
|
||||||
@@ -91,7 +88,7 @@ public class ChipsInput extends ScrollViewMaxHeight {
|
|||||||
// inflate filterableListLayout
|
// inflate filterableListLayout
|
||||||
View rootView = inflate(getContext(), R.layout.chips_input, this);
|
View rootView = inflate(getContext(), R.layout.chips_input, this);
|
||||||
|
|
||||||
mRecyclerView = rootView.findViewById(R.id.chips_recycler);
|
RecyclerView recyclerView = rootView.findViewById(R.id.chips_recycler);
|
||||||
|
|
||||||
initEditText();
|
initEditText();
|
||||||
|
|
||||||
@@ -132,13 +129,13 @@ public class ChipsInput extends ScrollViewMaxHeight {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// adapter
|
// adapter
|
||||||
mChipsAdapter = new ChipsAdapter(mContext, this, mEditText, mRecyclerView);
|
mChipsAdapter = new ChipsAdapter(mContext, this, mEditText, recyclerView);
|
||||||
ChipsLayoutManager chipsLayoutManager = ChipsLayoutManager.newBuilder(mContext)
|
ChipsLayoutManager chipsLayoutManager = ChipsLayoutManager.newBuilder(mContext)
|
||||||
.setOrientation(ChipsLayoutManager.HORIZONTAL)
|
.setOrientation(ChipsLayoutManager.HORIZONTAL)
|
||||||
.build();
|
.build();
|
||||||
mRecyclerView.setLayoutManager(chipsLayoutManager);
|
recyclerView.setLayoutManager(chipsLayoutManager);
|
||||||
mRecyclerView.setNestedScrollingEnabled(false);
|
recyclerView.setNestedScrollingEnabled(false);
|
||||||
mRecyclerView.setAdapter(mChipsAdapter);
|
recyclerView.setAdapter(mChipsAdapter);
|
||||||
|
|
||||||
// set window callback
|
// set window callback
|
||||||
// will hide DetailedOpenView and hide keyboard on touch outside
|
// will hide DetailedOpenView and hide keyboard on touch outside
|
||||||
|
|||||||
147
extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/DelegateWindowCallback.java
vendored
Normal file
147
extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/DelegateWindowCallback.java
vendored
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
package com.pchmn.materialchips.util;
|
||||||
|
|
||||||
|
|
||||||
|
import android.os.Build;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.annotation.RequiresApi;
|
||||||
|
import android.view.ActionMode;
|
||||||
|
import android.view.KeyEvent;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.MotionEvent;
|
||||||
|
import android.view.SearchEvent;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.Window;
|
||||||
|
import android.view.Window.Callback;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class DelegateWindowCallback implements Window.Callback {
|
||||||
|
private Window.Callback delegateCallback;
|
||||||
|
|
||||||
|
public DelegateWindowCallback(Callback delegateCallback) {
|
||||||
|
this.delegateCallback = delegateCallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchKeyEvent(KeyEvent keyEvent) {
|
||||||
|
return delegateCallback.dispatchKeyEvent(keyEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchKeyShortcutEvent(KeyEvent keyEvent) {
|
||||||
|
return delegateCallback.dispatchKeyShortcutEvent(keyEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchTouchEvent(MotionEvent motionEvent) {
|
||||||
|
return delegateCallback.dispatchTouchEvent(motionEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchTrackballEvent(MotionEvent motionEvent) {
|
||||||
|
return delegateCallback.dispatchTrackballEvent(motionEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchGenericMotionEvent(MotionEvent motionEvent) {
|
||||||
|
return delegateCallback.dispatchGenericMotionEvent(motionEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
|
||||||
|
return delegateCallback.dispatchPopulateAccessibilityEvent(accessibilityEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public View onCreatePanelView(int i) {
|
||||||
|
return delegateCallback.onCreatePanelView(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreatePanelMenu(int i, Menu menu) {
|
||||||
|
return delegateCallback.onCreatePanelMenu(i, menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPreparePanel(int i, View view, Menu menu) {
|
||||||
|
return delegateCallback.onPreparePanel(i, view, menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onMenuOpened(int i, Menu menu) {
|
||||||
|
return delegateCallback.onMenuOpened(i, menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onMenuItemSelected(int i, MenuItem menuItem) {
|
||||||
|
return delegateCallback.onMenuItemSelected(i, menuItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWindowAttributesChanged(WindowManager.LayoutParams layoutParams) {
|
||||||
|
delegateCallback.onWindowAttributesChanged(layoutParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onContentChanged() {
|
||||||
|
delegateCallback.onContentChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onWindowFocusChanged(boolean b) {
|
||||||
|
delegateCallback.onWindowFocusChanged(b);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttachedToWindow() {
|
||||||
|
delegateCallback.onAttachedToWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDetachedFromWindow() {
|
||||||
|
delegateCallback.onDetachedFromWindow();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPanelClosed(int i, Menu menu) {
|
||||||
|
delegateCallback.onPanelClosed(i, menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onSearchRequested() {
|
||||||
|
return delegateCallback.onSearchRequested();
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||||
|
@Override
|
||||||
|
public boolean onSearchRequested(SearchEvent searchEvent) {
|
||||||
|
return delegateCallback.onSearchRequested(searchEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {
|
||||||
|
return delegateCallback.onWindowStartingActionMode(callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequiresApi(api = Build.VERSION_CODES.M)
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public ActionMode onWindowStartingActionMode(ActionMode.Callback callback, int i) {
|
||||||
|
return delegateCallback.onWindowStartingActionMode(callback, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActionModeStarted(ActionMode actionMode) {
|
||||||
|
delegateCallback.onActionModeStarted(actionMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onActionModeFinished(ActionMode actionMode) {
|
||||||
|
delegateCallback.onActionModeFinished(actionMode);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,49 +3,26 @@ package com.pchmn.materialchips.util;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.os.Build;
|
|
||||||
import android.support.annotation.Nullable;
|
|
||||||
import android.support.annotation.RequiresApi;
|
|
||||||
import android.view.ActionMode;
|
|
||||||
import android.view.KeyEvent;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.SearchEvent;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.view.accessibility.AccessibilityEvent;
|
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.EditText;
|
|
||||||
|
|
||||||
import com.pchmn.materialchips.views.ChipsInputEditText;
|
import com.pchmn.materialchips.views.ChipsInputEditText;
|
||||||
import com.pchmn.materialchips.views.DetailedChipView;
|
import com.pchmn.materialchips.views.DetailedChipView;
|
||||||
|
|
||||||
public class MyWindowCallback implements Window.Callback {
|
public class MyWindowCallback extends DelegateWindowCallback {
|
||||||
|
private Activity activity;
|
||||||
|
|
||||||
private Window.Callback mLocalCallback;
|
public MyWindowCallback(Window.Callback delegateCallback, Activity activity) {
|
||||||
private Activity mActivity;
|
super(delegateCallback);
|
||||||
|
this.activity = activity;
|
||||||
public MyWindowCallback(Window.Callback localCallback, Activity activity) {
|
|
||||||
mLocalCallback = localCallback;
|
|
||||||
mActivity = activity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean dispatchKeyEvent(KeyEvent keyEvent) {
|
|
||||||
return mLocalCallback.dispatchKeyEvent(keyEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean dispatchKeyShortcutEvent(KeyEvent keyEvent) {
|
|
||||||
return mLocalCallback.dispatchKeyShortcutEvent(keyEvent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean dispatchTouchEvent(MotionEvent motionEvent) {
|
public boolean dispatchTouchEvent(MotionEvent motionEvent) {
|
||||||
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
|
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
|
||||||
View v = mActivity.getCurrentFocus();
|
View v = activity.getCurrentFocus();
|
||||||
if(v instanceof DetailedChipView) {
|
if(v instanceof DetailedChipView) {
|
||||||
Rect outRect = new Rect();
|
Rect outRect = new Rect();
|
||||||
v.getGlobalVisibleRect(outRect);
|
v.getGlobalVisibleRect(outRect);
|
||||||
@@ -58,116 +35,17 @@ public class MyWindowCallback implements Window.Callback {
|
|||||||
v.getGlobalVisibleRect(outRect);
|
v.getGlobalVisibleRect(outRect);
|
||||||
if (!outRect.contains((int) motionEvent.getRawX(), (int) motionEvent.getRawY())
|
if (!outRect.contains((int) motionEvent.getRawX(), (int) motionEvent.getRawY())
|
||||||
&& !((ChipsInputEditText) v).isFilterableListVisible()) {
|
&& !((ChipsInputEditText) v).isFilterableListVisible()) {
|
||||||
InputMethodManager imm = (InputMethodManager) mActivity.getSystemService(Context.INPUT_METHOD_SERVICE);
|
hideKeyboard(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.dispatchTouchEvent(motionEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void hideKeyboard(View v) {
|
||||||
|
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
if (imm != null) {
|
||||||
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
|
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return mLocalCallback.dispatchTouchEvent(motionEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean dispatchTrackballEvent(MotionEvent motionEvent) {
|
|
||||||
return mLocalCallback.dispatchTrackballEvent(motionEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean dispatchGenericMotionEvent(MotionEvent motionEvent) {
|
|
||||||
return mLocalCallback.dispatchGenericMotionEvent(motionEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
|
|
||||||
return mLocalCallback.dispatchPopulateAccessibilityEvent(accessibilityEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public View onCreatePanelView(int i) {
|
|
||||||
return mLocalCallback.onCreatePanelView(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCreatePanelMenu(int i, Menu menu) {
|
|
||||||
return mLocalCallback.onCreatePanelMenu(i, menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPreparePanel(int i, View view, Menu menu) {
|
|
||||||
return mLocalCallback.onPreparePanel(i, view, menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onMenuOpened(int i, Menu menu) {
|
|
||||||
return mLocalCallback.onMenuOpened(i, menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onMenuItemSelected(int i, MenuItem menuItem) {
|
|
||||||
return mLocalCallback.onMenuItemSelected(i, menuItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onWindowAttributesChanged(WindowManager.LayoutParams layoutParams) {
|
|
||||||
mLocalCallback.onWindowAttributesChanged(layoutParams);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onContentChanged() {
|
|
||||||
mLocalCallback.onContentChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onWindowFocusChanged(boolean b) {
|
|
||||||
mLocalCallback.onWindowFocusChanged(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttachedToWindow() {
|
|
||||||
mLocalCallback.onAttachedToWindow();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDetachedFromWindow() {
|
|
||||||
mLocalCallback.onDetachedFromWindow();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPanelClosed(int i, Menu menu) {
|
|
||||||
mLocalCallback.onPanelClosed(i, menu);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onSearchRequested() {
|
|
||||||
return mLocalCallback.onSearchRequested();
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
|
||||||
@Override
|
|
||||||
public boolean onSearchRequested(SearchEvent searchEvent) {
|
|
||||||
return mLocalCallback.onSearchRequested(searchEvent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {
|
|
||||||
return mLocalCallback.onWindowStartingActionMode(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public ActionMode onWindowStartingActionMode(ActionMode.Callback callback, int i) {
|
|
||||||
return mLocalCallback.onWindowStartingActionMode(callback, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActionModeStarted(ActionMode actionMode) {
|
|
||||||
mLocalCallback.onActionModeStarted(actionMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActionModeFinished(ActionMode actionMode) {
|
|
||||||
mLocalCallback.onActionModeFinished(actionMode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user