From 355a4eaa0fb37c691497c64bc8e233bdf6d4d9eb Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Tue, 3 Jul 2018 10:47:42 +0200 Subject: [PATCH] extract DelegateWindowCallback superclass for MyWindowCallback --- .../com/pchmn/materialchips/ChipsInput.java | 13 +- .../util/DelegateWindowCallback.java | 147 +++++++++++++++++ .../materialchips/util/MyWindowCallback.java | 148 ++---------------- 3 files changed, 165 insertions(+), 143 deletions(-) create mode 100644 extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/DelegateWindowCallback.java diff --git a/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/ChipsInput.java b/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/ChipsInput.java index 8147b1194..cfa962a44 100644 --- a/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/ChipsInput.java +++ b/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/ChipsInput.java @@ -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 diff --git a/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/DelegateWindowCallback.java b/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/DelegateWindowCallback.java new file mode 100644 index 000000000..3dad594c3 --- /dev/null +++ b/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/DelegateWindowCallback.java @@ -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); + } + +} diff --git a/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/MyWindowCallback.java b/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/MyWindowCallback.java index 924350801..b6e819c6e 100644 --- a/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/MyWindowCallback.java +++ b/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/MyWindowCallback.java @@ -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); - imm.hideSoftInputFromWindow(v.getWindowToken(), 0); + hideKeyboard(v); } } } - return mLocalCallback.dispatchTouchEvent(motionEvent); + return super.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); + private void hideKeyboard(View v) { + InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); + if (imm != null) { + imm.hideSoftInputFromWindow(v.getWindowToken(), 0); + } } }