<NME> PermissionRequestContext.java
<BEF> package cgeo.geocaching.permission;

public enum PermissionRequestContext {

    MainActivityOnCreate(1111),
    MainActivityOnResume(1112),
    TrackableActivity(2222),
    CacheDetailActivity(3333),
    CacheListActivity(4444);

    private final int requestCode;

    PermissionRequestContext(int requestCode) {
        this.requestCode = requestCode;
    }

    public int getRequestCode() {
        return requestCode;
    }
}

    public static PermissionRequestContext fromRequestCode(final int requestCode) {
        for (final PermissionRequestContext perm : PermissionRequestContext.values()) {
            if (perm.requestCode == requestCode) {
                return perm;
            }
        }

        throw new IndexOutOfBoundsException("Unknown request code " + requestCode);
    }
}

<MSG> Storage permissions WIP

<DFF> @@ -1,20 +1,39 @@
 package cgeo.geocaching.permission;
 
+import cgeo.geocaching.R;
+
 public enum PermissionRequestContext {
 
-    MainActivityOnCreate(1111),
-    MainActivityOnResume(1112),
-    TrackableActivity(2222),
-    CacheDetailActivity(3333),
-    CacheListActivity(4444);
+    MainActivityOnCreate(1111, R.string.location_permission_request_explanation),
+    MainActivityOnResume(1112, R.string.location_permission_request_explanation),
+    MainActivityStorage(1113, R.string.storage_permission_request_explanation),
+    TrackableActivity(2222, R.string.location_permission_request_explanation),
+    CacheDetailActivity(3333, R.string.location_permission_request_explanation),
+    CacheListActivity(4444, R.string.location_permission_request_explanation);
 
     private final int requestCode;
+    private final int askAgainResource;
 
-    PermissionRequestContext(int requestCode) {
+    PermissionRequestContext(final int requestCode, final int askAgainResource) {
         this.requestCode = requestCode;
+        this.askAgainResource = askAgainResource;
     }
 
     public int getRequestCode() {
         return requestCode;
     }
+
+    public int getAskAgainResource() {
+        return askAgainResource;
+    }
+
+    public static PermissionRequestContext fromRequestCode(final int requestCode) {
+        for (final PermissionRequestContext perm : PermissionRequestContext.values()) {
+            if (perm.requestCode == requestCode) {
+                return perm;
+            }
+        }
+
+        throw new IndexOutOfBoundsException("Unknown request code " + requestCode);
+    }
 }

Storage permissions WIP