// Path: app/src/main/java/com/nilhcem/droidconde/DroidconApp.java
// @DebugLog
// public class DroidconApp extends Application {
// 
//     private AppComponent component;
// 
//     public static DroidconApp get(Context context) {
//         return (DroidconApp) context.getApplicationContext();
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         AndroidThreeTen.init(this);
//         initGraph();
//         initLogger();
//     }
// 
//     public AppComponent component() {
//         return component;
//     }
// 
//     private void initGraph() {
//         component = AppComponent.Initializer.init(this);
//     }
// 
//     private void initLogger() {
//         Timber.plant(new Timber.DebugTree());
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/droidconde/receiver/reminder/SessionsReminder.java
// @Singleton
// public class SessionsReminder {
// 
//     private final Context context;
//     private final SessionsDao sessionsDao;
//     private final SharedPreferences preferences;
//     private final AlarmManager alarmManager;
// 
//     @Inject
//     public SessionsReminder(Application app, SessionsDao sessionsDao, SharedPreferences preferences) {
//         this.context = app;
//         this.sessionsDao = sessionsDao;
//         this.preferences = preferences;
//         alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
//     }
// 
//     public boolean isEnabled() {
//         return preferences.getBoolean(context.getString(R.string.settings_notify_key), false);
//     }
// 
//     public void enableSessionReminder() {
//         performOnSelectedSessions(this::addSessionReminder);
//     }
// 
//     public void disableSessionReminder() {
//         performOnSelectedSessions(this::removeSessionReminder);
//     }
// 
//     public void addSessionReminder(@NonNull Session session) {
//         if (!isEnabled()) {
//             Timber.d("SessionsReminder is not enable, skip adding session");
//             return;
//         }
// 
//         PendingIntent intent = createSessionReminderIntent(session);
//         LocalDateTime now = LocalDateTime.now();
//         LocalDateTime sessionStartTime = session.getFromTime().minusMinutes(3);
//         if (!sessionStartTime.isAfter(now)) {
//             Timber.w("Do not set reminder for passed session");
//             return;
//         }
//         Timber.d("Setting reminder on %s", sessionStartTime);
//         App.setExactAlarm(alarmManager, sessionStartTime.atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli(), intent);
//     }
// 
//     public void removeSessionReminder(@NonNull Session session) {
//         Timber.d("Cancelling reminder on %s", session.getFromTime().minusMinutes(3));
//         createSessionReminderIntent(session).cancel();
//     }
// 
//     private PendingIntent createSessionReminderIntent(@NonNull Session session) {
//         Intent intent = new ReminderReceiverIntentBuilder(session).build(context);
//         return PendingIntent.getBroadcast(context, session.getId(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
//     }
// 
//     private void performOnSelectedSessions(Action1<? super Session> onNext) {
//         sessionsDao.getSelectedSessions()
//                 .flatMap(Observable::from)
//                 .subscribeOn(Schedulers.io())
//                 .observeOn(Schedulers.computation())
//                 .subscribe(onNext, throwable -> Timber.e(throwable, "Error getting sessions"));
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/droidconde/utils/Intents.java
// public final class Intents {
// 
//     private Intents() {
//         throw new UnsupportedOperationException();
//     }
// 
//     public static boolean startUri(@NonNull Context context, @NonNull String url) {
//         Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
//         if (intent.resolveActivity(context.getPackageManager()) != null) {
//             context.startActivity(intent);
//             return true;
//         }
//         return false;
//     }
// 
//     public static void startExternalUrl(@NonNull Activity activity, @NonNull String url) {
//         CustomTabsIntent intent = new CustomTabsIntent.Builder()
//                 .setShowTitle(true)
//                 .setToolbarColor(ContextCompat.getColor(activity, R.color.primary))
//                 .build();
//         intent.launchUrl(activity, Uri.parse(url));
//     }
// }


import android.os.Bundle;
import android.support.annotation.StringRes;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import com.nilhcem.droidconde.DroidconApp;
import com.nilhcem.droidconde.R;
import com.nilhcem.droidconde.receiver.reminder.SessionsReminder;
import com.nilhcem.droidconde.utils.Intents;
import javax.inject.Inject;
    public void setNotifySessionsCheckbox(boolean checked) {
        notifySessions.setChecked(checked);
    }

    @Override
    public void setAppVersion(CharSequence version) {
        appVersion.setSummary(version);
    }

    private void initPreferences() {
        addPreferencesFromResource(R.xml.settings);
        notifySessions = findPreference(R.string.settings_notify_key);
        appVersion = findPreference(R.string.settings_version_key);
        initPreferenceLink(R.string.settings_conf_key);
        initPreferenceLink(R.string.settings_github_key);
        initPreferenceLink(R.string.settings_developer_key);
    }

    private void initPresenter() {
        DroidconApp.get(getContext()).component().inject(this);
        presenter = new SettingsPresenter(getContext(), this, sessionsReminder);
        presenter.onCreate();
    }

    private <T extends Preference> T findPreference(@StringRes int resId) {
        return (T) findPreference(getString(resId));
    }

    private void initPreferenceLink(@StringRes int resId) {
        findPreference(resId).setOnPreferenceClickListener(preference -> {
// Path: app/src/main/java/com/nilhcem/droidconde/DroidconApp.java
// @DebugLog
// public class DroidconApp extends Application {
// 
//     private AppComponent component;
// 
//     public static DroidconApp get(Context context) {
//         return (DroidconApp) context.getApplicationContext();
//     }
// 
//     @Override
//     public void onCreate() {
//         super.onCreate();
//         AndroidThreeTen.init(this);
//         initGraph();
//         initLogger();
//     }
// 
//     public AppComponent component() {
//         return component;
//     }
// 
//     private void initGraph() {
//         component = AppComponent.Initializer.init(this);
//     }
// 
//     private void initLogger() {
//         Timber.plant(new Timber.DebugTree());
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/droidconde/receiver/reminder/SessionsReminder.java
// @Singleton
// public class SessionsReminder {
// 
//     private final Context context;
//     private final SessionsDao sessionsDao;
//     private final SharedPreferences preferences;
//     private final AlarmManager alarmManager;
// 
//     @Inject
//     public SessionsReminder(Application app, SessionsDao sessionsDao, SharedPreferences preferences) {
//         this.context = app;
//         this.sessionsDao = sessionsDao;
//         this.preferences = preferences;
//         alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
//     }
// 
//     public boolean isEnabled() {
//         return preferences.getBoolean(context.getString(R.string.settings_notify_key), false);
//     }
// 
//     public void enableSessionReminder() {
//         performOnSelectedSessions(this::addSessionReminder);
//     }
// 
//     public void disableSessionReminder() {
//         performOnSelectedSessions(this::removeSessionReminder);
//     }
// 
//     public void addSessionReminder(@NonNull Session session) {
//         if (!isEnabled()) {
//             Timber.d("SessionsReminder is not enable, skip adding session");
//             return;
//         }
// 
//         PendingIntent intent = createSessionReminderIntent(session);
//         LocalDateTime now = LocalDateTime.now();
//         LocalDateTime sessionStartTime = session.getFromTime().minusMinutes(3);
//         if (!sessionStartTime.isAfter(now)) {
//             Timber.w("Do not set reminder for passed session");
//             return;
//         }
//         Timber.d("Setting reminder on %s", sessionStartTime);
//         App.setExactAlarm(alarmManager, sessionStartTime.atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli(), intent);
//     }
// 
//     public void removeSessionReminder(@NonNull Session session) {
//         Timber.d("Cancelling reminder on %s", session.getFromTime().minusMinutes(3));
//         createSessionReminderIntent(session).cancel();
//     }
// 
//     private PendingIntent createSessionReminderIntent(@NonNull Session session) {
//         Intent intent = new ReminderReceiverIntentBuilder(session).build(context);
//         return PendingIntent.getBroadcast(context, session.getId(), intent, PendingIntent.FLAG_UPDATE_CURRENT);
//     }
// 
//     private void performOnSelectedSessions(Action1<? super Session> onNext) {
//         sessionsDao.getSelectedSessions()
//                 .flatMap(Observable::from)
//                 .subscribeOn(Schedulers.io())
//                 .observeOn(Schedulers.computation())
//                 .subscribe(onNext, throwable -> Timber.e(throwable, "Error getting sessions"));
//     }
// }
// 
// Path: app/src/main/java/com/nilhcem/droidconde/utils/Intents.java
// public final class Intents {
// 
//     private Intents() {
//         throw new UnsupportedOperationException();
//     }
// 
//     public static boolean startUri(@NonNull Context context, @NonNull String url) {
//         Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
//         if (intent.resolveActivity(context.getPackageManager()) != null) {
//             context.startActivity(intent);
//             return true;
//         }
//         return false;
//     }
// 
//     public static void startExternalUrl(@NonNull Activity activity, @NonNull String url) {
//         CustomTabsIntent intent = new CustomTabsIntent.Builder()
//                 .setShowTitle(true)
//                 .setToolbarColor(ContextCompat.getColor(activity, R.color.primary))
//                 .build();
//         intent.launchUrl(activity, Uri.parse(url));
//     }
// }


// Path: app/src/main/java/com/nilhcem/droidconde/ui/settings/SettingsFragment.java
import android.os.Bundle;
import android.support.annotation.StringRes;
import android.support.v7.preference.CheckBoxPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import com.nilhcem.droidconde.DroidconApp;
import com.nilhcem.droidconde.R;
import com.nilhcem.droidconde.receiver.reminder.SessionsReminder;
import com.nilhcem.droidconde.utils.Intents;
import javax.inject.Inject;

    public void setNotifySessionsCheckbox(boolean checked) {
        notifySessions.setChecked(checked);
    }

    @Override
    public void setAppVersion(CharSequence version) {
        appVersion.setSummary(version);
    }

    private void initPreferences() {
        addPreferencesFromResource(R.xml.settings);
        notifySessions = findPreference(R.string.settings_notify_key);
        appVersion = findPreference(R.string.settings_version_key);
        initPreferenceLink(R.string.settings_conf_key);
        initPreferenceLink(R.string.settings_github_key);
        initPreferenceLink(R.string.settings_developer_key);
    }

    private void initPresenter() {
        DroidconApp.get(getContext()).component().inject(this);
        presenter = new SettingsPresenter(getContext(), this, sessionsReminder);
        presenter.onCreate();
    }

    private <T extends Preference> T findPreference(@StringRes int resId) {
        return (T) findPreference(getString(resId));
    }

    private void initPreferenceLink(@StringRes int resId) {
        findPreference(resId).setOnPreferenceClickListener(preference -> {
            Intents.startExternalUrl(getActivity(), preference.getSummary().toString());