// Path: library/src/main/java/rxreddit/api/AccessTokenManager.java
// public interface AccessTokenManager {
// 
//     /**
//      * No-op implementation
//      */
//     AccessTokenManager NONE = new AccessTokenManager() {
//         @Override
//         public UserAccessToken getUserAccessToken() {
//             return null;
//         }
// 
//         @Override
//         public ApplicationAccessToken getApplicationAccessToken() {
//             return null;
//         }
// 
//         @Override
//         public void saveUserAccessToken(UserAccessToken token) {
//         }
// 
//         @Override
//         public void saveApplicationAccessToken(ApplicationAccessToken token) {
//         }
// 
//         @Override
//         public void clearSavedUserAccessToken() {
//         }
// 
//         @Override
//         public void clearSavedApplicationAccessToken() {
//         }
//     };
// 
//     UserAccessToken getUserAccessToken();
// 
//     ApplicationAccessToken getApplicationAccessToken();
// 
//     void saveUserAccessToken(UserAccessToken token);
// 
//     void saveApplicationAccessToken(ApplicationAccessToken token);
// 
//     void clearSavedUserAccessToken();
// 
//     void clearSavedApplicationAccessToken();
// }
// 
// Path: library/src/main/java/rxreddit/model/ApplicationAccessToken.java
// public class ApplicationAccessToken extends AccessToken {
// 
//     @Override
//     public boolean isUserAccessToken() {
//         return false;
//     }
// }
// 
// Path: library/src/main/java/rxreddit/model/UserAccessToken.java
// public class UserAccessToken extends AccessToken {
// 
//     @Override
//     public boolean isUserAccessToken() {
//         return true;
//     }
// 
//     @Override
//     public String toString() {
//         return String.format(
//                 "Access Token: %s - Expires: %s",
//                 (isUserAccessToken() ? "User" : "Application"),
//                 new Date(getExpirationMs())
//         );
//     }
// }


import android.content.Context;
import android.content.SharedPreferences;
import rxreddit.api.AccessTokenManager;
import rxreddit.model.ApplicationAccessToken;
import rxreddit.model.UserAccessToken;
package rxreddit.android;



public class AndroidAccessTokenManager implements AccessTokenManager {

    private static final String PREFS_USER_ACCESS_TOKEN = "prefs_user_access_token";
    private static final String PREFS_APPLICATION_ACCESS_TOKEN = "prefs_application_access_token";
    private static final String PREF_ACCESS_TOKEN = "pref_access_token";
    private static final String PREF_TOKEN_TYPE = "pref_token_type";
    private static final String PREF_EXPIRATION = "pref_expiration";
    private static final String PREF_SCOPE = "pref_scope";
    private static final String PREF_REFRESH_TOKEN = "pref_refresh_token";

    private Context context;

    public AndroidAccessTokenManager(Context context) {
        this.context = context.getApplicationContext();
    }

    @Override
// Path: library/src/main/java/rxreddit/api/AccessTokenManager.java
// public interface AccessTokenManager {
// 
//     /**
//      * No-op implementation
//      */
//     AccessTokenManager NONE = new AccessTokenManager() {
//         @Override
//         public UserAccessToken getUserAccessToken() {
//             return null;
//         }
// 
//         @Override
//         public ApplicationAccessToken getApplicationAccessToken() {
//             return null;
//         }
// 
//         @Override
//         public void saveUserAccessToken(UserAccessToken token) {
//         }
// 
//         @Override
//         public void saveApplicationAccessToken(ApplicationAccessToken token) {
//         }
// 
//         @Override
//         public void clearSavedUserAccessToken() {
//         }
// 
//         @Override
//         public void clearSavedApplicationAccessToken() {
//         }
//     };
// 
//     UserAccessToken getUserAccessToken();
// 
//     ApplicationAccessToken getApplicationAccessToken();
// 
//     void saveUserAccessToken(UserAccessToken token);
// 
//     void saveApplicationAccessToken(ApplicationAccessToken token);
// 
//     void clearSavedUserAccessToken();
// 
//     void clearSavedApplicationAccessToken();
// }
// 
// Path: library/src/main/java/rxreddit/model/ApplicationAccessToken.java
// public class ApplicationAccessToken extends AccessToken {
// 
//     @Override
//     public boolean isUserAccessToken() {
//         return false;
//     }
// }
// 
// Path: library/src/main/java/rxreddit/model/UserAccessToken.java
// public class UserAccessToken extends AccessToken {
// 
//     @Override
//     public boolean isUserAccessToken() {
//         return true;
//     }
// 
//     @Override
//     public String toString() {
//         return String.format(
//                 "Access Token: %s - Expires: %s",
//                 (isUserAccessToken() ? "User" : "Application"),
//                 new Date(getExpirationMs())
//         );
//     }
// }


// Path: android/src/main/java/rxreddit/android/AndroidAccessTokenManager.java
import android.content.Context;
import android.content.SharedPreferences;
import rxreddit.api.AccessTokenManager;
import rxreddit.model.ApplicationAccessToken;
import rxreddit.model.UserAccessToken;

package rxreddit.android;



public class AndroidAccessTokenManager implements AccessTokenManager {

    private static final String PREFS_USER_ACCESS_TOKEN = "prefs_user_access_token";
    private static final String PREFS_APPLICATION_ACCESS_TOKEN = "prefs_application_access_token";
    private static final String PREF_ACCESS_TOKEN = "pref_access_token";
    private static final String PREF_TOKEN_TYPE = "pref_token_type";
    private static final String PREF_EXPIRATION = "pref_expiration";
    private static final String PREF_SCOPE = "pref_scope";
    private static final String PREF_REFRESH_TOKEN = "pref_refresh_token";

    private Context context;

    public AndroidAccessTokenManager(Context context) {
        this.context = context.getApplicationContext();
    }

    @Override
    public UserAccessToken getUserAccessToken() {