public static void UpdateManifest() { if (!GoogleMobileAdSettings.Instance.KeepManifestClean) { return; } SA.Manifest.Manager.Refresh(); SA.Manifest.Template Manifest = SA.Manifest.Manager.GetManifest(); SA.Manifest.ApplicationTemplate application = Manifest.ApplicationTemplate; SA.Manifest.ActivityTemplate launcherActivity = application.GetLauncherActivity(); SA.Manifest.PropertyTemplate targetSdk = Manifest.GetOrCreatePropertyWithTag("uses-sdk"); targetSdk.SetValue("android:targetSdkVersion", "26"); SA.Manifest.ActivityTemplate AdActivity = application.GetOrCreateActivityWithName("com.google.android.gms.ads.AdActivity"); AdActivity.SetValue("android:configChanges", "keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"); AdActivity.SetValue("android:theme", "@android:style/Theme.Translucent"); if (launcherActivity != null) { SA.Manifest.PropertyTemplate ForwardNativeEventsToDalvik = launcherActivity.GetOrCreatePropertyWithName("meta-data", "unityplayer.ForwardNativeEventsToDalvik"); ForwardNativeEventsToDalvik.SetValue("android:value", "true"); } SA.Manifest.PropertyTemplate games_version = application.GetOrCreatePropertyWithName("meta-data", "com.google.android.gms.version"); #if UNITY_4_6 || UNITY_4_7 games_version.SetValue("android:value", GoogleMobileAdSettings.PLAY_SERVICE_VERSION_NUMBER); #else games_version.SetValue("android:value", "@integer/google_play_services_version"); #endif SA.Manifest.Manager.SaveManifest(); }
private void SelectPermission(object data) { PropertyTemplate newPermission = new PropertyTemplate("uses-permission"); newPermission.SetValue("android:name", data.ToString()); Manager.GetManifest().AddPermission(newPermission); }
private void OnAddPermissionClick(string permission) { PropertyTemplate property = new PropertyTemplate("uses-permission"); property.SetValue("android:name", permission); Manager.GetManifest().AddPermission(property); }
public void AddPermission(string name) { if (!HasPermission(name)) { PropertyTemplate uses_permission = new PropertyTemplate("uses-permission"); uses_permission.Name = name; AddPermission(uses_permission); } }
public void AddProperty(string tag, PropertyTemplate property) { if (!_properties.ContainsKey(tag)) { List <PropertyTemplate> list = new List <PropertyTemplate>(); _properties.Add(tag, list); } _properties [tag].Add(property); }
public PropertyTemplate GetOrCreatePropertyWithTag(string tag) { PropertyTemplate p = GetPropertyWithTag(tag); if (p == null) { p = new PropertyTemplate(tag); AddProperty(p); } return(p); }
public PropertyTemplate GetOrCreatePropertyWithName(string tag, string name) { PropertyTemplate p = GetPropertyWithName(tag, name); if (p == null) { p = new PropertyTemplate(tag); p.SetValue("android:name", name); AddProperty(p); } return(p); }
public string GetIntentFilterName(PropertyTemplate intent) { List <PropertyTemplate> actions = intent.GetPropertiesWithTag("action"); if (actions.Count > 0) { return(actions[0].GetValue("android:name")); } else { return(string.Empty); } }
public static PropertyTemplate GetLauncherPropertyTemplate() { PropertyTemplate launcher = new PropertyTemplate("intent-filter"); PropertyTemplate prop = new PropertyTemplate("action"); prop.SetValue("android:name", "android.intent.action.MAIN"); launcher.AddProperty("action", prop); prop = new PropertyTemplate("category"); prop.SetValue("android:name", "android.intent.category.LAUNCHER"); launcher.AddProperty("category", prop); return(launcher); }
public PropertyTemplate GetOrCreateIntentFilterWithName(string name) { PropertyTemplate filter = GetIntentFilterWithName(name); if (filter == null) { filter = new PropertyTemplate("intent-filter"); PropertyTemplate action = new PropertyTemplate("action"); action.SetValue("android:name", name); filter.AddProperty(action); AddProperty(filter); } return(filter); }
public override void ToXmlElement(XmlDocument doc, XmlElement parent) { AddAttributesToXml(doc, parent, this); PropertyTemplate launcher = null; if (_isLauncher) { launcher = GetLauncherPropertyTemplate(); AddProperty(launcher.Tag, launcher); } AddPropertiesToXml(doc, parent, this); if (_isLauncher) { _properties["intent-filter"].Remove(launcher); } }
public bool IsLauncherProperty(PropertyTemplate property) { if (property.Tag.Equals("intent-filter")) { foreach (PropertyTemplate p in property.Properties["category"]) { if (p.Values.ContainsKey("android:name")) { if (p.Values["android:name"].Equals("android.intent.category.LAUNCHER")) { return(true); } } } } return(false); }
private static PropertyTemplate ParseProperty(XmlNode node) { PropertyTemplate property = new PropertyTemplate(node.Name); //Get Values foreach (XmlAttribute attr in node.Attributes) { property.SetValue(attr.Name, attr.Value); } //Get Properties foreach (XmlNode n in node.ChildNodes) { if (!n.Name.Equals("#comment")) { property.AddProperty(n.Name, ParseProperty(n)); } } return(property); }
public void RemoveProperty(PropertyTemplate property) { _properties [property.Tag].Remove(property); }
public void RemovePermission(PropertyTemplate permission) { _permissions.Remove(permission); }
public void AddProperty(PropertyTemplate property) { AddProperty(property.Tag, property); }
public void AddPermission(PropertyTemplate permission) { _permissions.Add(permission); }
private static void ReadManifest(string manifestPath) { #if !(UNITY_WP8 || UNITY_METRO) //Read XML file _Template = new Template(); XmlDocument doc = new XmlDocument(); doc.Load(Application.dataPath + manifestPath); XmlNode rootNode = doc.DocumentElement; foreach (XmlAttribute attr in rootNode.Attributes) { _Template.SetValue(attr.Name, attr.Value); } foreach (XmlNode childNode in rootNode.ChildNodes) { if (!childNode.Name.Equals("application") && !childNode.Name.Equals("uses-permission") && !childNode.Name.Equals("#comment")) { _Template.AddProperty(childNode.Name, ParseProperty(childNode)); } } XmlNode applicationNode = null; foreach (XmlNode childNode in rootNode.ChildNodes) { if (childNode.Name.Equals("application")) { applicationNode = childNode; break; } } foreach (XmlAttribute attr in applicationNode.Attributes) { _Template.ApplicationTemplate.SetValue(attr.Name, attr.Value); } foreach (XmlNode childNode in applicationNode.ChildNodes) { if (!childNode.Name.Equals("#comment") && !childNode.Name.Equals("activity")) { _Template.ApplicationTemplate.AddProperty(childNode.Name, ParseProperty(childNode)); } } foreach (XmlNode childNode in applicationNode.ChildNodes) { if (childNode.Name.Equals("activity") && !childNode.Name.Equals("#comment")) { string activityName = ""; if (childNode.Attributes["android:name"] != null) { activityName = childNode.Attributes["android:name"].Value; } else { Debug.LogWarning("Android Manifest contains activity tag without android:name attribute."); } XmlNode launcher = null; bool isLauncher = false; foreach (XmlNode actNode in childNode.ChildNodes) { if (actNode.Name.Equals("intent-filter")) { foreach (XmlNode intentNode in actNode.ChildNodes) { if (intentNode.Name.Equals("category")) { if (intentNode.Attributes["android:name"].Value.Equals("android.intent.category.LAUNCHER")) { isLauncher = true; launcher = actNode; } } } } } ActivityTemplate activity = new ActivityTemplate(isLauncher, activityName); foreach (XmlAttribute attr in childNode.Attributes) { activity.SetValue(attr.Name, attr.Value); } foreach (XmlNode actNode in childNode.ChildNodes) { if (!actNode.Name.Equals("#comment")) { if (actNode != launcher) { activity.AddProperty(actNode.Name, ParseProperty(actNode)); } } } _Template.ApplicationTemplate.AddActivity(activity); } } //Load Manifest Permissions foreach (XmlNode node in rootNode.ChildNodes) { if (node.Name.Equals("uses-permission")) { PropertyTemplate permission = new PropertyTemplate("uses-permission"); permission.SetValue("android:name", node.Attributes["android:name"].Value); _Template.AddPermission(permission); } } #endif }
public static void UpdateManifest() { if (!SocialPlatfromSettings.Instance.KeepManifestClean) { return; } SA.Manifest.Manager.Refresh(); SA.Manifest.Template Manifest = SA.Manifest.Manager.GetManifest(); SA.Manifest.ApplicationTemplate application = Manifest.ApplicationTemplate; SA.Manifest.ActivityTemplate launcherActivity = application.GetLauncherActivity(); SA.Manifest.ActivityTemplate AndroidNativeProxy = application.GetOrCreateActivityWithName("com.androidnative.AndroidNativeProxy"); AndroidNativeProxy.SetValue("android:launchMode", "singleTask"); AndroidNativeProxy.SetValue("android:label", "@string/app_name"); AndroidNativeProxy.SetValue("android:configChanges", "fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"); AndroidNativeProxy.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar"); // Remove VIEW intent filter from AndroidNativeProxy activity if (AndroidNativeProxy != null) { SA.Manifest.PropertyTemplate intent_filter = AndroidNativeProxy.GetOrCreateIntentFilterWithName("android.intent.action.VIEW"); AndroidNativeProxy.RemoveProperty(intent_filter); } SA.Manifest.ActivityTemplate SocialProxyActivity = application.GetOrCreateActivityWithName("com.androidnative.features.social.common.SocialProxyActivity"); SocialProxyActivity.SetValue("android:launchMode", "singleTask"); SocialProxyActivity.SetValue("android:label", "@string/app_name"); SocialProxyActivity.SetValue("android:configChanges", "fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"); SocialProxyActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar"); if (launcherActivity.Name == "com.androidnative.AndroidNativeBridge") { launcherActivity.SetName("com.unity3d.player.UnityPlayerNativeActivity"); } //////////////////////// //TwitterAPI //////////////////////// foreach (KeyValuePair <int, SA.Manifest.ActivityTemplate> entry in application.Activities) { //TODO get intents array SA.Manifest.ActivityTemplate act = entry.Value; SA.Manifest.PropertyTemplate intent = act.GetIntentFilterWithName("android.intent.action.VIEW"); if (intent != null) { SA.Manifest.PropertyTemplate data = intent.GetOrCreatePropertyWithTag("data"); if (data.GetValue("android:scheme") == "oauth") { act.RemoveProperty(intent); } } } if (SocialPlatfromSettings.Instance.TwitterAPI) { if (SocialProxyActivity != null) { SA.Manifest.PropertyTemplate intent_filter = SocialProxyActivity.GetOrCreateIntentFilterWithName("android.intent.action.VIEW"); intent_filter.GetOrCreatePropertyWithName("category", "android.intent.category.DEFAULT"); intent_filter.GetOrCreatePropertyWithName("category", "android.intent.category.BROWSABLE"); SA.Manifest.PropertyTemplate data = intent_filter.GetOrCreatePropertyWithTag("data"); data.SetValue("android:scheme", "oauth"); data.SetValue("android:host", PlayerSettings.bundleIdentifier); } } else { if (SocialProxyActivity != null) { SA.Manifest.PropertyTemplate intent_filter = SocialProxyActivity.GetOrCreateIntentFilterWithName("android.intent.action.VIEW"); SocialProxyActivity.RemoveProperty(intent_filter); } } //////////////////////// //FB API //////////////////////// SA.Manifest.PropertyTemplate ApplicationId_meta = application.GetOrCreatePropertyWithName("meta-data", "com.facebook.sdk.ApplicationId"); SA.Manifest.ActivityTemplate LoginActivity = application.GetOrCreateActivityWithName("com.facebook.LoginActivity"); SA.Manifest.ActivityTemplate FBUnityLoginActivity = application.GetOrCreateActivityWithName("com.facebook.unity.FBUnityLoginActivity"); SA.Manifest.ActivityTemplate FBUnityDeepLinkingActivity = application.GetOrCreateActivityWithName("com.facebook.unity.FBUnityDeepLinkingActivity"); SA.Manifest.ActivityTemplate FBUnityDialogsActivity = application.GetOrCreateActivityWithName("com.facebook.unity.FBUnityDialogsActivity"); //This activity used for Facebook SDK v7.x SA.Manifest.ActivityTemplate FacebookActivity = application.GetOrCreateActivityWithName("com.facebook.FacebookActivity"); if (Instalation.IsFacebookInstalled) { #if UNITY_ANDROID string FBAppId = "0"; try { ScriptableObject FB_Resourse = Resources.Load("FacebookSettings") as ScriptableObject; if (FB_Resourse != null) { Type fb_settings = FB_Resourse.GetType(); System.Reflection.PropertyInfo propert = fb_settings.GetProperty("AppId", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public); FBAppId = (string)propert.GetValue(null, null); } } catch (Exception ex) { Debug.LogError("AndroidNative. FBSettings.AppId reflection failed: " + ex.Message); } ApplicationId_meta.SetValue("android:value", "\\ " + FBAppId); LoginActivity.SetValue("android:label", "@string/app_name"); LoginActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar"); LoginActivity.SetValue("android:configChanges", "keyboardHidden|orientation"); FBUnityLoginActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar.Fullscreen"); FBUnityLoginActivity.SetValue("android:configChanges", "fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"); FBUnityDialogsActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar.Fullscreen"); FBUnityDialogsActivity.SetValue("android:configChanges", "fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"); FBUnityDeepLinkingActivity.SetValue("android:exported", "true"); if (SA.Common.Config.FB_SDK_MajorVersionCode >= 7) { FacebookActivity.SetValue("android:configChanges", "keyboard|keyboardHidden|screenLayout|screenSize|orientation"); FacebookActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar"); } else { application.RemoveActivity(FacebookActivity); } #endif } else { application.RemoveProperty(ApplicationId_meta); application.RemoveActivity(LoginActivity); application.RemoveActivity(FBUnityLoginActivity); application.RemoveActivity(FBUnityDeepLinkingActivity); application.RemoveActivity(FBUnityDialogsActivity); application.RemoveActivity(FacebookActivity); } //////////////////////// //NativeSharingAPI //////////////////////// SA.Manifest.PropertyTemplate provider = application.GetOrCreatePropertyWithName("provider", "android.support.v4.content.FileProvider"); if (SocialPlatfromSettings.Instance.NativeSharingAPI) { #if !(UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6) //Remove FileProvider description from AndroidManifest.xml in Unity 5 application.RemoveProperty(provider); #else provider.SetValue("android:authorities", PlayerSettings.bundleIdentifier + ".fileprovider"); provider.SetValue("android:exported", "false"); provider.SetValue("android:grantUriPermissions", "true"); SA.Manifest.PropertyTemplate provider_meta = provider.GetOrCreatePropertyWithName("meta-data", "android.support.FILE_PROVIDER_PATHS"); provider_meta.SetValue("android:resource", "@xml/file_paths"); #endif } else { application.RemoveProperty(provider); } List <string> permissions = GetRequiredPermissions(); foreach (string p in permissions) { Manifest.AddPermission(p); } SA.Manifest.Manager.SaveManifest(); }
private void OnAddPropertyClick(string tag) { PropertyTemplate property = new PropertyTemplate(tag); _parentTemplate.AddProperty(tag, property); }