You can use Tasker in this case. Although I tried so, I still couldn't come up with a non-root method.
Follow these instructions:
Profile: Event → Phone → Phone Ringing:
- Caller: A single Contact → choose your contact
- Priority: Highest
You can add multiple contacts there. It is not relevant here whether your contact is a starred contact or is allowed in Priority mode's list.
The first action stores the status of Do Not Disturb mode. The second action checks whether the device is currently in Alarms only or Total Silence mode. (Remove
2 if you don't want to be disturbed during Total Silence mode). If yes, then when the call from that particular contact comes in, the device will vibrate. You can customize the settings for Vibrate and Wait action. Their job is to vibrate the device then wait for few seconds. The use of Goto causes the task to follow the same vibrate and wait cycle for infinite times.
Profile: You need to setup two contexts. See How to create a profile with multiple context in Tasker? for related help.
- Event → Phone → Phone Idle → Priority: Highest
- State → Tasker → Task Running → Name: select the task you assigned to first profile - the same task meant to vibrate the device
- Task: (Actions): Task → Stop → Task: select the task meant to vibrate the device
This profile would make sure that the vibration stops only when either the incoming call is dismissed by yourself or ends up as a missed call simply because the caller dismissed the call from their end or you didn't pick up the call resulting in timeout.
This profile makes sure that the vibration stops once the call is picked up by you.
Try it. It worked on my unofficial CM13.