Is there a way for an app to:
I
You can detect overlays by checking for the MotionEvent.FLAG_WINDOW_IS_OBSCURED flag when the user touches one of your Views.
final View.OnTouchListener filterTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// Filter obscured touches by consuming them.
if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0) {
if (event.getAction() == MotionEvent.ACTION_UP) {
Toast.makeText(v.getContext(), "Overlay detected", Toast.LENGTH_SHORT).show();
}
return true;
}
return false;
}
};
yourButton.setOnTouchListener(filterTouchListener);
Source: Android M's settings app
However, I don't think it's possible to detect which app owns the overlay.