open-keychain/extern/MaterialChipsInput/src/main/java/com/pchmn/materialchips/util/MyWindowCallback.java
2018-07-04 13:59:21 +02:00

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