Contact apps usually allow the user to select the display options he/she likes.
Contact apps are different between different devices, but the options are usually:
- Display all contacts (ignoring GROUP_VISIBLE)
- Display visible groups only (usually referred to as "custom" allowing the user the make certain groups visible or not)
- Display a specific group.
By making your contacts in hidden groups you'll be hiding them for some of your users, but not all, also, users could still select a checkbox to make your contact groups visible.
What most caller-ID apps do, is register for incoming-call events, and display a popup with the caller-ID info on top of the stock incoming call screen.
You can use WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
to make a view always-on-top so it's above the incoming call screen (like Facebook chatheads).
See this: How to create always-top fullscreen overlay activity in Android
just be sure to make your view a small popup and not full screen, so the user will be able to answer the call.