com.bitants.wally.base.WallyApplication.java Source code

Java tutorial

Introduction

Here is the source code for com.bitants.wally.base.WallyApplication.java

Source

/*
 * Copyright (C) 2014 Freddie (Musenkishi) Lust-Hed
 *
 * 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 com.bitants.wally.base;

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

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.model.GlideUrl;
import com.crashlytics.android.Crashlytics;
import com.musenkishi.wally.BuildConfig;
import com.musenkishi.wally.dataprovider.DataProvider;
import com.musenkishi.wally.dataprovider.SharedPreferencesDataProvider;
import com.musenkishi.wally.dataprovider.okhttp.OkHttpUrlLoader;
import com.bitants.wally.fragments.SearchFragment;
import com.musenkishi.wally.models.ExceptionReporter;
import com.musenkishi.wally.models.filters.FilterAspectRatioKeys;
import com.musenkishi.wally.models.filters.FilterBoardsKeys;
import com.musenkishi.wally.models.filters.FilterGroupsStructure;
import com.musenkishi.wally.models.filters.FilterPurityKeys;
import com.musenkishi.wally.models.filters.FilterResOptKeys;
import com.musenkishi.wally.models.filters.FilterResolutionKeys;
import com.musenkishi.wally.models.filters.FilterTimeSpanKeys;
import com.squareup.okhttp.OkHttpClient;

import java.io.InputStream;
import java.util.HashMap;
import java.util.HashSet;

/**
 * Created by Musenkishi on 2014-07-25.
 */
public class WallyApplication extends Application {

    private static final int FAMILIAR_USER_COUNT = 3;

    private static boolean SHOULD_SHOW_CRASH_LOGGING_PERMISSION = false;
    private static DataProvider dataProvider;
    private static Context applicationContext;
    private static HashMap<Long, String> pairedDownloadIds;
    private static HashSet<Long> downloadIDs;
    private static HashMap<String, Object> searchFragmentMessages;

    private static Bitmap bitmapThumb;

    @Override
    public void onCreate() {
        super.onCreate();
        Glide.get(this).register(GlideUrl.class, InputStream.class,
                new OkHttpUrlLoader.Factory(new OkHttpClient()));
        applicationContext = getApplicationContext();
        startCrashLoggingIfUserAccepted();
        checkVersionInstalled(BuildConfig.VERSION_CODE);
    }

    private void checkVersionInstalled(int currentVersion) {
        int defaultVersion = 1;

        int latestVersion = getDataProviderInstance().getSharedPreferencesDataProviderInstance()
                .getLatestVersion(defaultVersion); //This is just to get a default version.

        if (latestVersion < currentVersion) {
            // The user comes from an app version where they might have
            // Wallbase filter settings that conflicts with Wallhaven's filters.
            // That's why the user's settings gets reset.
            if (latestVersion == defaultVersion) {
                getDataProviderInstance().getSharedPreferencesDataProviderInstance().getPrefs().edit().clear()
                        .apply();
            }
        }
        getDataProviderInstance().getSharedPreferencesDataProviderInstance()
                .setLatestVersion(BuildConfig.VERSION_CODE);
    }

    public static Context getContext() {
        return applicationContext;
    }

    public static boolean shouldShowCrashLoggingPermission() {
        return SHOULD_SHOW_CRASH_LOGGING_PERMISSION;
    }

    public static void setShouldShowCrashLoggingPermission(boolean shouldShow) {
        SHOULD_SHOW_CRASH_LOGGING_PERMISSION = shouldShow;
    }

    private void startCrashLoggingIfUserAccepted() {
        if (getDataProviderInstance().getSharedPreferencesDataProviderInstance()
                .getAppStartCount() >= FAMILIAR_USER_COUNT) {
            switch (getDataProviderInstance().getSharedPreferencesDataProviderInstance()
                    .hasUserApprovedCrashLogging()) {

            case SharedPreferencesDataProvider.CRASH_LOGGING_APPROVED:
                startCrashlytics(getContext());
                break;

            case SharedPreferencesDataProvider.CRASH_LOGGING_NOT_READ:
                SHOULD_SHOW_CRASH_LOGGING_PERMISSION = true;
                break;

            case SharedPreferencesDataProvider.CRASH_LOGGING_NOT_APPROVED:
                break;

            default:
                break;
            }
        } else {
            getDataProviderInstance().getSharedPreferencesDataProviderInstance().incrementAppStartCount();
        }
    }

    public static void startCrashlytics(Context context) {
        if (!BuildConfig.DEBUG) {
            Crashlytics.start(context);
        }
    }

    public static DataProvider getDataProviderInstance() {
        if (dataProvider == null) {
            dataProvider = new DataProvider(getContext(), new ExceptionReporter.OnReportListener() {
                @Override
                public void report(Class fromClass, String reason, String exceptionMessage) {
                    if (getDataProviderInstance().getSharedPreferencesDataProviderInstance()
                            .hasUserApprovedCrashLogging() == SharedPreferencesDataProvider.CRASH_LOGGING_APPROVED) {
                        String message = "Class: " + fromClass.getName() + ", reason: " + reason
                                + ", exceptionMessage: " + exceptionMessage;
                        Crashlytics.log(message);
                    }
                }
            });
        }
        return dataProvider;
    }

    public static HashMap<Long, String> getDownloadIDs() {
        if (pairedDownloadIds == null) {
            pairedDownloadIds = new HashMap<Long, String>();
        }
        return pairedDownloadIds;
    }

    public static FilterGroupsStructure getFilterSettings() {
        FilterGroupsStructure filterGroupsStructure = new FilterGroupsStructure();
        filterGroupsStructure.setTimespanFilter(dataProvider.getTimespan(FilterTimeSpanKeys.PARAMETER_KEY));
        filterGroupsStructure.setBoardsFilter(dataProvider.getBoards(FilterBoardsKeys.PARAMETER_KEY));
        filterGroupsStructure.setPurityFilter(dataProvider.getPurity(FilterPurityKeys.PARAMETER_KEY));
        filterGroupsStructure
                .setAspectRatioFilter(dataProvider.getAspectRatio(FilterAspectRatioKeys.PARAMETER_KEY));
        filterGroupsStructure.setResOptFilter(dataProvider.getResolutionOption(FilterResOptKeys.PARAMETER_KEY));
        filterGroupsStructure.setResolutionFilter(dataProvider.getResolution(FilterResolutionKeys.PARAMETER_KEY));
        return filterGroupsStructure;
    }

    public static Bitmap getBitmapThumb() {
        return bitmapThumb;
    }

    public static void setBitmapThumb(Bitmap bitmapThumb) {
        WallyApplication.bitmapThumb = bitmapThumb;
    }

    public static HashMap<String, Object> getSearchFragmentMessages() {
        if (searchFragmentMessages == null) {
            searchFragmentMessages = new HashMap<>();
        }
        return searchFragmentMessages;
    }

    public static HashMap<String, Object> readMessages(String fragmentTag) {
        HashMap<String, Object> messages = new HashMap<>();
        if (fragmentTag != null) {
            if (fragmentTag.equals(SearchFragment.TAG) && !getSearchFragmentMessages().isEmpty()) {
                messages.putAll(searchFragmentMessages);
                searchFragmentMessages.clear();
                return messages;
            }
        }
        return messages;
    }
}