Exemple #1
0
        void OnGUI()
        {
            GUILayout.Label("Android Manifest Manager", EditorStyles.boldLabel);

            if (!Manager.HasManifest)
            {
                GUILayout.BeginHorizontal();
                EditorGUILayout.Space();
                GUILayout.Label("You have NO AndroidManifest file in your project!", GUILayout.Width(300.0f));
                EditorGUILayout.Space();
                GUILayout.EndHorizontal();

                EditorGUILayout.Space();
                GUILayout.BeginHorizontal();
                EditorGUILayout.Space();
                if (GUILayout.Button("Create Default Manifest", new GUILayoutOption[] { GUILayout.Width(200.0f), GUILayout.Height(50.0f) }))
                {
                    Manager.CreateDefaultManifest();
                }
                EditorGUILayout.Space();
                GUILayout.EndHorizontal();
            }
            else
            {
                string[] toolbarButtons = new string[] { "Manifest", "Application", "Permissions" };
                toolbarButtonIndex = GUILayout.Toolbar(toolbarButtonIndex, toolbarButtons, new GUILayoutOption[] { GUILayout.Height(30.0f) });

                switch (toolbarButtons[toolbarButtonIndex])
                {
                case "Manifest": {
                    Template manifest = Manager.GetManifest();

                    if (manifest != null)
                    {
                        GUILayout.Label("Values", EditorStyles.boldLabel);
                        foreach (string key in manifest.Values.Keys)
                        {
                            EditorGUILayout.BeginHorizontal();

                            GUILayout.Label(key);
                            if (key.Equals("xmlns:android") ||
                                key.Equals("android:installLocation") ||
                                key.Equals("package") ||
                                key.Equals("android:versionName") ||
                                key.Equals("android:versionCode") ||
                                key.Equals("android:theme"))
                            {
                                GUI.enabled = false;
                                GUILayout.TextField(Manager.GetManifest().Values[key], GUILayout.Width(300.0f));
                            }
                            else
                            {
                                GUI.enabled = true;

                                string input = Manager.GetManifest().Values[key];
                                EditorGUI.BeginChangeCheck();
                                input = GUILayout.TextField(Manager.GetManifest().Values[key], GUILayout.Width(276.0f));
                                if (EditorGUI.EndChangeCheck())
                                {
                                    Manager.GetManifest().SetValue(key, input);
                                    return;
                                }

                                if (GUILayout.Button("X", GUILayout.Width(20.0f)))
                                {
                                    Manager.GetManifest().RemoveValue(key);
                                    return;
                                }
                            }
                            GUI.enabled = true;
                            EditorGUILayout.EndHorizontal();
                        }

                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.Space();
                        if (GUILayout.Button("Add Value", GUILayout.Width(100.0f)))
                        {
                            AddValueDialog(Manager.GetManifest());
                        }
                        EditorGUILayout.Space();
                        EditorGUILayout.EndHorizontal();

                        GUILayout.Label("Properties", EditorStyles.boldLabel);
                        DrawProperties(Manager.GetManifest());

                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.Space();
                        if (GUILayout.Button("Add Property", GUILayout.Width(100.0f)))
                        {
                            AddPropertyDialog(Manager.GetManifest());
                        }
                        EditorGUILayout.Space();
                        EditorGUILayout.EndHorizontal();
                        EditorGUILayout.Space();

                        EditorGUILayout.Space();
                        if (GUILayout.Button("Save Manifest", GUILayout.Height(22.0f)))
                        {
                            Manager.SaveManifest();
                        }
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("Selected build platform DOESN'T support AndroidManifest.xml file", MessageType.Info);
                    }
                } break;

                case "Application": {
                    Template manifest = Manager.GetManifest();

                    if (manifest != null)
                    {
                        scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(position.width), GUILayout.Height(position.height - 50f));

                        GUILayout.Label("Values", EditorStyles.boldLabel);
                        foreach (string key in manifest.ApplicationTemplate.Values.Keys)
                        {
                            EditorGUILayout.BeginHorizontal();

                            GUILayout.Label(key);

                            string input = Manager.GetManifest().ApplicationTemplate.Values[key];
                            EditorGUI.BeginChangeCheck();
                            input = GUILayout.TextField(Manager.GetManifest().ApplicationTemplate.Values[key], GUILayout.Width(200.0f));
                            if (EditorGUI.EndChangeCheck())
                            {
                                Manager.GetManifest().ApplicationTemplate.SetValue(key, input);
                                return;
                            }

                            if (GUILayout.Button("X", GUILayout.Width(20.0f)))
                            {
                                Manager.GetManifest().ApplicationTemplate.RemoveValue(key);
                                return;
                            }

                            EditorGUILayout.EndHorizontal();
                        }

                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.Space();
                        if (GUILayout.Button("Add Value", GUILayout.Width(100.0f)))
                        {
                            AddValueDialog(Manager.GetManifest().ApplicationTemplate);
                        }
                        EditorGUILayout.Space();
                        EditorGUILayout.EndHorizontal();

                        GUILayout.Label("Activities", EditorStyles.boldLabel);

                        int launcherActivities = 0;
                        foreach (int id in Manager.GetManifest().ApplicationTemplate.Activities.Keys)
                        {
                            ActivityTemplate activity = Manager.GetManifest().ApplicationTemplate.Activities[id];

                            if (activity.IsLauncher)
                            {
                                launcherActivities++;
                            }

                            EditorGUILayout.BeginVertical(GUI.skin.box);
                            EditorGUILayout.BeginHorizontal();
                            activity.IsOpen = EditorGUILayout.Foldout(activity.IsOpen, activity.Name);
                            if (GUILayout.Button("X", GUILayout.Width(20.0f)))
                            {
                                Manager.GetManifest().ApplicationTemplate.RemoveActivity(activity);
                                return;
                            }
                            EditorGUILayout.EndHorizontal();

                            if (activity.IsOpen)
                            {
                                EditorGUILayout.BeginVertical();

                                bool isLauncher = activity.IsLauncher;
                                EditorGUI.BeginChangeCheck();
                                isLauncher = EditorGUILayout.Toggle("Is Launcher", activity.IsLauncher);
                                if (EditorGUI.EndChangeCheck())
                                {
                                    activity.SetAsLauncher(isLauncher);
                                }

                                foreach (string k in activity.Values.Keys)
                                {
                                    EditorGUILayout.BeginHorizontal();

                                    GUILayout.Label(k);
                                    EditorGUILayout.Space();

                                    string input = activity.Values[k];
                                    EditorGUI.BeginChangeCheck();

                                    if (k.Equals("android:name"))
                                    {
                                        input = GUILayout.TextField(activity.Values[k], GUILayout.Width(224.0f));
                                    }
                                    else
                                    {
                                        input = GUILayout.TextField(activity.Values[k], GUILayout.Width(200.0f));
                                    }

                                    if (EditorGUI.EndChangeCheck())
                                    {
                                        activity.SetValue(k, input);
                                        return;
                                    }

                                    if (!k.Equals("android:name"))
                                    {
                                        if (GUILayout.Button("X", GUILayout.Width(20.0f)))
                                        {
                                            activity.RemoveValue(k);
                                            return;
                                        }
                                    }

                                    EditorGUILayout.EndHorizontal();
                                    EditorGUILayout.Space();
                                }

                                DrawProperties(activity);

                                EditorGUILayout.BeginHorizontal();
                                EditorGUILayout.Space();
                                if (GUILayout.Button("Add Value", GUILayout.Width(100.0f)))
                                {
                                    AddValueDialog(activity);
                                }
                                if (GUILayout.Button("Add Property", GUILayout.Width(100.0f)))
                                {
                                    AddPropertyDialog(activity);
                                }
                                EditorGUILayout.Space();
                                EditorGUILayout.EndHorizontal();
                                EditorGUILayout.Space();

                                EditorGUILayout.EndVertical();
                            }
                            EditorGUILayout.EndVertical();
                        }

                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.Space();
                        if (GUILayout.Button("Add Activity", GUILayout.Width(100.0f)))
                        {
                            AddPermissionDialog dlg = EditorWindow.CreateInstance <AddPermissionDialog>();
                            dlg.onClose    += OnPermissionDlgClose;
                            dlg.onAddClick += OnAddActivityClick;

#if UNITY_5 && !UNITY_5_0 || UNITY_2017
                            dlg.titleContent.text = "Add Activity";
#else
                            dlg.title = "Add Activity";
#endif

                            dlg.ShowAuxWindow();
                        }
                        EditorGUILayout.Space();
                        EditorGUILayout.EndHorizontal();

                        if (launcherActivities > 1)
                        {
                            EditorGUILayout.HelpBox("There is MORE THAN ONE Launcher Activity in Manifest", MessageType.Warning);
                        }
                        else if (launcherActivities < 1)
                        {
                            EditorGUILayout.HelpBox("There is NO Launcher Activities in Manifest", MessageType.Warning);
                        }

                        GUILayout.Label("Properties", EditorStyles.boldLabel);
                        DrawProperties(Manager.GetManifest().ApplicationTemplate);

                        EditorGUILayout.BeginHorizontal();
                        EditorGUILayout.Space();
                        if (GUILayout.Button("Add Property", GUILayout.Width(100.0f)))
                        {
                            AddPropertyDialog(Manager.GetManifest().ApplicationTemplate);
                        }
                        EditorGUILayout.Space();
                        EditorGUILayout.EndHorizontal();

                        EditorGUILayout.Space();
                        EditorGUILayout.EndScrollView();
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("Selected build platform DOESN'T support AndroidManifest.xml file", MessageType.Info);
                    }
                } break;

                case "Permissions": {
                    Template manifest = Manager.GetManifest();

                    if (manifest != null)
                    {
                        scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(position.width), GUILayout.Height(position.height - 50f));
                        EditorGUILayout.BeginVertical();

                        foreach (PropertyTemplate permission in Manager.GetManifest().Permissions)
                        {
                            EditorGUILayout.BeginHorizontal(GUI.skin.box);
                            EditorGUILayout.LabelField(permission.Values["android:name"]);
                            if (GUILayout.Button("X", GUILayout.Width(20.0f)))
                            {
                                Manager.GetManifest().RemovePermission(permission);
                                return;
                            }
                            EditorGUILayout.EndHorizontal();
                        }

                        EditorGUILayout.BeginHorizontal();
                        if (GUILayout.Button("Add Android Permission"))
                        {
                            GenericMenu permissionsMenu = new GenericMenu();
                            foreach (string pStr in PermissionsStrings)
                            {
                                permissionsMenu.AddItem(new GUIContent(pStr), false, SelectPermission, pStr);
                            }
                            permissionsMenu.ShowAsContext();
                        }

                        if (GUILayout.Button("Add Other Permission"))
                        {
                            AddPermissionDialog dlg = EditorWindow.CreateInstance <AddPermissionDialog>();
                            dlg.onClose    += OnPermissionDlgClose;
                            dlg.onAddClick += OnAddPermissionClick;

#if UNITY_5 && !UNITY_5_0 || UNITY_2017
                            dlg.titleContent.text = "Add Permission";
#else
                            dlg.title = "Add Permission";
#endif


                            dlg.ShowAuxWindow();
                        }
                        EditorGUILayout.EndHorizontal();

                        EditorGUILayout.Space();
                        EditorGUILayout.EndVertical();
                        EditorGUILayout.EndScrollView();
                    }
                    else
                    {
                        EditorGUILayout.HelpBox("Selected build platform DOESN'T support AndroidManifest.xml file", MessageType.Info);
                    }
                } break;

                default: break;
                }


                AboutGUI();
            }
        }