// Path: src/us/shandian/blacklight/api/BaseApi.java
// public abstract class BaseApi
// {
// 	private static final String TAG = BaseApi.class.getSimpleName();
// 	
// 	// Http Methods
// 	protected static final String HTTP_GET = HttpUtility.GET;
// 	protected static final String HTTP_POST = HttpUtility.POST;
// 	
// 	// Access Token
// 	private static String mAccessToken;
// 	
// 	protected static JSONObject request(String url, WeiboParameters params, String method) throws Exception {
// 		return request(mAccessToken, url, params, method, JSONObject.class);
// 	}
// 	
// 	protected static JSONArray requestArray(String url, WeiboParameters params, String method) throws Exception {
// 		return request(mAccessToken, url, params, method, JSONArray.class);
// 	}
// 	
// 	protected static <T> T request(String token, String url, WeiboParameters params, String method, Class<T> jsonClass) throws Exception {
// 		if (token == null) {
// 			return null;
// 		} else {
// 			params.put("access_token", token);
// 			String jsonData = HttpUtility.doRequest(url, params, method);
// 			
// 			if (DEBUG) {
// 				Log.d(TAG, "jsonData = " + jsonData);
// 			}
// 			
// 			if (jsonData != null && jsonData.contains("{")) {
// 				return jsonClass.getConstructor(String.class).newInstance(jsonData);
// 			} else {
// 				return null;
// 			}
// 		}
// 	}
// 	
// 	protected static JSONObject requestWithoutAccessToken(String url, WeiboParameters params, String method) throws Exception {
// 		String jsonData = HttpUtility.doRequest(url, params, method);
// 		
// 		if (DEBUG) {
// 			Log.d(TAG, "jsonData = " + jsonData);
// 		}
// 		
// 		if (jsonData != null && jsonData.contains("{")) {
// 			return new JSONObject(jsonData);
// 		} else {
// 			return null;
// 		}
// 	}
// 	
// 	public static String getAccessToken() {
// 		return mAccessToken;
// 	}
// 	
// 	public static void setAccessToken(String token) {
// 		mAccessToken = token;
// 	}
// }
// 
// Path: src/us/shandian/blacklight/api/login/LoginApi.java
// public class LoginApi extends BaseApi
// {
// 	private static final String TAG = LoginApi.class.getSimpleName();
// 	
// 	// Returns token and expire date
// 	public static String[] login(String appId, String appSecret, String username, String passwd) {
// 		WeiboParameters params = new WeiboParameters();
// 		params.put("username", username);
// 		params.put("password", passwd);
// 		params.put("client_id", appId);
// 		params.put("client_secret", appSecret);
// 		params.put("grant_type", "password");
// 		
// 		try {
// 			JSONObject json = requestWithoutAccessToken(Constants.OAUTH2_ACCESS_TOKEN, params, HTTP_POST);
// 			return new String[]{json.optString("access_token"), json.optString("expires_in")};
// 		} catch (Exception e) {
// 			if (DEBUG) {
// 				Log.e(TAG, "login error:" + e.getClass().getSimpleName());
// 			}
// 			return null;
// 		}
// 	}
// }
// 
// Path: src/us/shandian/blacklight/api/user/AccountApi.java
// public class AccountApi extends BaseApi
// {
// 	public static String getUid() {
// 		try {
// 			JSONObject json = request(Constants.GET_UID, new WeiboParameters(), HTTP_GET);
// 			return json.optString("uid");
// 		} catch (Exception e) {
// 			return null;
// 		}
// 	}
// }


import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import us.shandian.blacklight.api.BaseApi;
import us.shandian.blacklight.api.login.LoginApi;
import us.shandian.blacklight.api.user.AccountApi;
import static us.shandian.blacklight.BuildConfig.DEBUG;
	private String mAppSecret;
	
    public LoginApiCache(Context context) {
		mPrefs = context.getSharedPreferences("access_token", Context.MODE_PRIVATE);
		mAccessToken = mPrefs.getString("access_token", null);
		mUid = mPrefs.getString("uid", null);
		mExpireDate = mPrefs.getLong("expires_in", Long.MIN_VALUE);
		mAppId = mPrefs.getString("app_id", null);
		mAppSecret = mPrefs.getString("app_secret", null);
		
		if (mAccessToken != null) {
			BaseApi.setAccessToken(mAccessToken);
		}
	}
	
	public void login(String appId, String appSecret, String username, String passwd) {
		if (mAccessToken == null || mExpireDate == Long.MIN_VALUE) {
			if (DEBUG) {
				Log.d(TAG, "access token not initialized, running login function");
			}
			String[] result = LoginApi.login(appId, appSecret, username, passwd);
			if (result != null) {
				if (DEBUG) {
					Log.d(TAG, "result got, loading to cache");
				}
				mAccessToken = result[0];
				BaseApi.setAccessToken(mAccessToken);
				mExpireDate = System.currentTimeMillis() + Long.valueOf(result[1]) * 1000;
				mAppId = appId;
				mAppSecret = appSecret;
// Path: src/us/shandian/blacklight/api/BaseApi.java
// public abstract class BaseApi
// {
// 	private static final String TAG = BaseApi.class.getSimpleName();
// 	
// 	// Http Methods
// 	protected static final String HTTP_GET = HttpUtility.GET;
// 	protected static final String HTTP_POST = HttpUtility.POST;
// 	
// 	// Access Token
// 	private static String mAccessToken;
// 	
// 	protected static JSONObject request(String url, WeiboParameters params, String method) throws Exception {
// 		return request(mAccessToken, url, params, method, JSONObject.class);
// 	}
// 	
// 	protected static JSONArray requestArray(String url, WeiboParameters params, String method) throws Exception {
// 		return request(mAccessToken, url, params, method, JSONArray.class);
// 	}
// 	
// 	protected static <T> T request(String token, String url, WeiboParameters params, String method, Class<T> jsonClass) throws Exception {
// 		if (token == null) {
// 			return null;
// 		} else {
// 			params.put("access_token", token);
// 			String jsonData = HttpUtility.doRequest(url, params, method);
// 			
// 			if (DEBUG) {
// 				Log.d(TAG, "jsonData = " + jsonData);
// 			}
// 			
// 			if (jsonData != null && jsonData.contains("{")) {
// 				return jsonClass.getConstructor(String.class).newInstance(jsonData);
// 			} else {
// 				return null;
// 			}
// 		}
// 	}
// 	
// 	protected static JSONObject requestWithoutAccessToken(String url, WeiboParameters params, String method) throws Exception {
// 		String jsonData = HttpUtility.doRequest(url, params, method);
// 		
// 		if (DEBUG) {
// 			Log.d(TAG, "jsonData = " + jsonData);
// 		}
// 		
// 		if (jsonData != null && jsonData.contains("{")) {
// 			return new JSONObject(jsonData);
// 		} else {
// 			return null;
// 		}
// 	}
// 	
// 	public static String getAccessToken() {
// 		return mAccessToken;
// 	}
// 	
// 	public static void setAccessToken(String token) {
// 		mAccessToken = token;
// 	}
// }
// 
// Path: src/us/shandian/blacklight/api/login/LoginApi.java
// public class LoginApi extends BaseApi
// {
// 	private static final String TAG = LoginApi.class.getSimpleName();
// 	
// 	// Returns token and expire date
// 	public static String[] login(String appId, String appSecret, String username, String passwd) {
// 		WeiboParameters params = new WeiboParameters();
// 		params.put("username", username);
// 		params.put("password", passwd);
// 		params.put("client_id", appId);
// 		params.put("client_secret", appSecret);
// 		params.put("grant_type", "password");
// 		
// 		try {
// 			JSONObject json = requestWithoutAccessToken(Constants.OAUTH2_ACCESS_TOKEN, params, HTTP_POST);
// 			return new String[]{json.optString("access_token"), json.optString("expires_in")};
// 		} catch (Exception e) {
// 			if (DEBUG) {
// 				Log.e(TAG, "login error:" + e.getClass().getSimpleName());
// 			}
// 			return null;
// 		}
// 	}
// }
// 
// Path: src/us/shandian/blacklight/api/user/AccountApi.java
// public class AccountApi extends BaseApi
// {
// 	public static String getUid() {
// 		try {
// 			JSONObject json = request(Constants.GET_UID, new WeiboParameters(), HTTP_GET);
// 			return json.optString("uid");
// 		} catch (Exception e) {
// 			return null;
// 		}
// 	}
// }


// Path: src/us/shandian/blacklight/cache/login/LoginApiCache.java
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import us.shandian.blacklight.api.BaseApi;
import us.shandian.blacklight.api.login.LoginApi;
import us.shandian.blacklight.api.user.AccountApi;
import static us.shandian.blacklight.BuildConfig.DEBUG;

	private String mAppSecret;
	
    public LoginApiCache(Context context) {
		mPrefs = context.getSharedPreferences("access_token", Context.MODE_PRIVATE);
		mAccessToken = mPrefs.getString("access_token", null);
		mUid = mPrefs.getString("uid", null);
		mExpireDate = mPrefs.getLong("expires_in", Long.MIN_VALUE);
		mAppId = mPrefs.getString("app_id", null);
		mAppSecret = mPrefs.getString("app_secret", null);
		
		if (mAccessToken != null) {
			BaseApi.setAccessToken(mAccessToken);
		}
	}
	
	public void login(String appId, String appSecret, String username, String passwd) {
		if (mAccessToken == null || mExpireDate == Long.MIN_VALUE) {
			if (DEBUG) {
				Log.d(TAG, "access token not initialized, running login function");
			}
			String[] result = LoginApi.login(appId, appSecret, username, passwd);
			if (result != null) {
				if (DEBUG) {
					Log.d(TAG, "result got, loading to cache");
				}
				mAccessToken = result[0];
				BaseApi.setAccessToken(mAccessToken);
				mExpireDate = System.currentTimeMillis() + Long.valueOf(result[1]) * 1000;
				mAppId = appId;
				mAppSecret = appSecret;
				mUid = AccountApi.getUid();