Exemplo n.º 1
0
        public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
        {
            try
            {
                if (MFloatingViewManager == null)
                {
                    RunService = true;

                    DisplayMetrics metrics = new DisplayMetrics();
                    //DisplayMetrics metrics = Resources.DisplayMetrics;
                    var windowManager = GetSystemService(WindowService).JavaCast <IWindowManager>();
                    windowManager?.DefaultDisplay?.GetRealMetrics(metrics);

                    Inflater ??= LayoutInflater.From(Application.Context);

                    var iconView = Inflater?.Inflate(Resource.Layout.WidgetChatHeadLayout, null, false);

                    Image = iconView?.FindViewById <ImageView>(Resource.Id.imageFloating);
                    Image?.SetOnClickListener(this);
                    try
                    {
                        DataUser = JsonConvert.DeserializeObject <FloatingObject>(intent.GetStringExtra("UserData"));
                        if (DataUser != null)
                        {
                            Glide.With(Application.Context).Load(DataUser.Avatar).Apply(new RequestOptions().CircleCrop().Placeholder(Resource.Drawable.no_profile_image_circle)).Into(Image);

                            if (!string.IsNullOrEmpty(DataUser.MessageCount) || DataUser.MessageCount != "0")
                            {
                                ShowOrHideBadgeView(Convert.ToInt32(DataUser.MessageCount), true);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Methods.DisplayReportResultTrack(e);
                    }

                    MFloatingViewManager = new FloatingViewManager(Application.Context, this);
                    MFloatingViewManager.SetFixedTrashIconImage(Application.Context.GetDrawable(Resource.Drawable.ic_trash_fixed));
                    MFloatingViewManager.SetActionTrashIconImage(Application.Context.GetDrawable(Resource.Drawable.ic_trash_action));
                    MFloatingViewManager.SetSafeInsetRect((Rect)intent.GetParcelableExtra(ExtraCutoutSafeArea));

                    // Setting Options(you can change options at any time)
                    FloatingViewManager.Options options = LoadDynamicOptions(metrics);

                    switch (AppSettings.DisplayModeSettings)
                    {
                    case "Always":
                        MFloatingViewManager.SetDisplayMode(FloatingViewManager.DisplayModeShowAlways);
                        break;

                    case "FullScreen":
                        MFloatingViewManager.SetDisplayMode(FloatingViewManager.DisplayModeHideFullscreen);
                        break;

                    case "Hide":
                        MFloatingViewManager.SetDisplayMode(FloatingViewManager.DisplayModeHideAlways);
                        break;
                    }

                    MFloatingViewManager.AddViewToWindow(iconView, options);
                    return(StartCommandResult.Sticky);
                }
                else
                {
                    if (Image != null && (!string.IsNullOrEmpty(DataUser.MessageCount) || DataUser.MessageCount != "0"))
                    {
                        var x = Convert.ToInt32(DataUser.MessageCount);

                        if (x >= 1 && AppSettings.LastChatSystem == SystemApiGetLastChat.Old)
                        {
                            x++;
                        }

                        ShowOrHideBadgeView(x, true);
                    }
                }

                return(StartCommandResult.NotSticky);
            }
            catch (Exception e)
            {
                Methods.DisplayReportResultTrack(e);
                return(StartCommandResult.NotSticky);
            }
        }
Exemplo n.º 2
0
        private FloatingViewManager.Options LoadDynamicOptions(DisplayMetrics metrics)
        {
            try
            {
                FloatingViewManager.Options options = new FloatingViewManager.Options
                {
                    OverMargin = (int)(16 * metrics.Density)
                };

                switch (AppSettings.MoveDirectionSettings)
                {
                case "Default":
                    options.MoveDirection = FloatingViewManager.MoveDirectionDefault;
                    break;

                case "Left":
                    options.MoveDirection = FloatingViewManager.MoveDirectionLeft;
                    break;

                case "Right":
                    options.MoveDirection = FloatingViewManager.MoveDirectionRight;
                    break;

                case "Nearest":
                    options.MoveDirection = FloatingViewManager.MoveDirectionNearest;
                    break;

                case "Fix":
                    options.MoveDirection = FloatingViewManager.MoveDirectionNone;
                    break;

                case "Thrown":
                    options.MoveDirection = FloatingViewManager.MoveDirectionThrown;
                    break;
                }

                // Last position
                if (AppSettings.IsUseLastPosition)
                {
                    var defaultX = options.FloatingViewX;
                    var defaultY = options.FloatingViewY;
                    options.FloatingViewX = MainSettings.LastPosition.GetInt(MainSettings.PrefKeyLastPositionX, defaultX);
                    options.FloatingViewY = MainSettings.LastPosition.GetInt(MainSettings.PrefKeyLastPositionY, defaultY);
                }
                else
                {
                    // Init X/Y
                    String initXSettings = MainSettings.LastPosition.GetString("settings_init_x", "0");
                    String initYSettings = MainSettings.LastPosition.GetString("settings_init_y", "0");
                    if (!TextUtils.IsEmpty(initXSettings) && !TextUtils.IsEmpty(initYSettings))
                    {
                        var offset = (int)(48 + 8 * metrics.Density);
                        options.FloatingViewX = (int)(metrics.WidthPixels * Float.ParseFloat(initXSettings) - offset);
                        options.FloatingViewY = (int)(metrics.HeightPixels * Float.ParseFloat(initYSettings) - offset);
                    }
                }

                switch (AppSettings.ShapeSettings)
                {
                case "Circle":
                    options.Shape = FloatingViewManager.ShapeCircle;
                    break;

                case "Rectangle":
                    options.Shape = FloatingViewManager.ShapeRectangle;
                    break;
                }

                return(options);
            }
            catch (Exception e)
            {
                Methods.DisplayReportResultTrack(e);
                return(null);
            }
        }