/*
* Copyright (C) 2015 AChep@xda <artemchep@gmail.com>
*
* 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 2
* 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
package com.achep.base;
import android.app.Application;
import android.content.Context;
import android.support.annotation.NonNull;
import com.achep.base.billing.CheckoutInternal;
import com.achep.base.interfaces.IConfiguration;
import com.achep.base.interfaces.IOnLowMemory;
import com.achep.base.permissions.RuntimePermissions;
import com.achep.base.tests.Check;
import com.achep.base.timber.ReleaseTree;
import com.drivemode.android.typeface.TypefaceHelper;
import com.squareup.leakcanary.LeakCanary;
import com.squareup.leakcanary.RefWatcher;
import org.solovyev.android.checkout.Checkout;
import org.solovyev.android.checkout.ProductTypes;
import org.solovyev.android.checkout.Products;
import java.util.Collections;
import timber.log.Timber;
/**
* Created by Artem Chepurnoy on 17.02.2015.
*/
public class AppHeap implements IOnLowMemory {
private static AppHeap sInstance;
@NonNull
public static AppHeap getInstance() {
if (sInstance == null) {
sInstance = new AppHeap();
}
return sInstance;
}
@NonNull
public static Checkout getCheckout() {
return getCheckoutInternal().getCheckout();
}
@NonNull
public static CheckoutInternal getCheckoutInternal() {
Check.getInstance().isNonNull(getInstance().mCheckoutInternal);
return getInstance().mCheckoutInternal;
}
@NonNull
public static Context getContext() {
Check.getInstance().isNonNull(getInstance().mApplication);
return getInstance().mApplication;
}
@NonNull
public static RefWatcher getRefWatcher() {
Check.getInstance().isNonNull(getInstance().mApplication);
return getInstance().mRefWatcher;
}
/**
* Application wide {@link org.solovyev.android.checkout.Checkout} instance
* (can be used anywhere in the app). This instance contains all available
* products in the app.
*/
@SuppressWarnings("NullableProblems")
@NonNull
private CheckoutInternal mCheckoutInternal;
private IConfiguration mConfiguration;
private Application mApplication;
private RefWatcher mRefWatcher;
/**
* Must be called at {@link android.app.Application#onCreate()}
*/
public void init(@NonNull Application application, @NonNull IConfiguration configuration) {
mRefWatcher = LeakCanary.install(application);
mCheckoutInternal = new CheckoutInternal(application, Products.create()
.add(ProductTypes.IN_APP, configuration.getBilling().getProducts())
.add(ProductTypes.SUBSCRIPTION, Collections.singletonList("")));
mConfiguration = configuration;
mApplication = application;
// Setup log
/*
if (DEBUG) {
Timber.plant(new Timber.DebugTree());
} else {
Timber.plant(new ReleaseTree());
}
*/
Timber.plant(new ReleaseTree());
TypefaceHelper.initialize(application);
RuntimePermissions.getInstance().load(application);
}
@NonNull
public final IConfiguration getConfiguration() {
return mConfiguration;
}
/**
* {@inheritDoc}
*/
@Override
public void onLowMemory() {
}
}