This mini project shows how to use permission, specially how to request Runtime and Special permissions into two type on-startup (MVP product) and on-demand (Best practice & preferred way) with following DRY principle.
https://developer.android.com/guide/topics/permissions/overview