/// <summary> /// Gets the alternate resource data from the given filename and put it in a valid order. /// </summary> public static ConfigurationQualifiers Parse(string resourceFile) { var result = new ConfigurationQualifiers(); if (string.IsNullOrEmpty(resourceFile)) { return(result); } var name = GetFileNameWithoutExtension(resourceFile); var index = name.IndexOf('-'); if (index < 0) { // No alternate resource directory return(result); } name = name.Substring(index + 1).ToLower(); var parts = name.Split('-').ToList(); // Detect all allowed qualifiers in order string option; var number = 0; // Mobile Country Code option = parts.FirstOrDefault(x => IsNumberQualifier(x, "mcc", null, out number)); if (option != null) { result.MobileCountryCode = number; parts.Remove(option); } // Mobile Network Carrier option = parts.FirstOrDefault(x => IsNumberQualifier(x, "mnc", null, out number)); if (option != null) { result.MobileNetworkCarrier = number; parts.Remove(option); } // Country code option = parts.FirstOrDefault(x => (x.Length == 2) && CountryCodes.Contains(x)); if (option != null) { result.Language = option; parts.Remove(option); } // Region code option = parts.FirstOrDefault(x => (x.Length == 3) && (x[0] == 'r') && RegionCodes.Contains(x.Substring(1).ToUpper())); if (option != null) { result.Region = option.Substring(1).ToUpper(); parts.Remove(option); } // SmallestWidth option = parts.FirstOrDefault(x => IsNumberQualifier(x, "sw", "dp", out number)); if (option != null) { result.SmallestWidth = number; parts.Remove(option); } // Available Width option = parts.FirstOrDefault(x => IsNumberQualifier(x, "w", "dp", out number)); if (option != null) { result.AvailableWidth = number; parts.Remove(option); } // Available height option = parts.FirstOrDefault(x => IsNumberQualifier(x, "h", "dp", out number)); if (option != null) { result.AvailableHeight = number; parts.Remove(option); } // Screen size option = parts.FirstOrDefault(x => ScreenSizeOptions.Contains(x)); if (option != null) { result.ScreenSize = ScreenSizeOptions.GetValue(option); parts.Remove(option); } // Screen aspect option = parts.FirstOrDefault(x => ScreenAspectOptions.Contains(x)); if (option != null) { result.ScreenAspect = ScreenAspectOptions.GetValue(option); parts.Remove(option); } // Screen orientations option = parts.FirstOrDefault(x => ScreenOrientationOptions.Contains(x)); if (option != null) { result.ScreenOrientation = ScreenOrientationOptions.GetValue(option); parts.Remove(option); } // UI Modes option = parts.FirstOrDefault(x => UIModeOptions.Contains(x)); if (option != null) { result.UIMode = UIModeOptions.GetValue(option); parts.Remove(option); } // Night mode option = parts.FirstOrDefault(x => NightModeOptions.Contains(x)); if (option != null) { result.NightMode = NightModeOptions.GetValue(option); parts.Remove(option); } // Screen pixel density option = parts.FirstOrDefault(x => ScreenPixelDensityOptions.Contains(x)); if (option != null) { result.ScreenPixelDensity = ScreenPixelDensityOptions.GetValue(option); parts.Remove(option); } // Touch screen type option = parts.FirstOrDefault(x => TouchScreenTypeOptions.Contains(x)); if (option != null) { result.TouchScreenType = TouchScreenTypeOptions.GetValue(option); parts.Remove(option); } // Keyboard availability option = parts.FirstOrDefault(x => KeyboardAvailabilityOptions.Contains(x)); if (option != null) { result.KeyboardAvailability = KeyboardAvailabilityOptions.GetValue(option); parts.Remove(option); } // Primary text input method option = parts.FirstOrDefault(x => PrimaryTextInputMethodOptions.Contains(x)); if (option != null) { result.PrimaryTextInputMethod = PrimaryTextInputMethodOptions.GetValue(option); parts.Remove(option); } // Navigation key availability option = parts.FirstOrDefault(x => NavigationKeyAvailabilityOptions.Contains(x)); if (option != null) { result.NavigationKeyAvailability = NavigationKeyAvailabilityOptions.GetValue(option); parts.Remove(option); } // Primary non-touch navigation method option = parts.FirstOrDefault(x => PrimaryNonTouchNavigationMethodOptions.Contains(x)); if (option != null) { result.PrimaryNonTouchNavigationMethod = PrimaryNonTouchNavigationMethodOptions.GetValue(option); parts.Remove(option); } // Platform version option = parts.FirstOrDefault(x => IsNumberQualifier(x, "v", null, out number)); if (option != null) { result.PlatformVersion = number; parts.Remove(option); } return(result); }