extract DelegateWindowCallback superclass for MyWindowCallback

This commit is contained in:
Vincent Breitmoser
2018-07-03 10:47:42 +02:00
parent 71c3b71e35
commit 355a4eaa0f
3 changed files with 165 additions and 143 deletions

View File

@@ -41,9 +41,6 @@ import com.pchmn.materialchips.views.ScrollViewMaxHeight;
public class ChipsInput extends ScrollViewMaxHeight {
// context
private Context mContext;
// xml element
private RecyclerView mRecyclerView;
// adapter
private ChipsAdapter mChipsAdapter;
// attributes
private static final int NONE = -1;
@@ -91,7 +88,7 @@ public class ChipsInput extends ScrollViewMaxHeight {
// inflate filterableListLayout
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();
@@ -132,13 +129,13 @@ public class ChipsInput extends ScrollViewMaxHeight {
}
// adapter
mChipsAdapter = new ChipsAdapter(mContext, this, mEditText, mRecyclerView);
mChipsAdapter = new ChipsAdapter(mContext, this, mEditText, recyclerView);
ChipsLayoutManager chipsLayoutManager = ChipsLayoutManager.newBuilder(mContext)
.setOrientation(ChipsLayoutManager.HORIZONTAL)
.build();
mRecyclerView.setLayoutManager(chipsLayoutManager);
mRecyclerView.setNestedScrollingEnabled(false);
mRecyclerView.setAdapter(mChipsAdapter);
recyclerView.setLayoutManager(chipsLayoutManager);
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setAdapter(mChipsAdapter);
// set window callback
// will hide DetailedOpenView and hide keyboard on touch outside

View 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);
}
}

View File

@@ -3,49 +3,26 @@ package com.pchmn.materialchips.util;
import android.app.Activity;
import android.content.Context;
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.SearchEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import com.pchmn.materialchips.views.ChipsInputEditText;
import com.pchmn.materialchips.views.DetailedChipView;
public class MyWindowCallback implements Window.Callback {
public class MyWindowCallback extends DelegateWindowCallback {
private Activity activity;
private Window.Callback mLocalCallback;
private Activity mActivity;
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);
public MyWindowCallback(Window.Callback delegateCallback, Activity activity) {
super(delegateCallback);
this.activity = activity;
}
@Override
public boolean dispatchTouchEvent(MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
View v = mActivity.getCurrentFocus();
View v = activity.getCurrentFocus();
if(v instanceof DetailedChipView) {
Rect outRect = new Rect();
v.getGlobalVisibleRect(outRect);
@@ -58,116 +35,17 @@ public class MyWindowCallback implements Window.Callback {
v.getGlobalVisibleRect(outRect);
if (!outRect.contains((int) motionEvent.getRawX(), (int) motionEvent.getRawY())
&& !((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);
}
}
}
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);
}
}