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); } }
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); } }