예제 #1
0
        protected override void OnHandleIntent(Intent intent)
        {
            lock (LOCK)
            {
                if (sWakeLock == null)
                {
                    var pm = PowerManager.FromContext(this.ApplicationContext);
                    sWakeLock = pm.NewWakeLock(WakeLockFlags.Partial, KINVEY_FCM);
                }
            }

            sWakeLock.Acquire();


            try
            {
                string action = intent.Action;

                if (action.Equals(Constants.STR_C2DM_INTENT_REGISTRATION))
                {
                    var registrationId = intent.GetStringExtra(REGISTRATION_ID);
                    onRegistered(registrationId);
                }
                else if (action.Equals(Constants.STR_KINVEY_FCM_UNREGISTRATION))
                {
                    var unregistrationId = intent.GetStringExtra(Constants.STR_UNREGISTRATION_ID);
                    onUnregistered(unregistrationId);
                }
                else if (action.Equals(Constants.STR_C2DM_INTENT_RECEIVE))
                {
                    string message = null;

                    if (intent.HasExtra(MESSAGE_FROM_KINVEY_CONSOLE))
                    {
                        message = intent.GetStringExtra(MESSAGE_FROM_KINVEY_CONSOLE);
                    }
                    else if (intent.HasExtra(MESSAGE_FROM_FCM))
                    {
                        message = intent.GetStringExtra(MESSAGE_FROM_FCM);
                    }

                    onMessage(message);
                }
                else if (action.Equals(Constants.STR_KINVEY_ANDROID_ERROR))
                {
                    onError(intent.GetStringExtra(Constants.STR_GENERAL_ERROR));
                }
            }
            finally
            {
                lock (LOCK)
                {
                    //Sanity check for null as this is a public method
                    if (sWakeLock != null)
                    {
                        sWakeLock.Release();
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Do a <see cref="Context.StartService(Intent)"/>, but holding a wake lock while the service starts.
        /// </summary>
        /// <remarks>
        /// This will modify the intent to hold an extra identifying the wake lock. When the service receives it
        /// in <see cref="Service.OnStartCommand"/>, it should pass back the <see cref="Intent"/> it receives there to
        /// <see cref="CompleteWakefulIntent(Intent)"/> in order to release the wake lock.
        /// </remarks>
        /// <param name="context">The <see cref="Context"/> in which it operate.</param>
        /// <param name="intent">The <see cref="Intent"/> with which to start the service, as per <see cref="Context.StartService(Intent)"/>.</param>
        /// <returns>The <see cref="ComponentName"/> of the <see cref="Service"/> being started.</returns>
        internal static ComponentName StartWakefulService(Context context, Intent intent)
        {
            lock (activeWakeLocksMutex) {
                int id = nextId;
                nextId++;
                if (nextId <= 0)
                {
                    nextId = 1;
                }

                intent.PutExtra(ExtraWakeLockId, id);
                ComponentName comp = context.StartService(intent);
                if (comp == null)
                {
                    return(null);
                }

                PowerManager          pm = PowerManager.FromContext(context);
                PowerManager.WakeLock wl = pm.NewWakeLock(WakeLockFlags.Partial, "wake: " + comp.FlattenToShortString());
                wl.SetReferenceCounted(false);
                wl.Acquire(WakeLockTimeout);
                activeWakeLocks[id] = wl;

                return(comp);
            }
        }
예제 #3
0
        /// <summary>
        /// Class constructor. Use the supplied Context to obtain a WakeLock
        /// </summary>
        public RemotePlayback(Context context)
        {
            // Get an instance of the PowerManager to aquire a wake lock
            PowerManager pm = PowerManager.FromContext(context);

            wakeLock = pm.NewWakeLock(WakeLockFlags.Partial, "DBTest");
        }
예제 #4
0
        public override void OnReceive(Context context, Intent intent)
        {
            PowerManager.WakeLock sWakeLock;
            var pm = PowerManager.FromContext(context);

            sWakeLock = pm.NewWakeLock(WakeLockFlags.Partial, "GCM Broadcast Reciever Tag");
            sWakeLock.Acquire();

            //handle the notification here

            sWakeLock.Release();
        }
        public override void OnReceive(Context context, Intent intent)
        {
            var pm       = PowerManager.FromContext(context);
            var wakeLock = pm.NewWakeLock(WakeLockFlags.Partial, "GCM Broadcast Reciever Tag");

            wakeLock.Acquire();

            // Handle the notification here. You have an Intent and Context which will contain the information you are after.
            // ....

            // When you are finished
            sWakeLock.Release();
        }
        private void CheckPackageForPowerOptimization(string package)
        {
            var powerManager = PowerManager.FromContext(Application.Context);

            //Power optimization checking was added in API 23
            if ((int)Build.VERSION.SdkInt >= (int)BuildVersionCodes.M &&
                powerManager.IsDeviceIdleMode &&
                !powerManager.IsIgnoringBatteryOptimizations(package))
            {
                _logger.Error("[Android broker] Power optimization detected for the application: " + package + " and the device is in doze mode or the app is in standby. \n" +
                              "Please disable power optimizations for this application to authenticate.");
            }
        }
예제 #7
0
 public static void AcquireWakeLock(Context context)
 {
     lock (Lock)
     {
         if (_wakeLock == null)
         {
             // This is called from BroadcastReceiver, there is no init.
             var pm = PowerManager.FromContext(context);
             _wakeLock = pm.NewWakeLock(
                 WakeLockFlags.Partial, WAKE_LOCK_TAG_IDTOPushHandlerService);
         }
     }
     _wakeLock.Acquire();
 }
        /// <summary>
        /// This method is called when the BroadcastReceiver is receiving an Intent
        /// broadcast.
        /// </summary>
        /// <param name="context">The Context in which the receiver is running.</param>
        /// <param name="intent">The Intent being received.</param>
        /// <remarks>
        /// <para tool="javadoc-to-mdoc">This method is called when the BroadcastReceiver is receiving an Intent
        /// broadcast.  During this time you can use the other methods on
        /// BroadcastReceiver to view/modify the current result values.  This method
        /// is always called within the main thread of its process, unless you
        /// explicitly asked for it to be scheduled on a different thread using
        /// <c><see cref="M:Android.Content.Context.RegisterReceiver(Android.Content.BroadcastReceiver, Android.Content.IntentFilter, Android.Content.IntentFilter, Android.Content.IntentFilter)" /></c>. When it runs on the main
        /// thread you should
        /// never perform long-running operations in it (there is a timeout of
        /// 10 seconds that the system allows before considering the receiver to
        /// be blocked and a candidate to be killed). You cannot launch a popup dialog
        /// in your implementation of onReceive().
        /// </para>
        /// <para tool="javadoc-to-mdoc">
        ///   <format type="text/html">
        ///     <b>If this BroadcastReceiver was launched through a &lt;receiver&gt; tag,
        /// then the object is no longer alive after returning from this
        /// function.</b>
        ///   </format>  This means you should not perform any operations that
        /// return a result to you asynchronously -- in particular, for interacting
        /// with services, you should use
        /// <c><see cref="M:Android.Content.Context.StartService(Android.Content.Intent)" /></c> instead of
        /// <c><see cref="M:Android.Content.Context.BindService(Android.Content.Intent, Android.Content.IServiceConnection, Android.Content.IServiceConnection)" /></c>.  If you wish
        /// to interact with a service that is already running, you can use
        /// <c><see cref="M:Android.Content.BroadcastReceiver.PeekService(Android.Content.Context, Android.Content.Intent)" /></c>.
        /// </para>
        /// <para tool="javadoc-to-mdoc">The Intent filters used in <c><see cref="M:Android.Content.Context.RegisterReceiver(Android.Content.BroadcastReceiver, Android.Content.IntentFilter)" /></c>
        /// and in application manifests are <i>not</i> guaranteed to be exclusive. They
        /// are hints to the operating system about how to find suitable recipients. It is
        /// possible for senders to force delivery to specific recipients, bypassing filter
        /// resolution.  For this reason, <c><see cref="M:Android.Content.BroadcastReceiver.OnReceive(Android.Content.Context, Android.Content.Intent)" /></c>
        /// implementations should respond only to known actions, ignoring any unexpected
        /// Intents that they may receive.</para>
        /// <para tool="javadoc-to-mdoc">
        ///   <format type="text/html">
        ///     <a href="http://developer.android.com/reference/android/content/BroadcastReceiver.html#onReceive(android.content.Context, android.content.Intent)" target="_blank">[Android Documentation]</a>
        ///   </format>
        /// </para>
        /// </remarks>
        /// <since version="Added in API level 1" />
        public override void OnReceive(Context context, Intent intent)
        {
            //Making sure that we receive notifications even when the app is stopped:
            PowerManager.WakeLock sWakeLock;
            var pm = PowerManager.FromContext(context);

            sWakeLock = pm.NewWakeLock(WakeLockFlags.Partial, "GCM Broadcast Reciever Tag");
            sWakeLock.Acquire();

            //Continue with the creation of the notification
            var n = Serialization.Deserialize <Notification>(intent.GetStringExtra("object"));

            var resultIntent = new Intent(context, typeof(MainActivity));

            resultIntent.PutExtra("open", n.Open);
            resultIntent.PutExtra("data", n.Data);
            resultIntent.SetAction(n.Action);
            resultIntent.PutExtra("action", n.Action);
            resultIntent.PutExtra("id", n.ID.ToString());
            resultIntent.AddFlags(ActivityFlags.NewTask | ActivityFlags.SingleTop);


            if (!string.IsNullOrWhiteSpace(n.Data))
            {
                var sp = context.GetSharedPreferences("ACD", FileCreationMode.Private);
                sp.Edit().PutString("launchData", Serialization.Serialize(n.Data)).Commit();
            }


            var stackBuilder = Android.Support.V4.App.TaskStackBuilder.Create(context);

            stackBuilder.AddParentStack(Java.Lang.Class.FromType(typeof(MainActivity)));
            stackBuilder.AddNextIntent(resultIntent);

            var resultPendingIntent = stackBuilder.GetPendingIntent(0, (int)PendingIntentFlags.UpdateCurrent);

            var nb = new NotificationCompat.Builder(context)
                     .SetContentTitle(n.Title)
                     .SetSmallIcon(Resource.Drawable.icon)
                     .SetContentText(n.Body).SetExtras(resultIntent.Extras)
                     .SetContentIntent(resultPendingIntent)
                     .SetStyle(new NotificationCompat.BigTextStyle().BigText(n.Body))
                     .SetAutoCancel(true);
            var nm = (NotificationManager)context.GetSystemService(Context.NotificationService);

            nm.Notify(n.ID, nb.Build());

            sWakeLock.Release();
        }
예제 #9
0
        static void RunIntentInService(Context context, Intent intent)
        {
            lock (LOCK)
            {
                if (wakeLock == null)
                {
                    var pm = PowerManager.FromContext(context);
                    wakeLock = pm.NewWakeLock(WakeLockFlags.Partial, "Woken lock");
                }
            }

            wakeLock.Acquire();
            intent.SetClass(context, typeof(GPSDroidService));
            context.StartService(intent);
        }
        public static void RunIntentInService(Context context, Intent intent, string wakleLockTag)
        {
            lock (mutex)
            {
                if (sWakeLock == null)
                {
                    // This is called from BroadcastReceiver, there is no init.
                    var pm = PowerManager.FromContext(context);
                    sWakeLock = pm.NewWakeLock(WakeLockFlags.Partial, "My WakeLock Tag");
                }
            }

            sWakeLock.Acquire();
            intent.SetClass(context, typeof(CloudNotificationIntentService));
            context.StartService(intent);
        }
 public static void RunIntentInService(Context context, Intent intent)
 {
     lock (Lock)
     {
         if (_sWakeLock == null)
         {
             // This is called from BroadcastReceiver, there is no init.
             var pm = PowerManager.FromContext(context);
             _sWakeLock = pm.NewWakeLock(
                 WakeLockFlags.Partial, "My WakeLock Tag");
         }
     }
     _sWakeLock.Acquire();
     intent.SetClass(context, typeof(MyIntentService));
     context.StartService(intent);
 }
예제 #12
0
        internal static void RunIntentInService(Context context, Intent intent, string className)
        {
            lock (LOCK)
            {
                if (sWakeLock == null)
                {
                    // This is called from BroadcastReceiver, there is no init.
                    var pm = PowerManager.FromContext(context);
                    sWakeLock = pm.NewWakeLock(WakeLockFlags.Partial, WAKELOCK_KEY);
                }
            }

            Log.Verbose(TAG, "Acquiring wakelock");
            sWakeLock.Acquire();
            intent.SetClassName(context, className);
            context.StartService(intent);
        }
예제 #13
0
        internal static void RunIntentInService(Context context, Intent intent, Type classType)
        {
            lock (Lock)
            {
                if (sWakeLock == null)
                {
                    // This is called from BroadcastReceiver, there is no init.
                    var pm = PowerManager.FromContext(context);
                    sWakeLock = pm.NewWakeLock(WakeLockFlags.Partial, WakelockKey);
                }
            }

            //Logger.Debug("Acquiring wakelock");
            sWakeLock.Acquire();
            //intent.SetClassName(context, className);
            intent.SetClass(context, classType);

            context.StartService(intent);
        }
예제 #14
0
        public override void OnReceive(Context context, Intent intent)
        {
            PowerManager.WakeLock sWakeLock;
            var pm = PowerManager.FromContext(context);

            sWakeLock = pm.NewWakeLock(WakeLockFlags.Full | WakeLockFlags.ScreenBright | WakeLockFlags.AcquireCausesWakeup,
                                       "Reminder TAG");
            sWakeLock.Acquire();

            var      message    = intent.GetStringExtra("message");
            var      title      = intent.GetStringExtra("title");
            TimeSpan alarmSaati = TimeSpan.Parse(intent.GetStringExtra("alarmSaati"));
            string   _id        = title + alarmSaati.ToString(@"hh\:mm");
            int      _alarmId   = _id.GetHashCode();

            var resultIntent = new Intent(context, typeof(MainActivity));

            resultIntent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);

            var pending = PendingIntent.GetActivity(context, 0,
                                                    resultIntent,
                                                    PendingIntentFlags.CancelCurrent);

            var builder =
                new Notification.Builder(context)
                .SetContentTitle(title)
                .SetContentText(message)
                .SetSmallIcon(Resource.Drawable.Icon)
                .SetDefaults(NotificationDefaults.Lights)
                .SetOngoing(true);

            builder.SetContentIntent(pending);

            var notification = builder.Build();

            var manager = NotificationManager.FromContext(context);

            manager.Notify(_alarmId, notification);

            sWakeLock.Release();
        }
예제 #15
0
        public override void OnReceive(Context context, Intent intent)
        {
            PowerManager.WakeLock sWakeLock;
            var pm = PowerManager.FromContext(context);

            sWakeLock = pm.NewWakeLock(WakeLockFlags.Full | WakeLockFlags.ScreenBright | WakeLockFlags.AcquireCausesWakeup,
                                       "Alarm TAG");
            sWakeLock.Acquire();

            string   alarmAdi      = intent.GetStringExtra("alarmAdi");
            TimeSpan alarmSaati    = TimeSpan.Parse(intent.GetStringExtra("alarmSaati"));
            int      alarmInterval = int.Parse(intent.GetStringExtra("interval"));
            int      alarmVolume   = int.Parse(intent.GetStringExtra("volume"));
            int      alarmPresses  = int.Parse(intent.GetStringExtra("presses"));
            int      alarmShakes   = int.Parse(intent.GetStringExtra("shakes"));

            intent.RemoveExtra("alarmAdi");
            intent.RemoveExtra("alarmSaati");
            intent.RemoveExtra("interval");
            intent.RemoveExtra("volume");
            intent.RemoveExtra("presses");
            intent.RemoveExtra("shakes");

            var tmp = new Intent(context, typeof(AlarmActivity));

            tmp.AddFlags(ActivityFlags.NewTask);
            tmp.AddFlags(ActivityFlags.NoHistory);

            tmp.PutExtra("alarmSaati", alarmSaati.ToString());
            tmp.PutExtra("alarmAdi", alarmAdi);
            tmp.PutExtra("interval", alarmInterval.ToString());
            tmp.PutExtra("volume", alarmVolume.ToString());
            tmp.PutExtra("presses", alarmPresses.ToString());
            tmp.PutExtra("shakes", alarmShakes.ToString());

            context.StartActivity(tmp);

            sWakeLock.Release();
        }
예제 #16
0
            public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {
                if (container == null)
                {
                    // Currently in a layout without a container, so no reason to create our view.
                    return(null);
                }

                RelativeLayout view = inflater.Inflate(Resource.Layout.BiblePassage, container, false) as RelativeLayout;

                view.SetOnTouchListener(this);

                PassageWebView = new WebView(Rock.Mobile.PlatformSpecific.Android.Core.Context);
                PassageWebView.SetBackgroundColor(Android.Graphics.Color.Rgb(28, 28, 28));
                PassageWebView.SetPadding(10, 0, 40, 0);

                view.AddView(PassageWebView);
                view.SetBackgroundColor(Android.Graphics.Color.Rgb(28, 28, 28));

                // get our power management control
                PowerManager pm = PowerManager.FromContext(Rock.Mobile.PlatformSpecific.Android.Core.Context);

                WakeLock = pm.NewWakeLock(WakeLockFlags.Full, "Bible Passage");

                BlockerView = new UIBlockerView(view, new System.Drawing.RectangleF(0, 0, NavbarFragment.GetCurrentContainerDisplayWidth( ), this.Resources.DisplayMetrics.HeightPixels));

                ResultView = new UIResultView(view, new System.Drawing.RectangleF(0, 0, NavbarFragment.GetCurrentContainerDisplayWidth( ), this.Resources.DisplayMetrics.HeightPixels),
                                              delegate
                {
                    if (RequestingBiblePassage == false)
                    {
                        RetrieveBiblePassage( );
                    }
                });

                return(view);
            }
예제 #17
0
            public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {
                if (container == null)
                {
                    // Currently in a layout without a container, so no reason to create our view.
                    return(null);
                }

                RelativeLayout view = inflater.Inflate(Resource.Layout.TaskWebView, container, false) as RelativeLayout;

                view.SetOnTouchListener(this);

                WebLayout = new WebLayout(Rock.Mobile.PlatformSpecific.Android.Core.Context);
                WebLayout.LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);
                WebLayout.SetBackgroundColor(Android.Graphics.Color.Black);

                view.AddView(WebLayout);

                ResultView = new UIResultView(view, new System.Drawing.RectangleF(0, 0, NavbarFragment.GetCurrentContainerDisplayWidth( ), this.Resources.DisplayMetrics.HeightPixels),
                                              delegate
                {
                    ResultView.Hide( );

                    if (string.IsNullOrEmpty(Url) == false)
                    {
                        ProcessUrl( );
                    }
                });

                // get our power management control
                PowerManager pm = PowerManager.FromContext(Rock.Mobile.PlatformSpecific.Android.Core.Context);

                WakeLock = pm.NewWakeLock(WakeLockFlags.Full, "TaskWeb");

                return(view);
            }
        public override void OnCreate()
        {
            base.OnCreate();

            this.disposable = new CompositeDisposable();

            this.wakeLock = PowerManager.FromContext(this).NewWakeLock(WakeLockFlags.Partial, "espera-wake-lock");
            this.wifiLock = WifiManager.FromContext(this).CreateWifiLock(WifiMode.Full, "espera-wifi-lock");

            NetworkMessenger.Instance.WhenAnyValue(x => x.IsConnected).Where(x => x)
            .Subscribe(x => this.NotifyNetworkMessengerConnected())
            .DisposeWith(this.disposable);

            NetworkMessenger.Instance.Disconnected.Subscribe(x => this.NotifyNetworkMessengerDisconnected())
            .DisposeWith(this.disposable);

            var userSettings = Locator.Current.GetService <UserSettings>();

            NetworkMessenger.Instance.WhenAnyValue(x => x.IsConnected).SampleAndCombineLatest(userSettings
                                                                                              .WhenAnyValue(x => x.Port).DistinctUntilChanged(), (connected, _) => connected)
            .Where(x => x)
            .Subscribe(x => NetworkMessenger.Instance.Disconnect())
            .DisposeWith(this.disposable);

            AndroidVolumeRequests.Instance.VolumeDown.CombineLatest(NetworkMessenger.Instance.WhenAnyValue(x => x.IsConnected),
                                                                    NetworkMessenger.Instance.WhenAnyValue(x => x.AccessPermission),
                                                                    (_, connected, permission) => connected && permission == NetworkAccessPermission.Admin)
            .Where(x => x)
            .SelectMany(_ => NetworkMessenger.Instance.GetVolume().ToObservable().SwallowNetworkExceptions())
            .Where(currentVolume => currentVolume > 0)
            .Select(currentVolume => Math.Max(currentVolume - 0.1f, 0))
            .Select(volume => NetworkMessenger.Instance.SetVolume(volume).ToObservable().SwallowNetworkExceptions())
            .Concat()
            .Subscribe()
            .DisposeWith(this.disposable);

            AndroidVolumeRequests.Instance.VolumeUp.CombineLatest(NetworkMessenger.Instance.WhenAnyValue(x => x.IsConnected),
                                                                  NetworkMessenger.Instance.WhenAnyValue(x => x.AccessPermission),
                                                                  (_, connected, permission) => connected && permission == NetworkAccessPermission.Admin)
            .Where(x => x)
            .SelectMany(_ => NetworkMessenger.Instance.GetVolume().ToObservable().SwallowNetworkExceptions())
            .Where(currentVolume => currentVolume < 1)
            .Select(currentVolume => Math.Min(currentVolume + 0.1f, 1))
            .Select(volume => NetworkMessenger.Instance.SetVolume(volume).ToObservable().SwallowNetworkExceptions())
            .Concat()
            .Subscribe()
            .DisposeWith(this.disposable);

            var androidSettings = Locator.Current.GetService <AndroidSettings>();

            NetworkMessenger.Instance.WhenAnyValue(x => x.IsConnected).CombineLatest(androidSettings.WhenAnyValue(x => x.SaveEnergy), (connected, saveEnergy) =>
            {
                if (connected && !saveEnergy)
                {
                    this.wakeLock.Acquire();
                    this.wifiLock.Acquire();
                }

                else if (!connected)
                {
                    this.ReleaseWakeLocks();
                }

                return(Unit.Default);
            })
            .Subscribe()
            .DisposeWith(this.disposable);
        }
예제 #19
0
                public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
                {
                    base.OnCreateView(inflater, container, savedInstanceState);

                    // get the root control from our .axml
                    var layout = inflater.Inflate(Resource.Layout.Notes, container, false) as RelativeLayout;

                    // get the refresh button from the layout
                    RefreshButton = layout.FindViewById <Button>(Resource.Id.refreshButton);

                    // create our overridden lockable scroll view
                    ScrollView = new LockableScrollView(Rock.Mobile.PlatformSpecific.Android.Core.Context);
                    ScrollView.ScrollBarStyle            = ScrollbarStyles.InsideInset;
                    ScrollView.OverScrollMode            = OverScrollMode.Always;
                    ScrollView.VerticalScrollbarPosition = ScrollbarPosition.Default;
                    ScrollView.LayoutParameters          = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MatchParent, RelativeLayout.LayoutParams.MatchParent);
                    ScrollView.OnTouchIntercept          = OnInterceptTouchEvent;
                    ScrollView.OnChangedScroll           = OnScrollChanged;
                    ((RelativeLayout.LayoutParams)ScrollView.LayoutParameters).AddRule(LayoutRules.CenterHorizontal);
                    ((RelativeLayout.LayoutParams)ScrollView.LayoutParameters).AddRule(LayoutRules.Below, Resource.Id.refreshButton);

                    // add it to our main layout.
                    layout.AddView(ScrollView);

                    Indicator            = layout.FindViewById <ProgressBar>(Resource.Id.progressBar);
                    Indicator.Visibility = ViewStates.Gone;
                    Indicator.SetBackgroundColor(Rock.Mobile.UI.Util.GetUIColor(0));
                    Indicator.BringToFront();

                    // create the layout that will contain the notes
                    ScrollViewLayout = new RelativeLayout(Rock.Mobile.PlatformSpecific.Android.Core.Context);
                    ScrollView.AddView(ScrollViewLayout);
                    ScrollViewLayout.SetOnTouchListener(this);

                    RefreshButton.Click += (object sender, EventArgs e) =>
                    {
                        DeleteNote( );

                        PrepareCreateNotes(  );
                    };

                    // if the refresh button isn't enabled, hide it
                    if (MobileApp.Shared.Network.RockLaunchData.Instance.Data.DeveloperModeEnabled == false)
                    {
                        RefreshButton.Visibility = ViewStates.Gone;
                    }

                    // get our power management control
                    PowerManager pm = PowerManager.FromContext(Rock.Mobile.PlatformSpecific.Android.Core.Context);

                    WakeLock = pm.NewWakeLock(WakeLockFlags.Full, "Notes");

                    ResultView = new UIResultView(layout, new System.Drawing.RectangleF(0, 0, NavbarFragment.GetCurrentContainerDisplayWidth( ), this.Resources.DisplayMetrics.HeightPixels), OnResultViewDone);

                    ResultView.Hide( );

                    // setup the tutorial overlay
                    TutorialBacker = new View(Rock.Mobile.PlatformSpecific.Android.Core.Context);
                    TutorialBacker.LayoutParameters = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent);
                    TutorialBacker.Alpha            = 0;
                    TutorialBacker.SetBackgroundColor(Android.Graphics.Color.Black);
                    layout.AddView(TutorialBacker);

                    AnimatingTutorial = false;
                    TutorialOverlay   = new ImageView(Rock.Mobile.PlatformSpecific.Android.Core.Context);
                    TutorialOverlay.LayoutParameters = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);
                    ((RelativeLayout.LayoutParams)TutorialOverlay.LayoutParameters).AddRule(LayoutRules.CenterInParent);
                    TutorialOverlay.Alpha = 0;
                    TutorialOverlay.SetBackgroundColor(Android.Graphics.Color.Transparent);
                    layout.AddView(TutorialOverlay);

                    NavBarRevealTracker = new NavBarReveal( );

                    return(layout);
                }
예제 #20
0
        public override void OnReceive(Context context, Intent intent)
        {
            var powerManager = PowerManager.FromContext(context);
            var wakeLock     = powerManager.NewWakeLock(WakeLockFlags.Partial, WakeLockTag);

            wakeLock.Acquire();

            var dataStore = ServiceLocator.Instance.Get <IVplanDataStore>();

            Task.Run(async() =>
            {
                try {
                    var diff = await dataStore.Refresh();

                    if (diff.NewBookmarkedChanges.Any() || diff.NewNewSchoolClassBookmarks.Any())
                    {
                        string text;
                        if (diff.NewBookmarkedChanges.Any())
                        {
                            text = diff.NewBookmarkedChanges.Count() + " neue Einträge";
                        }
                        else
                        {
                            text = diff.NewNewSchoolClassBookmarks.Count() + " neue Klassen";
                        }

                        var notificationManager = NotificationManager.FromContext(context);

                        if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
                        {
                            var channel = new NotificationChannel(ChannelId, "Vertretungsplan", NotificationImportance.High);
                            channel.EnableLights(true);
                            channel.EnableVibration(true);
                            notificationManager.CreateNotificationChannel(channel);
                        }

                        var resultIntent = new Intent(context, typeof(MainActivity));
                        var stackBuilder = Android.Support.V4.App.TaskStackBuilder.Create(context);
                        stackBuilder.AddNextIntentWithParentStack(resultIntent);
                        var pendingIntent = stackBuilder.GetPendingIntent(0, 0);

                        var builder = new NotificationCompat.Builder(context, ChannelId)
                                      .SetContentTitle("Neuer Vertretungsplan verfügbar")
                                      .SetContentText(text)
                                      .SetSmallIcon(Resource.Mipmap.Icon)
                                      .SetPriority(NotificationCompat.PriorityMax)
                                      .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
                                      .SetDefaults(NotificationCompat.DefaultVibrate | NotificationCompat.DefaultLights)
                                      .SetContentIntent(pendingIntent)
                                      .SetAutoCancel(true);
                        notificationManager.Notify(NotificationId, builder.Build());
                    }
                }
                catch (Exception e)
                {
                }
                finally
                {
                    wakeLock.Release();
                }
            });
        }