com.fastbootmobile.encore.app.OmniMusic.java Source code

Java tutorial

Introduction

Here is the source code for com.fastbootmobile.encore.app.OmniMusic.java

Source

/*
 * Copyright (C) 2014 Fastboot Mobile, LLC.
 *
 * This program is free software; you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation; either version 3 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
 * the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program;
 * if not, see <http://www.gnu.org/licenses>.
 */

package com.fastbootmobile.encore.app;

import android.app.Application;
import android.content.Context;
import android.net.http.HttpResponseCache;
import android.os.Build;
import android.util.Log;

import com.fastbootmobile.encore.api.echonest.AutoMixManager;
import com.fastbootmobile.encore.art.ImageCache;
import com.fastbootmobile.encore.framework.PluginsLookup;
import com.fastbootmobile.encore.providers.ProviderAggregator;
import com.fastbootmobile.encore.utils.Utils;
import com.joshdholtz.sentry.Sentry;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.File;
import java.io.IOException;

import uk.co.chrisjenx.calligraphy.CalligraphyConfig;

/**
 * Application structure wrapper to handle various application-wide (activity + services) properties
 */
public class OmniMusic extends Application {
    private static final String TAG = "OmniMusic";

    private static final String PROCESS_APP = "main";
    private static final String PROCESS_LOCALPROVIDER = "localprovider";
    private static final String PROCESS_BASSBOOST = "bassboost";

    private RefWatcher mRefWatcher;

    public static RefWatcher getRefWatcher(Context context) {
        OmniMusic app = (OmniMusic) context.getApplicationContext();
        return app.mRefWatcher;
    }

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

        // We need to filter here whether we're initializing the main app or an aux attached plugin
        String appName = Utils.getAppNameByPID(this, android.os.Process.myPid());
        final String process = appName.substring(appName.indexOf(':') + 1);

        Sentry.setCaptureListener(new Sentry.SentryEventCaptureListener() {
            @Override
            public Sentry.SentryEventBuilder beforeCapture(Sentry.SentryEventBuilder sentryEventBuilder) {
                JSONObject tags = sentryEventBuilder.getTags();
                try {
                    tags.put("OS", "Android " + Build.VERSION.RELEASE);
                    tags.put("OSCodename", Build.VERSION.CODENAME);
                    tags.put("Device", Build.DEVICE);
                    tags.put("Model", Build.MODEL);
                    tags.put("Manufacturer", Build.MANUFACTURER);
                    tags.put("AppVersionCode", String.valueOf(BuildConfig.VERSION_CODE));
                    tags.put("AppVersionName", BuildConfig.VERSION_NAME);
                    tags.put("AppFlavor", BuildConfig.FLAVOR);
                } catch (JSONException e) {
                    Log.e(TAG, "Failed to put a tag into Sentry", e);
                }

                sentryEventBuilder.addModule(process, BuildConfig.VERSION_NAME);
                return sentryEventBuilder;
            }
        });
        Sentry.init(this,
                "https://4dc1acbdb1cb423282e2a59f553e1153:9415087b9e1348c3ba4bed44be599f6a@sentry.fastboot.mobi/2");

        // Setup LeakCanary
        mRefWatcher = LeakCanary.install(this);

        if (PROCESS_APP.equals(process)) {
            // Setup the plugins system
            ProviderAggregator.getDefault().setContext(getApplicationContext());
            PluginsLookup.getDefault().initialize(getApplicationContext());

            /**
             * Note about the cache and EchoNest: The HTTP cache would sometimes cache request
             * we didn't want (such as status query for Taste Profile update). We're using
             * a hacked jEN library that doesn't cache these requests.
             */
            // Setup network cache
            try {
                final File httpCacheDir = new File(getCacheDir(), "http");
                final long httpCacheSize = 100 * 1024 * 1024; // 100 MiB
                final HttpResponseCache cache = HttpResponseCache.install(httpCacheDir, httpCacheSize);

                Log.i(TAG, "HTTP Cache size: " + cache.size() / 1024 / 1024 + "MB");
            } catch (IOException e) {
                Log.w(TAG, "HTTP response cache installation failed", e);
            }

            // Setup image cache
            ImageCache.getDefault().initialize(getApplicationContext());

            // Setup Automix system
            AutoMixManager.getDefault().initialize(getApplicationContext());

            // Setup custom fonts
            CalligraphyConfig.initDefault("fonts/Roboto-Regular.ttf", R.attr.fontPath);
        }
    }
}