예제 #1
0
        private void OnUserAddApp(int id, ActivityInfo app)
        {
            FolderModel folder = MFolders.Get(id);

            folder.Apps.Add(app);

            ResizeToGridAndSave(id, -1);
        }
예제 #2
0
        private void OnUserRemoveApp(int id, ActivityInfo app)
        {
            RemoveAppFromView(id, app);

            FolderModel folder = MFolders.Get(id);

            folder.Apps.Remove(app);

            ResizeToGridAndSave(id, -1);
        }
예제 #3
0
        //JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
        //ORIGINAL LINE: private void resizeToGridAndSave(final int id, final int cols)
        private void ResizeToGridAndSave(int id, int cols)
        {
            //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
            //ORIGINAL LINE: final wei.mark.standout.ui.Window window = getWindow(id);
            Window window = getWindow(id);

            window.Post(() =>
            {
                FlowLayout flow = (FlowLayout)window.FindViewById(Resource.Id.flow);

                FolderModel folder = MFolders.Get(id);

                int count   = folder.Apps.Count;
                int columns = cols;

                if (cols == -1)
                {
                    columns = flow.GetCols();
                }

                if (columns < 2)
                {
                    columns = 2;
                }

                int rows = count / columns;
                if (count % columns > 0)
                {
                    rows++;
                }

                if (rows < 1)
                {
                    rows = 1;
                }

                int width  = flow.Left + (((ViewGroup)flow.Parent).Width - flow.Right) + columns * SquareWidth;
                int height = width;

                if (count > 0)
                {
                    height = flow.Top + (((ViewGroup)flow.Parent).Height - flow.Bottom) + rows * flow.GetChildHeight();
                }

                StandOutLayoutParams @params = window.GetLayoutParams();
                @params.Width  = width;
                @params.Height = height;
                updateViewLayout(id, @params);

                folder.Width  = width;
                folder.Height = height;

                SaveFolder(folder);
            });
        }
예제 #4
0
        public override void onReceiveData(int id, int requestCode, Bundle data, Type fromCls, int fromId)
        {
            switch (requestCode)
            {
            case APP_SELECTOR_CODE:
                if (APP_SELECTOR_ID == id)
                {
                    // app selector receives data
                    Window window2 = show(APP_SELECTOR_ID);
                    window2.data.PutInt("fromId", fromId);
                }
                break;

            case APP_SELECTOR_FINISHED_CODE:
                //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
                //ORIGINAL LINE: final Android.Content.pm.ActivityInfo app = data.getParcelable("app");
                ActivityInfo app = (ActivityInfo)data.GetParcelable("app");
                Log.Debug("FloatingFolder", "Received app: " + app);

                Window window = getWindow(id);
                if (window == null)
                {
                    return;
                }

                ViewGroup flow = (ViewGroup)window.FindViewById(Resource.Id.flow);

                AddAppToFolder(id, app, flow);

                OnUserAddApp(id, app);
                break;

            case STARTUP_CODE:
                LoadAllFolders();
                if (MFolders.Size() == 0)
                {
                    MFolders.Put(DEFAULT_ID, new FolderModel());
                    show(DEFAULT_ID);
                }
                else
                {
                    for (int i = 0; i < MFolders.Size(); i++)
                    {
                        FolderModel folder = MFolders.Get(MFolders.KeyAt(i));
                        if (folder.Shown)
                        {
                            show(folder.Id);
                        }
                    }
                }
                break;
            }
        }
예제 #5
0
        //JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
        //ORIGINAL LINE: @Override public boolean onTouchBody(final int id, final wei.mark.standout.ui.Window window, final Android.Views.View view, Android.Views.MotionEvent event)
        public bool OnTouchBody(int id, Window window, View view, MotionEvent @event)
        {
            if (id != APP_SELECTOR_ID && @event.Action == Android.Views.MotionEventActions.Move)
            {
                //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
                //ORIGINAL LINE: final StandOutLayoutParams params = (StandOutLayoutParams) window.getLayoutParams();
                StandOutLayoutParams @params = window.GetLayoutParams();

                //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
                //ORIGINAL LINE: final Android.Views.View folderView = window.findViewById(Resource.id.folder);
                View folderView = window.FindViewById(Resource.Id.folder);
                //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
                //ORIGINAL LINE: final Android.widget.ImageView screenshot = (Android.widget.ImageView) window.findViewById(Resource.id.preview);
                ImageView screenshot = (ImageView)window.FindViewById(Resource.Id.preview);

                FolderModel folder = MFolders.Get(id);

                // if touch edge
                if (@params.X <= 0)
                {
                    // first time touch edge
                    if (folder.FullSize)
                    {
                        folder.FullSize = false;

                        //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
                        //ORIGINAL LINE: final Android.graphics.drawable.Drawable drawable = getResources().getDrawable(Resource.drawable.ic_menu_archive);
                        Drawable drawable = Resources.GetDrawable(Resource.Drawable.ic_menu_archive);

                        screenshot.SetImageDrawable(drawable);

                        MFadeOut.SetAnimationListener(new AnimationListenerAnonymousInnerClass(this, id, @params, folderView, screenshot, drawable));

                        folderView.StartAnimation(MFadeOut);
                    }
                }
                else
                {                 // not touch edge
                    // first time not touch edge
                    if (!folder.FullSize)
                    {
                        folder.FullSize = true;

                        MFadeOut.SetAnimationListener(new AnimationListenerAnonymousInnerClass2(this, id, window, @params, folderView, screenshot));

                        screenshot.StartAnimation(MFadeOut);
                    }
                }
            }

            return(false);
        }
예제 #6
0
        private void SaveFolder(FolderModel folder)
        {
            System.IO.FileStream @out = null;
            try
            {
                @out = (System.IO.FileStream)OpenFileOutput(string.Format("folder{0:D}", folder.Id), Android.Content.FileCreationMode.Private);

                @out.WriteByte(byte.Parse(string.Format("{0:D}\n", folder.Width)));
                @out.WriteByte(byte.Parse(string.Format("{0:D}\n", folder.Height)));

                foreach (ActivityInfo appInFolder in folder.Apps)
                {
                    ComponentName name = new ComponentName(appInFolder.PackageName, appInFolder.Name);

                    @out.WriteByte(byte.Parse((name.FlattenToString() + "\n")));
                }
            }
            catch (FileNotFoundException e)
            {
                System.Console.WriteLine(e.Message);
                System.Console.Write(e.StackTrace);
            }
            catch (IOException e)
            {
                System.Console.WriteLine(e.ToString());
                System.Console.Write(e.StackTrace);
            }
            finally
            {
                if (@out != null)
                {
                    try
                    {
                        @out.Close();
                    }
                    catch (IOException e)
                    {
                        System.Console.WriteLine(e.ToString());
                        System.Console.Write(e.StackTrace);
                    }
                }
            }
        }
예제 #7
0
        public override StandOutLayoutParams getParams(int id, Window window)
        {
            if (APP_SELECTOR_ID == id)
            {
                return(new StandOutLayoutParams(this, id, 400, ViewGroup.LayoutParams.MatchParent, StandOutLayoutParams.CENTER, StandOutLayoutParams.TOP));
            }
            else
            {
                FolderModel folder = MFolders.Get(id);
                int         width  = folder.Width;
                int         height = folder.Height;

                if (width == 0)
                {
                    width = 400;
                }
                if (height == 0)
                {
                    height = 400;
                }
                return(new StandOutLayoutParams(this, id, width, height, 50, 50));
            }
        }
예제 #8
0
        //JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
        //ORIGINAL LINE: @Override public void createAndAttachView(final int id, Android.widget.FrameLayout frame)
        public override void CreateAndAttachView(int id, FrameLayout frame)
        {
            LayoutInflater inflater = LayoutInflater.From(this);

            // choose which type of window to show
            if (APP_SELECTOR_ID == id)
            {
                //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
                //ORIGINAL LINE: final Android.Views.View view = inflater.inflate(Resource.layout.app_selector, frame, true);
                View view = inflater.Inflate(Resource.Layout.app_selector, frame, true);
                //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
                //ORIGINAL LINE: final Android.widget.ListView listView = (Android.widget.ListView) view.findViewById(Resource.id.list);
                ListView listView = (ListView)view.FindViewById(Resource.Id.list);
                //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
                //ORIGINAL LINE: final java.util.List<Android.Content.pm.ActivityInfo> apps = new java.util.ArrayList<Android.Content.pm.ActivityInfo>();
                IList <ActivityInfo> apps = new List <ActivityInfo>();

                listView.Clickable = (true);

                //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
                //ORIGINAL LINE: final AppAdapter adapter = new AppAdapter(this, Resource.layout.app_row, apps);
                AppAdapter adapter = new AppAdapter(this, Resource.Layout.app_row, apps);
                listView.Adapter = (adapter);

                listView.OnItemClickListener = (new OnItemClickListenerAnonymousInnerClass(this, id, view));

                (new Thread(() =>
                {
                    Intent mainIntent = new Intent(Intent.ActionMain, null);
                    mainIntent.AddCategory(Intent.CategoryLauncher);
                    List <ResolveInfo> resolveApps = (List <ResolveInfo>)PackageManager.QueryIntentActivities(mainIntent, 0);
                    resolveApps.Sort(new ComparatorAnonymousInnerClass(this));
                    foreach (ResolveInfo resolveApp in resolveApps)
                    {
                        apps.Add(resolveApp.ActivityInfo);
                    }

                    Log.Debug("FloatingFolder", "before");
                    view.Post(() =>
                    {
                        Log.Debug("FloatingFolder", "after");
                        adapter.NotifyDataSetChanged();
                    });
                })).Start();

                View cancel = view.FindViewById(Resource.Id.cancel);
                cancel.SetOnClickListener(new OnClickListenerAnonymousInnerClass(this, id));
            }
            else
            {
                // id is not app selector
                View view = inflater.Inflate(Resource.Layout.folder, frame, true);

                FlowLayout flow = (FlowLayout)view.FindViewById(Resource.Id.flow);

                if (MFolders == null)
                {
                    LoadAllFolders();
                }

                FolderModel folder = MFolders.Get(id);
                if (folder != null)
                {
                    foreach (ActivityInfo app in folder.Apps)
                    {
                        AddAppToFolder(id, app, flow);
                    }
                }
            }
        }
예제 #9
0
        private void LoadAllFolders()
        {
            MFolders = new SparseArray <FolderModel>();
            string[] folders = FileList();
            foreach (string folderFileName in folders)
            {
                System.IO.FileStream @in = null;
                try
                {
                    if (folderFileName.StartsWith("folder", StringComparison.Ordinal))
                    {
                        FolderModel folder = new FolderModel();
                        folder.Id = int.Parse(folderFileName.Substring("folder".Length));

                        @in = (System.IO.FileStream)OpenFileInput(folderFileName);
                        System.IO.MemoryStream bos = new System.IO.MemoryStream();
                        byte[] b = new byte[1024];
                        int    bytesRead;
                        while ((bytesRead = @in.Read(b, 0, b.Length)) != -1)
                        {
                            bos.Write(b, 0, bytesRead);
                        }
                        byte[] bytes    = bos.ToArray();
                        string appNames = StringHelperClass.NewString((sbyte[])(Array)bytes);

                        int i = 0;
                        foreach (string appName in appNames.Split("\n", true))
                        {
                            if (i < 2)
                            {
                                // width and height
                                try
                                {
                                    if (i == 0)
                                    {
                                        folder.Width = int.Parse(appName);
                                    }
                                    else if (i == 1)
                                    {
                                        folder.Height = int.Parse(appName);
                                    }
                                }
                                catch (System.FormatException)
                                {
                                    string msg = "Please uninstall Floating Folders and reinstall it. The folder format has changed.";
                                    Log.Debug("FloatingFolder", msg);
                                    Toast.MakeText(this, msg, ToastLength.Short).Show();
                                    break;
                                }
                                i++;
                            }
                            else
                            {
                                if (appName.Length > 0)
                                {
                                    ComponentName name = ComponentName.UnflattenFromString(appName);
                                    try
                                    {
                                        ActivityInfo app = MPackageManager.GetActivityInfo(name, 0);
                                        folder.Apps.Add(app);
                                        MFolders.Put(folder.Id, folder);
                                    }
                                    catch (PackageManager.NameNotFoundException e)
                                    {
                                        System.Console.WriteLine(e.ToString());
                                        System.Console.Write(e.StackTrace);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (FileNotFoundException e)
                {
                    System.Console.WriteLine(e.ToString());
                    System.Console.Write(e.StackTrace);
                }
                catch (IOException e)
                {
                    System.Console.WriteLine(e.ToString());
                    System.Console.Write(e.StackTrace);
                }
                finally
                {
                    if (@in != null)
                    {
                        try
                        {
                            @in.Close();
                        }
                        catch (IOException e)
                        {
                            System.Console.WriteLine(e.ToString());
                            System.Console.Write(e.StackTrace);
                        }
                    }
                }
            }
        }