Android Open Source - AndroidWeatherInformation Weather Information App






From Project

Back to project page AndroidWeatherInformation.

License

The source code is released under:

# Legal information ## Weather Information **Weather Information** is licensed under the Apache License, Version 2.0. The full text of the license can be found in: - LICENSE This license applies...

If you think the Android project AndroidWeatherInformation listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * Copyright 2014 Gustavo Martin Morcuende
 *// ww  w . ja  va2  s  .  co  m
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package name.gumartinm.weather.information.app;

import android.app.Application;
import android.content.Context;

import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.StandardExceptionParser;
import com.google.android.gms.analytics.Tracker;

import java.util.HashMap;

import name.gumartinm.weather.information.BuildConfig;
import name.gumartinm.weather.information.R;
import timber.log.Timber;

public class WeatherInformationApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        if (BuildConfig.DEBUG_MODE) {
            Timber.plant(new Timber.DebugTree());
        } else {
            // Trying to avoid this bug: https://code.google.com/p/android/issues/detail?id=82157
            // When Google fixes the bug I will be able to rely on the AndroidManifest.xml configuration.
            final GoogleAnalyticsTrackers analyticsTrackers =
                    new GoogleAnalyticsTrackers(this.getApplicationContext());
            analyticsTrackers.setGlobalTracker();

            Timber.plant(new GoogleAnalyticsReportingTree(analyticsTrackers));
        }
    }

    private static class GoogleAnalyticsTrackers {

        private enum TrackerName {
            EXCEPTIONS_TRACKER, // Tracker used when logging caught exceptions in this app.
            GLOBAL_TRACKER,     // Tracker used when logging uncaught exception in this app.
        };

        private final HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();
        private final Context appContext;

        private GoogleAnalyticsTrackers(final Context appContext) {
            this.appContext = appContext;
        }

        /**
         * Trying to avoid this bug: https://code.google.com/p/android/issues/detail?id=82157
         * When Google fixes the bug I will be able to rely on the AndroidManifest.xml configuration.
         */
        private void setGlobalTracker() {
            this.getTracker(TrackerName.GLOBAL_TRACKER);
        }

        /**
         * Get tracker
         * @param trackerId
         * @return Tracker
         */
        private synchronized Tracker getTracker(final TrackerName trackerId) {
            if (!mTrackers.containsKey(trackerId)) {

                final GoogleAnalytics analytics = GoogleAnalytics.getInstance(appContext.getApplicationContext());

                final Tracker t = (trackerId == TrackerName.EXCEPTIONS_TRACKER) ?
                        analytics.newTracker(R.xml.exceptions_tracker) :
                        (trackerId == TrackerName.GLOBAL_TRACKER) ?
                        analytics.newTracker(R.xml.global_tracker) :
                        analytics.newTracker(R.xml.exceptions_tracker);

                // Do not retrieve user's information. I strongly care about user's privacy.
                t.enableAdvertisingIdCollection(false);

                mTrackers.put(trackerId, t);
            }
            return mTrackers.get(trackerId);
        }

        /**
         * Send exception
         * @param exception
         * @param trackerName
         */
        private void send(final Throwable exception, final TrackerName trackerName) {
            final Tracker tracker = this.getTracker(trackerName);

            // Build and send exception.
            tracker.send(new HitBuilders.ExceptionBuilder()
                    .setDescription(
                            new StandardExceptionParser(appContext.getApplicationContext(), null)
                                    .getDescription(Thread.currentThread().getName(), exception))
                    .setFatal(false)
                    .build());
        }
    }

    private static class GoogleAnalyticsReportingTree extends Timber.HollowTree {
        private final GoogleAnalyticsTrackers analyticsTrackers;

        private GoogleAnalyticsReportingTree(final GoogleAnalyticsTrackers analyticsTrackers) {
            this.analyticsTrackers = analyticsTrackers;
        }

        @Override
        public void i(final String message, final Object... args) {
            // Do nothing, just report exceptions.
        }

        @Override
        public void i(final Throwable t, final String message, final Object... args) {
            i(message, args); // Just add to the log.
        }

        @Override
        public void e(final String message, final Object... args) {
            i("ERROR: " + message, args); // Just add to the log.
        }

        @Override
        public void e(final Throwable exception, final String message, final Object... args) {
            e(message, args);

            this.analyticsTrackers.send(exception, GoogleAnalyticsTrackers.TrackerName.EXCEPTIONS_TRACKER);
        }
    }
}




Java Source Code List

name.gumartinm.weather.information.activity.AboutActivity.java
name.gumartinm.weather.information.activity.LicensesActivity.java
name.gumartinm.weather.information.activity.MainTabsActivity.java
name.gumartinm.weather.information.activity.MapActivity.java
name.gumartinm.weather.information.activity.PreferencesActivity.java
name.gumartinm.weather.information.activity.SpecificActivity.java
name.gumartinm.weather.information.app.WeatherInformationApp.java
name.gumartinm.weather.information.boot.BootReceiver.java
name.gumartinm.weather.information.fragment.APIKeyNoticeDialogFragment.java
name.gumartinm.weather.information.fragment.current.CurrentFragment.java
name.gumartinm.weather.information.fragment.map.MapButtonsFragment.java
name.gumartinm.weather.information.fragment.map.MapProgressFragment.java
name.gumartinm.weather.information.fragment.overview.OverviewAdapter.java
name.gumartinm.weather.information.fragment.overview.OverviewEntry.java
name.gumartinm.weather.information.fragment.overview.OverviewFragment.java
name.gumartinm.weather.information.fragment.preferences.PreferencesFragment.java
name.gumartinm.weather.information.fragment.specific.SpecificFragment.java
name.gumartinm.weather.information.httpclient.Consts.java
name.gumartinm.weather.information.httpclient.ContentType.java
name.gumartinm.weather.information.httpclient.CustomHTTPClient.java
name.gumartinm.weather.information.model.DatabaseQueries.java
name.gumartinm.weather.information.model.WeatherLocationContract.java
name.gumartinm.weather.information.model.WeatherLocationDbHelper.java
name.gumartinm.weather.information.model.WeatherLocationDbQueries.java
name.gumartinm.weather.information.model.WeatherLocation.java
name.gumartinm.weather.information.model.currentweather.Clouds.java
name.gumartinm.weather.information.model.currentweather.Coord.java
name.gumartinm.weather.information.model.currentweather.Current.java
name.gumartinm.weather.information.model.currentweather.Main.java
name.gumartinm.weather.information.model.currentweather.Rain.java
name.gumartinm.weather.information.model.currentweather.Snow.java
name.gumartinm.weather.information.model.currentweather.Sys.java
name.gumartinm.weather.information.model.currentweather.Weather.java
name.gumartinm.weather.information.model.currentweather.Wind.java
name.gumartinm.weather.information.model.forecastweather.City.java
name.gumartinm.weather.information.model.forecastweather.Coord.java
name.gumartinm.weather.information.model.forecastweather.Forecast.java
name.gumartinm.weather.information.model.forecastweather.List.java
name.gumartinm.weather.information.model.forecastweather.Temp.java
name.gumartinm.weather.information.model.forecastweather.Weather.java
name.gumartinm.weather.information.notification.NotificationIntentService.java
name.gumartinm.weather.information.parser.JPOSCurrentParser.java
name.gumartinm.weather.information.parser.JPOSForecastParser.java
name.gumartinm.weather.information.service.IconsList.java
name.gumartinm.weather.information.service.PermanentStorage.java
name.gumartinm.weather.information.service.ServiceCurrentParser.java
name.gumartinm.weather.information.service.ServiceForecastParser.java
name.gumartinm.weather.information.service.conversor.PressureUnitsConversor.java
name.gumartinm.weather.information.service.conversor.TempUnitsConversor.java
name.gumartinm.weather.information.service.conversor.UnitsConversor.java
name.gumartinm.weather.information.service.conversor.WindUnitsConversor.java
name.gumartinm.weather.information.widget.WidgetConfigure.java
name.gumartinm.weather.information.widget.WidgetIntentService.java
name.gumartinm.weather.information.widget.WidgetProvider.java