// Path: app/src/main/java/com/alexrwegener/dagger2byexamples/android/preferences/BooleanPreference.java
// public final class BooleanPreference {
//     private final SharedPreferences preferences;
//     private final String key;
//     private final boolean defaultValue;
// 
//     public BooleanPreference(SharedPreferences preferences, String key) {
//         this(preferences, key, false);
//     }
// 
//     public BooleanPreference(SharedPreferences preferences, String key, boolean defaultValue) {
//         this.preferences = preferences;
//         this.key = key;
//         this.defaultValue = defaultValue;
//     }
// 
//     public boolean get() {
//         return preferences.getBoolean(key, defaultValue);
//     }
// 
//     public boolean isSet() {
//         return preferences.contains(key);
//     }
// 
//     public void set(boolean value) {
//         preferences.edit().putBoolean(key, value).apply();
//     }
// 
//     public void delete() {
//         preferences.edit().remove(key).apply();
//     }
// 
//     public void reset() {
//         preferences.edit().putBoolean(key, defaultValue).apply();
//     }
// 
//     public boolean isDefault() {
//         return get() == defaultValue;
//     }
// 
//     public String key() {
//         return key;
//     }
// }
// 
// Path: app/src/main/java/com/alexrwegener/dagger2byexamples/android/preferences/StringPreference.java
// public final class StringPreference {
//     private final SharedPreferences preferences;
//     private final String key;
//     private final String defaultValue;
// 
//     public StringPreference(SharedPreferences preferences, String key) {
//         this(preferences, key, null);
//     }
// 
//     public StringPreference(SharedPreferences preferences, String key, String defaultValue) {
//         this.preferences = preferences;
//         this.key = key;
//         this.defaultValue = defaultValue;
//     }
// 
//     public String get() {
//         return preferences.getString(key, defaultValue);
//     }
// 
//     public boolean isSet() {
//         return preferences.contains(key);
//     }
// 
//     public void set(String value) {
//         preferences.edit().putString(key, value).apply();
//     }
// 
//     public void delete() {
//         preferences.edit().remove(key).apply();
//     }
// 
//     public void reset() {
//         preferences.edit().putString(key, defaultValue).apply();
//     }
// 
//     public boolean isDefault() {
//         return get() == null && defaultValue == null || get().equals(defaultValue);
//     }
// 
//     public String key() {
//         return key;
//     }
// }
// 
// Path: app/src/main/java/com/alexrwegener/dagger2byexamples/data/user/User.java
// public final class User {
//     public final String firstName;
//     public final String lastName;
// 
//     public User(String firstName, String lastName) {
//         this.firstName = firstName;
//         this.lastName = lastName;
//     }
// 
//     @Override public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         User user = (User) o;
// 
//         if (!firstName.equals(user.firstName)) return false;
//         return lastName.equals(user.lastName);
//     }
// 
//     @Override public int hashCode() {
//         int result = firstName.hashCode();
//         result = 31 * result + lastName.hashCode();
//         return result;
//     }
// }


import android.content.SharedPreferences;
import com.alexrwegener.dagger2byexamples.android.preferences.BooleanPreference;
import com.alexrwegener.dagger2byexamples.android.preferences.StringPreference;
import com.alexrwegener.dagger2byexamples.data.user.User;
package com.alexrwegener.dagger2byexamples.store.user;


final class RealUserStore implements UserStore {
    private static final String FIRST_NAME = "first_name";
    private static final String LAST_NAME = "last_name";
    private static final String ENJOYS_SCOPES = "enjoys_scopes";
    private final StringPreference firstName;
    private final StringPreference lastName;
    private final BooleanPreference enjoysScopes;

    RealUserStore(SharedPreferences sharedPreferences, User user) {
        this.firstName = new StringPreference(sharedPreferences, FIRST_NAME);
        this.lastName = new StringPreference(sharedPreferences, LAST_NAME);
// Path: app/src/main/java/com/alexrwegener/dagger2byexamples/android/preferences/BooleanPreference.java
// public final class BooleanPreference {
//     private final SharedPreferences preferences;
//     private final String key;
//     private final boolean defaultValue;
// 
//     public BooleanPreference(SharedPreferences preferences, String key) {
//         this(preferences, key, false);
//     }
// 
//     public BooleanPreference(SharedPreferences preferences, String key, boolean defaultValue) {
//         this.preferences = preferences;
//         this.key = key;
//         this.defaultValue = defaultValue;
//     }
// 
//     public boolean get() {
//         return preferences.getBoolean(key, defaultValue);
//     }
// 
//     public boolean isSet() {
//         return preferences.contains(key);
//     }
// 
//     public void set(boolean value) {
//         preferences.edit().putBoolean(key, value).apply();
//     }
// 
//     public void delete() {
//         preferences.edit().remove(key).apply();
//     }
// 
//     public void reset() {
//         preferences.edit().putBoolean(key, defaultValue).apply();
//     }
// 
//     public boolean isDefault() {
//         return get() == defaultValue;
//     }
// 
//     public String key() {
//         return key;
//     }
// }
// 
// Path: app/src/main/java/com/alexrwegener/dagger2byexamples/android/preferences/StringPreference.java
// public final class StringPreference {
//     private final SharedPreferences preferences;
//     private final String key;
//     private final String defaultValue;
// 
//     public StringPreference(SharedPreferences preferences, String key) {
//         this(preferences, key, null);
//     }
// 
//     public StringPreference(SharedPreferences preferences, String key, String defaultValue) {
//         this.preferences = preferences;
//         this.key = key;
//         this.defaultValue = defaultValue;
//     }
// 
//     public String get() {
//         return preferences.getString(key, defaultValue);
//     }
// 
//     public boolean isSet() {
//         return preferences.contains(key);
//     }
// 
//     public void set(String value) {
//         preferences.edit().putString(key, value).apply();
//     }
// 
//     public void delete() {
//         preferences.edit().remove(key).apply();
//     }
// 
//     public void reset() {
//         preferences.edit().putString(key, defaultValue).apply();
//     }
// 
//     public boolean isDefault() {
//         return get() == null && defaultValue == null || get().equals(defaultValue);
//     }
// 
//     public String key() {
//         return key;
//     }
// }
// 
// Path: app/src/main/java/com/alexrwegener/dagger2byexamples/data/user/User.java
// public final class User {
//     public final String firstName;
//     public final String lastName;
// 
//     public User(String firstName, String lastName) {
//         this.firstName = firstName;
//         this.lastName = lastName;
//     }
// 
//     @Override public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         User user = (User) o;
// 
//         if (!firstName.equals(user.firstName)) return false;
//         return lastName.equals(user.lastName);
//     }
// 
//     @Override public int hashCode() {
//         int result = firstName.hashCode();
//         result = 31 * result + lastName.hashCode();
//         return result;
//     }
// }


// Path: app/src/main/java/com/alexrwegener/dagger2byexamples/store/user/RealUserStore.java
import android.content.SharedPreferences;
import com.alexrwegener.dagger2byexamples.android.preferences.BooleanPreference;
import com.alexrwegener.dagger2byexamples.android.preferences.StringPreference;
import com.alexrwegener.dagger2byexamples.data.user.User;

package com.alexrwegener.dagger2byexamples.store.user;


final class RealUserStore implements UserStore {
    private static final String FIRST_NAME = "first_name";
    private static final String LAST_NAME = "last_name";
    private static final String ENJOYS_SCOPES = "enjoys_scopes";
    private final StringPreference firstName;
    private final StringPreference lastName;
    private final BooleanPreference enjoysScopes;

    RealUserStore(SharedPreferences sharedPreferences, User user) {
        this.firstName = new StringPreference(sharedPreferences, FIRST_NAME);
        this.lastName = new StringPreference(sharedPreferences, LAST_NAME);
        this.enjoysScopes = new BooleanPreference(sharedPreferences, ENJOYS_SCOPES);