Example #1
0
        public void CanAccessDefaultLocation()
        {
            Assert.IsNotNull(LocationData.Default);
            LocationData location = LocationData.Default;

            Assert.IsTrue(location.Equals(LocationData.Default));
        }
Example #2
0
        public void EqualsToString(bool expected, string left, string right)
        {
            LocationData location = left;

            Assert.AreEqual(expected, location.Equals(right));

            if (expected)
            {
                Assert.AreEqual(0, location.CompareTo(right));
            }
            else
            {
                Assert.AreNotEqual(0, location.CompareTo(right));
            }
        }
Example #3
0
        public void EqualsToObject(bool expected, string left, string right)
        {
            LocationData loc1 = left;
            LocationData loc2 = right;

            Assert.AreEqual(expected, loc1.Equals(loc2));

            if (expected)
            {
                Assert.AreEqual(0, loc1.CompareTo(loc2));
            }
            else
            {
                Assert.AreNotEqual(0, loc1.CompareTo(loc2));
            }
        }
Example #4
0
        public static void TileUpdater(LocationData location, Weather weather)
        {
            // And send the notification to the tile
            if (location.Equals(Settings.HomeData))
            {
                // Update both primary and secondary tile if it exists
                var appTileUpdater = TileUpdateManager.CreateTileUpdaterForApplication();
                // Lock instance to avoid rare concurrency issue
                // (when BGTask is running and tile is updated via WeatherNowPage)
                lock (appTileUpdater)
                {
                    UpdateContent(appTileUpdater, weather);
                }
                if (SecondaryTileUtils.Exists(location.query))
                {
                    var tileUpdater = TileUpdateManager.CreateTileUpdaterForSecondaryTile(
                        SecondaryTileUtils.GetTileId(location.query));
                    lock (tileUpdater)
                    {
                        UpdateContent(tileUpdater, weather);
                    }
                }

                TileUpdated = true;
            }
            else
            {
                // Update secondary tile
                if (SecondaryTileUtils.Exists(location.query))
                {
                    var tileUpdater = TileUpdateManager.CreateTileUpdaterForSecondaryTile(
                        SecondaryTileUtils.GetTileId(location.query));
                    // Lock instance to avoid rare concurrency issue
                    // (when BGTask is running and tile is updated via WeatherNowPage)
                    lock (tileUpdater)
                    {
                        UpdateContent(tileUpdater, weather);
                    }
                }
            }
        }
Example #5
0
        private async Task DataSyncResume()
        {
            if (!receiverRegistered)
            {
                IntentFilter filter = new IntentFilter();
                filter.AddAction(WearableHelper.SettingsPath);
                filter.AddAction(WearableHelper.LocationPath);
                filter.AddAction(WearableHelper.WeatherPath);
                filter.AddAction(WearableHelper.IsSetupPath);

                LocalBroadcastManager.GetInstance(Activity)
                .RegisterReceiver(dataReceiver, filter);
                receiverRegistered = true;
            }

            /* Update view on resume
             * ex. If temperature unit changed
             */
            // New Page = loaded - true
            // Navigating back to frag = !loaded - false
            if (loaded || wLoader == null)
            {
                DataSyncRestore();
            }
            else if (wLoader != null && !loaded)
            {
                if (wLoader.GetWeather()?.IsValid() == true)
                {
                    Weather weather = wLoader.GetWeather();

                    /*
                     *  DateTime < 0 - This instance is earlier than value.
                     *  DateTime == 0 - This instance is the same as value.
                     *  DateTime > 0 - This instance is later than value.
                     */
                    if (Settings.UpdateTime.CompareTo(weather.update_time.UtcDateTime) > 0)
                    {
                        // Data was updated while we we're away; loaded it up
                        if (location == null || !location.Equals(Settings.HomeData))
                        {
                            location = Settings.HomeData;
                        }

                        Activity?.RunOnUiThread(() => refreshLayout.Refreshing = true);

                        wLoader = new WeatherDataLoader(this.location, this, this);
                        await wLoader.ForceLoadSavedWeatherData();
                    }
                    else
                    {
                        // Check weather data expiration
                        TimeSpan span = DateTimeOffset.Now - weather.update_time;
                        if (span.TotalMinutes > Settings.DefaultInterval)
                        {
                            // send request to refresh data on connected device
                            Activity?.StartService(new Intent(Activity, typeof(WearableDataListenerService))
                                                   .SetAction(WearableDataListenerService.ACTION_REQUESTWEATHERUPDATE)
                                                   .PutExtra(WearableDataListenerService.EXTRA_FORCEUPDATE, true));
                        }

                        weatherView.UpdateView(wLoader.GetWeather());
                        SetView(weatherView);
                        mCallback?.OnWeatherViewUpdated(weatherView);
                        loaded = true;
                    }
                }
                else
                {
                    // Data is null; restore
                    DataSyncRestore();
                }
            }
        }
Example #6
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            if (e.Parameter != null)
            {
                string arg = e.Parameter.ToString();

                switch (arg)
                {
                case "view-alerts":
                    GotoAlertsPage();
                    break;

                default:
                    break;
                }
            }

            LocationData LocParameter = e.Parameter as LocationData;

            if (e.NavigationMode == NavigationMode.New)
            {
                // Reset loader if new page instance created
                location = null;
                wLoader  = null;
                MainViewer.ChangeView(null, 0, null);

                // New page instance created, so restore
                if (LocParameter != null)
                {
                    location = LocParameter;
                    wLoader  = new WeatherDataLoader(location, this, this);
                }

                await Restore();
            }
            else
            {
                LocationData homeData = Settings.HomeData;

                // Did home change?
                bool homeChanged = false;
                if (location != null && Frame.BackStack.Count == 0)
                {
                    if (!location.Equals(homeData))
                    {
                        location    = homeData;
                        homeChanged = true;
                    }
                }

                if (wLoader != null)
                {
                    var userlang = GlobalizationPreferences.Languages.First();
                    var culture  = new CultureInfo(userlang);
                    var locale   = wm.LocaleToLangCode(culture.TwoLetterISOLanguageName, culture.Name);

                    // Reset loader if source, query or locale is different
                    bool resetLoader = WeatherView.WeatherSource != Settings.API || homeChanged;
                    if (wm.SupportsWeatherLocale && !resetLoader)
                    {
                        resetLoader = WeatherView.WeatherLocale != locale;
                    }

                    if (resetLoader)
                    {
                        wLoader = null;
                    }
                }

                // Update view on resume
                // ex. If temperature unit changed
                if ((wLoader != null) && !homeChanged)
                {
                    await Resume();

                    if (location.query == homeData.query)
                    {
                        // Clear backstack since we're home
                        Frame.BackStack.Clear();
                        SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Collapsed;
                    }
                }
                else
                {
                    await Restore();
                }
            }
        }
        private async Task Resume()
        {
            /* Update view on resume
             * ex. If temperature unit changed
             */

            LocationData homeData = Settings.HomeData;

            // Did home change?
            bool homeChanged = false;

            if (location != null && FragmentManager.BackStackEntryCount == 0)
            {
                if (!location.Equals(homeData) && Tag == "home")
                {
                    location    = homeData;
                    wLoader     = null;
                    homeChanged = true;
                }
            }

            // New Page = loaded - true
            // Navigating back to frag = !loaded - false
            if (loaded || homeChanged || wLoader == null)
            {
                await Restore();

                loaded = true;
            }
            else if (wLoader != null && !loaded)
            {
                var culture = System.Globalization.CultureInfo.CurrentCulture;
                var locale  = wm.LocaleToLangCode(culture.TwoLetterISOLanguageName, culture.Name);

                // Reset if source || locale is different
                if (weatherView.WeatherSource != Settings.API ||
                    wm.SupportsWeatherLocale && weatherView.WeatherLocale != locale)
                {
                    await Restore();

                    loaded = true;
                }
                else if (wLoader.GetWeather()?.IsValid() == true)
                {
                    Weather weather = wLoader.GetWeather();

                    // Update weather if needed on resume
                    if (Settings.FollowGPS && await UpdateLocation())
                    {
                        // Setup loader from updated location
                        wLoader = new WeatherDataLoader(this.location, this, this);
                        await RefreshWeather(false);

                        loaded = true;
                    }
                    else
                    {
                        // Check weather data expiration
                        if (!int.TryParse(weather.ttl, out int ttl))
                        {
                            ttl = Settings.DefaultInterval;
                        }
                        TimeSpan span = DateTimeOffset.Now - weather.update_time;
                        if (span.TotalMinutes > ttl)
                        {
                            await RefreshWeather(false);
                        }
                        else
                        {
                            weatherView.UpdateView(wLoader.GetWeather());
                            SetView(weatherView);
                            loaded = true;
                        }
                    }
                }
            }
        }