Release 17: Allow more flexibility with icon packs

This allows Substratum to configure how much time delay to take account
for when initiating a systemwide configuration change
diff --git a/app/build.gradle b/app/build.gradle
index 954693a..94c16f6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,8 +20,8 @@
         applicationId "masquerade.substratum"
         minSdkVersion 21
         targetSdkVersion 23
-        versionCode 16
-        versionName "sixteen"
+        versionCode 17
+        versionName "seventeen"
     }
 
     buildTypes {
diff --git a/app/src/main/java/masquerade/substratum/util/Helper.java b/app/src/main/java/masquerade/substratum/util/Helper.java
index 0b7e087..45b2326 100644
--- a/app/src/main/java/masquerade/substratum/util/Helper.java
+++ b/app/src/main/java/masquerade/substratum/util/Helper.java
@@ -3,6 +3,7 @@
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Handler;
 import android.util.Log;
 
 public class Helper extends BroadcastReceiver {
@@ -31,6 +32,9 @@
                     intent.getBooleanExtra("restart_systemui", false));
         } else if (intent.getStringArrayListExtra("icon-handler") != null) {
             String icon_pack_name = intent.getStringArrayListExtra("icon-handler").get(0);
+            String main_delay = intent.getStringArrayListExtra("icon-handler").get(2);
+            String delay_one = intent.getStringArrayListExtra("icon-handler").get(3);
+            String delay_two = intent.getStringArrayListExtra("icon-handler").get(4);
             if (intent.getStringArrayListExtra("icon-handler").get(1).contains("pm") ||
                     intent.getStringArrayListExtra("icon-handler").get(1).contains("om") ||
                     intent.getStringArrayListExtra("icon-handler").get(1).contains("overlay")) {
@@ -38,7 +42,18 @@
                         intent.getStringArrayListExtra("icon-handler").get(1) + "\"");
                 Root.runCommand(intent.getStringArrayListExtra("icon-handler").get(1));
             }
-            new IconPackApplicator().apply(context, icon_pack_name);
+            final Context mContext = context;
+            final String icon_pack = icon_pack_name;
+            final String delay_one_time = delay_one;
+            final String delay_two_time = delay_two;
+            final Handler handle = new Handler();
+            handle.postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    new IconPackApplicator().apply(
+                            mContext, icon_pack, delay_one_time, delay_two_time);
+                }
+            }, Integer.parseInt(main_delay));
         } else if (intent.getStringExtra("om-commands") != null) {
             if (intent.getStringExtra("om-commands").contains("pm") ||
                     intent.getStringExtra("om-commands").contains("om") ||
diff --git a/app/src/main/java/masquerade/substratum/util/IconPackApplicator.java b/app/src/main/java/masquerade/substratum/util/IconPackApplicator.java
index 5b843ea..2c2a077 100644
--- a/app/src/main/java/masquerade/substratum/util/IconPackApplicator.java
+++ b/app/src/main/java/masquerade/substratum/util/IconPackApplicator.java
@@ -15,14 +15,17 @@
     private Context mContext;
     private String iconPackName;
     private String toast_text = null;
+    private int delayOne, delayTwo;
 
     private static void grantPermission(final String packager, final String permission) {
         Root.runCommand("pm grant " + packager + " " + permission);
     }
 
-    void apply(Context mContext, String iconPackName) {
+    void apply(Context mContext, String iconPackName, String delayOne, String delayTwo) {
         this.mContext = mContext;
         this.iconPackName = iconPackName;
+        this.delayOne = Integer.parseInt(delayOne);
+        this.delayTwo = Integer.parseInt(delayTwo);
         iconInjector();
     }
 
@@ -111,12 +114,12 @@
                                     // Suppress warning
                                 }
                             }
-                        }, 1000); // 2 second delay for Home refresh
+                        }, delayTwo); // 2 second delay for Home refresh
                     } catch (Exception e) {
                         // Suppress warning
                     }
                 }
-            }, 1000); // 1 second delay for Home refresh
+            }, delayOne); // 1 second delay for Home refresh
         } catch (Exception e) {
             e.printStackTrace();
         }