// Path: app/src/main/java/io/dwak/holohackernews/app/dagger/module/SharedPreferencesModule.java
// @Module(includes = AppModule.class)
// public class SharedPreferencesModule {
//     @Provides
//     @Singleton
//     SharedPreferences providesSharedPreferences(@Named("context") Context context){
//         return PreferenceManager.getDefaultSharedPreferences(context);
//     }
// }
// 
// Path: app/src/main/java/io/dwak/holohackernews/app/preferences/LocalDataManager.java
// public class LocalDataManager {
//     public static final String PREF_RETURNING_USER = "PREF_RETURNING_USER";
//     public static final String OPEN_COUNT = "OPEN_COUNT";
//     private static LocalDataManager sInstance;
//     @Inject SharedPreferences mPreferences;
// 
//     private LocalDataManager(@NonNull Context context) {
//         DaggerSharedPreferencesComponent.builder()
//                                         .appComponent(HackerNewsApplication.getAppComponent())
//                                         .appModule(HackerNewsApplication.getAppModule())
//                                         .build()
//                                         .inject(this);
//         mPreferences.edit().commit();
//     }
// 
//     public static void initialize(@NonNull Context context) {
//         if (sInstance == null) {
//             sInstance = new LocalDataManager(context);
//         }
//         else {
//             throw new RuntimeException(LocalDataManager.class.getSimpleName() + " has already been initialized!");
//         }
//     }
// 
//     public static LocalDataManager getInstance() {
//         return sInstance;
//     }
// 
//     public boolean isReturningUser() {
//         return getBoolean(PREF_RETURNING_USER);
//     }
// 
//     public void setReturningUser(boolean isFirstRun) {
//         set(PREF_RETURNING_USER, isFirstRun);
//     }
// 
//     public int getOpenCount(){
//         return getInt(OPEN_COUNT);
//     }
// 
//     public void addOpenCount(){
//         int openCount = getOpenCount();
//         set(OPEN_COUNT, ++openCount);
//     }
// 
//     private void set(String key, int i) {
//         SharedPreferences.Editor editor = mPreferences.edit();
//         editor.putInt(key, i);
//         editor.apply();
//     }
// 
//     private int getInt(String key){
//         return mPreferences.getInt(key, 0);
//     }
//     private boolean getBoolean(String key) {
//         return mPreferences.getBoolean(key, false);
//     }
// 
//     @Nullable
//     private String getString(String key) {
//         return mPreferences.getString(key, null);
//     }
// 
//     private void set(@NonNull String key, boolean value) {
//         SharedPreferences.Editor editor = mPreferences.edit();
//         editor.putBoolean(key, value);
//         editor.apply();
//     }
// 
//     private void set(@NonNull String key, String value) {
//         SharedPreferences.Editor editor = mPreferences.edit();
//         editor.putString(key, value);
//         editor.apply();
//     }
// 
//     private void remove(@NonNull String key) {
//         mPreferences.edit().remove(key).apply();
//     }
// }
// 
// Path: app/src/main/java/io/dwak/holohackernews/app/preferences/UserPreferenceManager.java
// public class UserPreferenceManager {
// 
//     public static final String SHOULD_USE_EXTERNAL_BROWSER = "pref_system_browser";
//     public static final String PREF_LINK_FIRST = "pref_link_first";
//     public static final String PREF_LIST_ANIMATIONS = "pref_list_animations";
//     public static final String PREF_NIGHT_MODE = "pref_night_mode";
//     public static final String PREF_TEXT_SIZE = "pref_text_size";
//     public static final String PREF_SWIPE_BACK = "pref_swipe_back";
// 
//     @Retention(RetentionPolicy.SOURCE)
//     @StringDef({SMALL, MEDIUM, LARGE})
//     public @interface TextSize{}
//     public static final String SMALL = "small";
//     public static final String MEDIUM = "medium";
//     public static final String LARGE = "large";
// 
//     public static UserPreferenceManager sInstance;
//     @Inject SharedPreferences mSharedPreferences;
// 
//     public static UserPreferenceManager getInstance(){
//         if(sInstance == null){
//             sInstance = new UserPreferenceManager();
//         }
//         return sInstance;
//     }
// 
//     public UserPreferenceManager() {
//         DaggerSharedPreferencesComponent.builder()
//                 .appModule(HackerNewsApplication.getAppModule())
//                 .appComponent(HackerNewsApplication.getAppComponent())
//                 .build()
//                 .inject(this);
//         sInstance = this;
//     }
// 
//     public boolean showLinkFirst(){
//         return mSharedPreferences.getBoolean(PREF_LINK_FIRST, false);
//     }
// 
//     public @TextSize String getPreferredTextSize(){
//         //noinspection ResourceType
//         return mSharedPreferences.getString(PREF_TEXT_SIZE, SMALL);
//     }
// 
//     public boolean isExternalBrowserEnabled(){
//         return mSharedPreferences.getBoolean(SHOULD_USE_EXTERNAL_BROWSER, false);
//     }
// 
//     public void registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener) {
//         mSharedPreferences.registerOnSharedPreferenceChangeListener(listener);
//     }
// 
//     public void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener) {
//         mSharedPreferences.unregisterOnSharedPreferenceChangeListener(listener);
//     }
// 
//     public boolean isNightModeEnabled(){
//         return mSharedPreferences.getBoolean(PREF_NIGHT_MODE, false);
//     }
// 
//     public boolean isSwipeBackEnabled(){
//         return mSharedPreferences.getBoolean(PREF_SWIPE_BACK, true);
//     }
// }


import javax.inject.Singleton;
import dagger.Component;
import io.dwak.holohackernews.app.dagger.module.SharedPreferencesModule;
import io.dwak.holohackernews.app.preferences.LocalDataManager;
import io.dwak.holohackernews.app.preferences.UserPreferenceManager;
package io.dwak.holohackernews.app.dagger.component;



@Component(dependencies = AppComponent.class,
           modules = SharedPreferencesModule.class)
@Singleton
public interface SharedPreferencesComponent {
    void inject(UserPreferenceManager userPreferenceManager);
// Path: app/src/main/java/io/dwak/holohackernews/app/dagger/module/SharedPreferencesModule.java
// @Module(includes = AppModule.class)
// public class SharedPreferencesModule {
//     @Provides
//     @Singleton
//     SharedPreferences providesSharedPreferences(@Named("context") Context context){
//         return PreferenceManager.getDefaultSharedPreferences(context);
//     }
// }
// 
// Path: app/src/main/java/io/dwak/holohackernews/app/preferences/LocalDataManager.java
// public class LocalDataManager {
//     public static final String PREF_RETURNING_USER = "PREF_RETURNING_USER";
//     public static final String OPEN_COUNT = "OPEN_COUNT";
//     private static LocalDataManager sInstance;
//     @Inject SharedPreferences mPreferences;
// 
//     private LocalDataManager(@NonNull Context context) {
//         DaggerSharedPreferencesComponent.builder()
//                                         .appComponent(HackerNewsApplication.getAppComponent())
//                                         .appModule(HackerNewsApplication.getAppModule())
//                                         .build()
//                                         .inject(this);
//         mPreferences.edit().commit();
//     }
// 
//     public static void initialize(@NonNull Context context) {
//         if (sInstance == null) {
//             sInstance = new LocalDataManager(context);
//         }
//         else {
//             throw new RuntimeException(LocalDataManager.class.getSimpleName() + " has already been initialized!");
//         }
//     }
// 
//     public static LocalDataManager getInstance() {
//         return sInstance;
//     }
// 
//     public boolean isReturningUser() {
//         return getBoolean(PREF_RETURNING_USER);
//     }
// 
//     public void setReturningUser(boolean isFirstRun) {
//         set(PREF_RETURNING_USER, isFirstRun);
//     }
// 
//     public int getOpenCount(){
//         return getInt(OPEN_COUNT);
//     }
// 
//     public void addOpenCount(){
//         int openCount = getOpenCount();
//         set(OPEN_COUNT, ++openCount);
//     }
// 
//     private void set(String key, int i) {
//         SharedPreferences.Editor editor = mPreferences.edit();
//         editor.putInt(key, i);
//         editor.apply();
//     }
// 
//     private int getInt(String key){
//         return mPreferences.getInt(key, 0);
//     }
//     private boolean getBoolean(String key) {
//         return mPreferences.getBoolean(key, false);
//     }
// 
//     @Nullable
//     private String getString(String key) {
//         return mPreferences.getString(key, null);
//     }
// 
//     private void set(@NonNull String key, boolean value) {
//         SharedPreferences.Editor editor = mPreferences.edit();
//         editor.putBoolean(key, value);
//         editor.apply();
//     }
// 
//     private void set(@NonNull String key, String value) {
//         SharedPreferences.Editor editor = mPreferences.edit();
//         editor.putString(key, value);
//         editor.apply();
//     }
// 
//     private void remove(@NonNull String key) {
//         mPreferences.edit().remove(key).apply();
//     }
// }
// 
// Path: app/src/main/java/io/dwak/holohackernews/app/preferences/UserPreferenceManager.java
// public class UserPreferenceManager {
// 
//     public static final String SHOULD_USE_EXTERNAL_BROWSER = "pref_system_browser";
//     public static final String PREF_LINK_FIRST = "pref_link_first";
//     public static final String PREF_LIST_ANIMATIONS = "pref_list_animations";
//     public static final String PREF_NIGHT_MODE = "pref_night_mode";
//     public static final String PREF_TEXT_SIZE = "pref_text_size";
//     public static final String PREF_SWIPE_BACK = "pref_swipe_back";
// 
//     @Retention(RetentionPolicy.SOURCE)
//     @StringDef({SMALL, MEDIUM, LARGE})
//     public @interface TextSize{}
//     public static final String SMALL = "small";
//     public static final String MEDIUM = "medium";
//     public static final String LARGE = "large";
// 
//     public static UserPreferenceManager sInstance;
//     @Inject SharedPreferences mSharedPreferences;
// 
//     public static UserPreferenceManager getInstance(){
//         if(sInstance == null){
//             sInstance = new UserPreferenceManager();
//         }
//         return sInstance;
//     }
// 
//     public UserPreferenceManager() {
//         DaggerSharedPreferencesComponent.builder()
//                 .appModule(HackerNewsApplication.getAppModule())
//                 .appComponent(HackerNewsApplication.getAppComponent())
//                 .build()
//                 .inject(this);
//         sInstance = this;
//     }
// 
//     public boolean showLinkFirst(){
//         return mSharedPreferences.getBoolean(PREF_LINK_FIRST, false);
//     }
// 
//     public @TextSize String getPreferredTextSize(){
//         //noinspection ResourceType
//         return mSharedPreferences.getString(PREF_TEXT_SIZE, SMALL);
//     }
// 
//     public boolean isExternalBrowserEnabled(){
//         return mSharedPreferences.getBoolean(SHOULD_USE_EXTERNAL_BROWSER, false);
//     }
// 
//     public void registerOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener) {
//         mSharedPreferences.registerOnSharedPreferenceChangeListener(listener);
//     }
// 
//     public void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener listener) {
//         mSharedPreferences.unregisterOnSharedPreferenceChangeListener(listener);
//     }
// 
//     public boolean isNightModeEnabled(){
//         return mSharedPreferences.getBoolean(PREF_NIGHT_MODE, false);
//     }
// 
//     public boolean isSwipeBackEnabled(){
//         return mSharedPreferences.getBoolean(PREF_SWIPE_BACK, true);
//     }
// }


// Path: app/src/main/java/io/dwak/holohackernews/app/dagger/component/SharedPreferencesComponent.java
import javax.inject.Singleton;
import dagger.Component;
import io.dwak.holohackernews.app.dagger.module.SharedPreferencesModule;
import io.dwak.holohackernews.app.preferences.LocalDataManager;
import io.dwak.holohackernews.app.preferences.UserPreferenceManager;

package io.dwak.holohackernews.app.dagger.component;



@Component(dependencies = AppComponent.class,
           modules = SharedPreferencesModule.class)
@Singleton
public interface SharedPreferencesComponent {
    void inject(UserPreferenceManager userPreferenceManager);
    void inject(LocalDataManager localDataManager);