174 lines
5.3 KiB
Java
174 lines
5.3 KiB
Java
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 {
|
|
|
|
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);
|
|
}
|
|
|
|
@Override
|
|
public boolean dispatchTouchEvent(MotionEvent motionEvent) {
|
|
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
|
|
View v = mActivity.getCurrentFocus();
|
|
if(v instanceof DetailedChipView) {
|
|
Rect outRect = new Rect();
|
|
v.getGlobalVisibleRect(outRect);
|
|
if (!outRect.contains((int) motionEvent.getRawX(), (int) motionEvent.getRawY())) {
|
|
((DetailedChipView) v).fadeOut();
|
|
}
|
|
}
|
|
if (v instanceof ChipsInputEditText) {
|
|
Rect outRect = new Rect();
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
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);
|
|
}
|
|
}
|