private static void AddGRMIndicationForIncompatibleApp(
            AppIconModel appIcon,
            MainWindow ParentWindow,
            GrmRuleSet passedRuleSet)
        {
            ParentWindow.Dispatcher.Invoke((Delegate)(() =>
            {
                switch (EnumHelper.Parse <MessageType>(passedRuleSet.MessageWindow.MessageType, MessageType.None))
                {
                case MessageType.None:
                    appIcon.AppIncompatType = AppIncompatType.Error;
                    GrmHandler.sDictAppRuleSet[ParentWindow.mVmName].Remove(appIcon.PackageName);
                    break;

                case MessageType.Info:
                    appIcon.AppIncompatType = AppIncompatType.Info;
                    GrmHandler.sDictAppRuleSet[ParentWindow.mVmName][appIcon.PackageName] = passedRuleSet;
                    break;

                case MessageType.Error:
                    appIcon.AppIncompatType = AppIncompatType.Error;
                    GrmHandler.sDictAppRuleSet[ParentWindow.mVmName][appIcon.PackageName] = passedRuleSet;
                    break;
                }
            }));
        }
 internal static void RefreshGrmIndication(string package, string vmName = "Android")
 {
     try
     {
         List <AppRequirement> requirements = AppRequirementsParser.Instance.Requirements;
         if (requirements == null)
         {
             return;
         }
         if (!GrmHandler.sDictAppRuleSet.ContainsKey(vmName))
         {
             GrmHandler.sDictAppRuleSet[vmName] = new Dictionary <string, GrmRuleSet>();
         }
         AppIconModel appIcon = BlueStacksUIUtils.DictWindows[vmName].mWelcomeTab.mHomeAppManager.GetAppIcon(package);
         if (appIcon == null)
         {
             return;
         }
         if (appIcon.AppIncompatType != AppIncompatType.None && !requirements.Any <AppRequirement>((Func <AppRequirement, bool>)(_ => string.Equals(_.PackageName, package, StringComparison.OrdinalIgnoreCase))))
         {
             GrmHandler.RemoveAppCompatError(appIcon, BlueStacksUIUtils.DictWindows[vmName]);
         }
         AppRequirement appRequirement = requirements.Where <AppRequirement>((Func <AppRequirement, bool>)(_ => string.Compare(_.PackageName, package, StringComparison.OrdinalIgnoreCase) == 0)).FirstOrDefault <AppRequirement>() ?? requirements.Where <AppRequirement>((Func <AppRequirement, bool>)(_ =>
         {
             if (!_.PackageName.EndsWith("*", StringComparison.InvariantCulture))
             {
                 return(false);
             }
             return(package.StartsWith(_.PackageName.Trim('*'), StringComparison.InvariantCulture));
         })).FirstOrDefault <AppRequirement>();
         if (appRequirement == null)
         {
             return;
         }
         GrmRuleSet requirement = appRequirement.EvaluateRequirement(package, vmName);
         if (requirement != null)
         {
             GrmHandler.AddGRMIndicationForIncompatibleApp(appIcon, BlueStacksUIUtils.DictWindows[vmName], requirement);
         }
         else
         {
             GrmHandler.RemoveAppCompatError(appIcon, BlueStacksUIUtils.DictWindows[vmName]);
         }
     }
     catch (Exception ex)
     {
         Logger.Error("Exception in RefreshGrmIndication. Exception: " + ex?.ToString());
     }
 }