/*
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker 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.
*
* Loop Habit Tracker 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 org.isoron.uhabits;
import android.app.*;
import android.content.*;
import android.support.annotation.*;
import com.activeandroid.*;
import org.isoron.uhabits.notifications.*;
import org.isoron.uhabits.preferences.*;
import org.isoron.uhabits.tasks.*;
import org.isoron.uhabits.utils.*;
import org.isoron.uhabits.widgets.*;
import java.io.*;
/**
* The Android application for Loop Habit Tracker.
*/
public class HabitsApplication extends Application
{
private Context context;
private static AppComponent component;
private WidgetUpdater widgetUpdater;
private ReminderScheduler reminderScheduler;
private NotificationTray notificationTray;
public AppComponent getComponent()
{
return component;
}
public static void setComponent(AppComponent component)
{
HabitsApplication.component = component;
}
public static boolean isTestMode()
{
try
{
Class.forName ("org.isoron.uhabits.BaseAndroidTest");
return true;
}
catch (final ClassNotFoundException e)
{
return false;
}
}
@Override
public void onCreate()
{
super.onCreate();
context = this;
component = DaggerAppComponent
.builder()
.appModule(new AppModule(context))
.build();
if (isTestMode())
{
File db = DatabaseUtils.getDatabaseFile(context);
if (db.exists()) db.delete();
}
DatabaseUtils.initializeActiveAndroid(context);
widgetUpdater = component.getWidgetUpdater();
widgetUpdater.startListening();
reminderScheduler = component.getReminderScheduler();
reminderScheduler.startListening();
notificationTray = component.getNotificationTray();
notificationTray.startListening();
Preferences prefs = component.getPreferences();
prefs.initialize();
prefs.updateLastAppVersion();
TaskRunner taskRunner = component.getTaskRunner();
taskRunner.execute(() -> {
reminderScheduler.scheduleAll();
widgetUpdater.updateWidgets();
});
}
@Override
public void onTerminate()
{
context = null;
ActiveAndroid.dispose();
reminderScheduler.stopListening();
widgetUpdater.stopListening();
notificationTray.stopListening();
super.onTerminate();
}
}