package cl.monsoon.s1next;
import android.app.Application;
import android.content.Context;
import android.content.res.Configuration;
import android.os.StrictMode;
import com.bugsnag.android.Bugsnag;
import com.squareup.leakcanary.LeakCanary;
import javax.inject.Singleton;
import cl.monsoon.s1next.data.User;
import cl.monsoon.s1next.data.api.S1Service;
import cl.monsoon.s1next.data.api.UserValidator;
import cl.monsoon.s1next.data.pref.DownloadPreferencesManager;
import cl.monsoon.s1next.data.pref.GeneralPreferencesManager;
import cl.monsoon.s1next.data.pref.ThemeManager;
import cl.monsoon.s1next.util.ResourceUtil;
import cl.monsoon.s1next.view.activity.BaseActivity;
import cl.monsoon.s1next.view.adapter.delegate.PostAdapterDelegate;
import cl.monsoon.s1next.view.adapter.delegate.ThreadAdapterDelegate;
import cl.monsoon.s1next.view.dialog.LogoutDialogFragment;
import cl.monsoon.s1next.view.dialog.ThemeChangeDialogFragment;
import cl.monsoon.s1next.view.fragment.GeneralPreferenceFragment;
import cl.monsoon.s1next.view.fragment.PostListFragment;
import cl.monsoon.s1next.view.fragment.ReplyFragment;
import cl.monsoon.s1next.viewmodel.UserViewModel;
import cl.monsoon.s1next.widget.AppActivityLifecycleCallbacks;
import cl.monsoon.s1next.widget.EventBus;
import cl.monsoon.s1next.widget.WifiBroadcastReceiver;
import dagger.Component;
import okhttp3.OkHttpClient;
public final class App extends Application {
private static App sApp;
private GeneralPreferencesManager mGeneralPreferencesManager;
private AppComponent mAppComponent;
private AppActivityLifecycleCallbacks mAppActivityLifecycleCallbacks;
public static App get() {
return sApp;
}
public static AppComponent getAppComponent(Context context) {
return ((App) context.getApplicationContext()).mAppComponent;
}
@Override
public void onCreate() {
super.onCreate();
// enable StrictMode when debug
if (BuildConfig.DEBUG) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectAll()
.penaltyLog()
.build());
}
LeakCanary.install(this);
Bugsnag.init(this);
sApp = this;
mAppComponent = DaggerApp_AppComponent.builder()
.appModule(new AppModule(this))
.build();
mAppActivityLifecycleCallbacks = new AppActivityLifecycleCallbacks(this);
registerActivityLifecycleCallbacks(mAppActivityLifecycleCallbacks);
mGeneralPreferencesManager = mAppComponent.getGeneralPreferencesManager();
// set scaling factor for fonts
ResourceUtil.setScaledDensity(getResources(), mGeneralPreferencesManager.getFontScale());
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
ResourceUtil.setScaledDensity(getResources(), mGeneralPreferencesManager.getFontScale());
}
public boolean isAppVisible() {
return mAppActivityLifecycleCallbacks.isAppVisible();
}
/**
* Indicates the class where this module is going to inject dependencies
* or the dependencies we want to get.
*/
@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
OkHttpClient getOkHttpClient();
S1Service getS1Service();
EventBus getEventBus();
User getUser();
UserValidator getUserValidator();
UserViewModel getUserViewModel();
GeneralPreferencesManager getGeneralPreferencesManager();
DownloadPreferencesManager getDownloadPreferencesManager();
ThemeManager getThemeManager();
void inject(BaseActivity activity);
void inject(PostListFragment fragment);
void inject(ReplyFragment fragment);
void inject(GeneralPreferenceFragment fragment);
void inject(LogoutDialogFragment fragment);
void inject(ThemeChangeDialogFragment fragment);
void inject(ThreadAdapterDelegate delegate);
void inject(PostAdapterDelegate delegate);
void inject(WifiBroadcastReceiver wifiBroadcastReceiver);
}
}