private void CatcherHelper_NotificationPosted(object sender, NotificationPostedEventArgs e) { openNotification = e.OpenNotification; if (e.ShouldCauseWakeUp) { AwakeHelper.TurnOnScreen(); } //if the current floating notification widget does not have a tag, let's set it. if (floatingNotificationView.GetTag(Resource.String.defaulttag) == null) { floatingNotificationView.SetTag(Resource.String.defaulttag, openNotification.GetCustomId()); } if (configurationManager.RetrieveAValue(ConfigurationParameters.TestEnabled)) { Toast.MakeText(floatingNotificationView.Context, "Progress Indeterminate?: " + openNotification.IsProgressIndeterminate().ToString() + "\n" + "Current Progress: " + openNotification.GetProgress().ToString() + "\n" + "Max Progress: " + openNotification.GetProgressMax().ToString() + "\n" + openNotification.GetGroupInfo() , ToastLength.Short).Show(); } if (e.UpdatesPreviousNotification) { if ((string)floatingNotificationView.GetTag(Resource.String.defaulttag) == openNotification.GetCustomId()) { floatingNotificationView.SetTag(Resource.String.defaulttag, openNotification.GetCustomId()); } } else { //Is a new notification, so set a new tag. floatingNotificationView.SetTag(Resource.String.defaulttag, openNotification.GetCustomId()); if (floatingNotificationView.Visibility != ViewStates.Visible) { if (currentActivityState == ActivityStates.Resumed) //most of the times it won't work, when the Screen turns on then it gets here too quickly //before the lockscreen is in a Resumed state, causing the floating notification not being showed when the screen turns on, TODO. { floatingNotificationView.Visibility = ViewStates.Visible; } } } }
private void CatcherHelper_NotificationPosted(object sender, NotificationPostedEventArgs e) { openNotification = new OpenNotification(e.StatusBarNotification); //if the current floating notification widget does not have a tag, let's set it. if (floatingNotificationView.GetTag(Resource.String.defaulttag) == null) { floatingNotificationView.SetTag(Resource.String.defaulttag, openNotification.GetCustomId()); } if (configurationManager.RetrieveAValue(ConfigurationParameters.TestEnabled)) { Toast.MakeText(floatingNotificationView.Context, "Progress Indeterminate?: " + openNotification.IsProgressIndeterminate().ToString() + "\n" + "Current Progress: " + openNotification.GetProgress().ToString() + "\n" + "Max Progress: " + openNotification.GetProgressMax().ToString() + "\n" + openNotification.GetGroupInfo() , ToastLength.Short).Show(); } if (e.UpdatesPreviousNotification) { if ((string)floatingNotificationView.GetTag(Resource.String.defaulttag) == openNotification.GetCustomId()) { floatingNotificationAppName.Text = openNotification.AppName(); floatingNotificationWhen.Text = openNotification.When(); floatingNotificationTitle.Text = openNotification.Title(); floatingNotificationText.Text = openNotification.Text(); floatingNotificationActionsContainer.RemoveAllViews(); if (openNotification.HasActions() == true) { var actions = openNotification.RetrieveActions(); foreach (var a in actions) { OpenAction openAction = new OpenAction(a); float weight = (float)1 / actions.Count; Button anActionButton = new Button(Application.Context) { LayoutParameters = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MatchParent, weight), Text = openAction.Title(), }; anActionButton.SetTypeface(Typeface.Create("sans-serif-condensed", TypefaceStyle.Normal), TypefaceStyle.Normal); anActionButton.SetMaxLines(1); anActionButton.SetTextColor(Color.Black); anActionButton.Click += (o, eventargs) => { openAction.ClickAction(); }; anActionButton.Gravity = GravityFlags.CenterVertical; TypedValue outValue = new TypedValue(); Application.Context.Theme.ResolveAttribute(Android.Resource.Attribute.SelectableItemBackgroundBorderless, outValue, true); anActionButton.SetBackgroundResource(outValue.ResourceId); //anActionButton.SetCompoundDrawablesRelativeWithIntrinsicBounds(openAction.GetActionIcon(), null, null, null); floatingNotificationActionsContainer.AddView(anActionButton); } ; } } } else { //Is a new notification, so set a new tag. floatingNotificationView.SetTag(Resource.String.defaulttag, openNotification.GetCustomId()); floatingNotificationAppName.Text = openNotification.AppName(); floatingNotificationWhen.Text = openNotification.When(); floatingNotificationTitle.Text = openNotification.Title(); floatingNotificationText.Text = openNotification.Text(); floatingNotificationActionsContainer.RemoveAllViews(); if (openNotification.HasActions() == true) { var actions = openNotification.RetrieveActions(); foreach (var a in actions) { OpenAction openAction = new OpenAction(a); float weight = (float)1 / actions.Count; Button anActionButton = new Button(Application.Context) { LayoutParameters = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MatchParent, weight), Text = openAction.Title(), }; anActionButton.SetTypeface(Typeface.Create("sans-serif-condensed", TypefaceStyle.Normal), TypefaceStyle.Normal); anActionButton.SetMaxLines(1); anActionButton.SetTextColor(Color.Black); anActionButton.Click += (o, eventargs) => { openAction.ClickAction(); }; anActionButton.Gravity = GravityFlags.CenterVertical; TypedValue outValue = new TypedValue(); Application.Context.Theme.ResolveAttribute(Android.Resource.Attribute.SelectableItemBackgroundBorderless, outValue, true); anActionButton.SetBackgroundResource(outValue.ResourceId); //anActionButton.SetCompoundDrawablesRelativeWithIntrinsicBounds(openAction.GetActionIcon(), null, null, null); floatingNotificationActionsContainer.AddView(anActionButton); } ; } if (floatingNotificationView.Visibility != ViewStates.Visible) { if (currentActivityState == ActivityStates.Resumed) { floatingNotificationView.Visibility = ViewStates.Visible; } } } }
private void CatcherHelper_NotificationPosted(object sender, NotificationPostedEventArgs e) { openNotification = new OpenNotification(e.StatusBarNotification); //if the current notification widget does not have a tag, let's set it. if (notification.GetTag(Resource.String.defaulttag) == null) { notification.SetTag(Resource.String.defaulttag, openNotification.GetCustomId()); } if (configurationManager.RetrieveAValue(ConfigurationParameters.TestEnabled)) { Toast.MakeText(Activity, "Progress Indeterminate?: " + openNotification.IsProgressIndeterminate().ToString() + "\n" + "Current Progress: " + openNotification.GetProgress().ToString() + "\n" + "Max Progress: " + openNotification.GetProgressMax().ToString() + "\n" + openNotification.GetGroupInfo() , ToastLength.Short).Show(); } if (e.UpdatesPreviousNotification) { Activity.RunOnUiThread(() => { //if updates a previous notification, let's see if first of all the notification //to be updated is the same that's currently being displayed in the Notification Widget. if ((string)notification.GetTag(Resource.String.defaulttag) == openNotification.GetCustomId()) { //Watch out for possible memory leaks here. styleApplier?.ApplyStyle(openNotification); //let's attach a tag to the fragment in order to know which notification is this fragment showing. notification.SetTag(Resource.String.defaulttag, openNotification.GetCustomId()); if (notification.Visibility != ViewStates.Visible) { notification.Visibility = ViewStates.Visible; StartTimeout(false); } } else { //they are not the same so, the notification widget won't get updated(because that'll cause the //notification the user is viewing to be replaced) } }); } else { Activity.RunOnUiThread(() => { styleApplier?.ApplyStyle(openNotification); notification.SetTag(Resource.String.defaulttag, openNotification.GetCustomId()); if (notification.Visibility != ViewStates.Visible) { notification.Visibility = ViewStates.Visible; StartTimeout(false); } }); } }