package com.airlocksoftware.hackernews.loader; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.support.v4.content.AsyncTaskLoader; import com.airlocksoftware.hackernews.cache.DbHelperSingleton; import com.airlocksoftware.hackernews.data.LoginManager; import com.airlocksoftware.hackernews.data.UserPrefs; import com.airlocksoftware.hackernews.model.*; import com.airlocksoftware.hackernews.model.StoryTimestamp; /** * Uses static method LoginManager.login() to perform the login. Notifies LoginActivity whether or not it was * successful. **/ public class LoginLoader extends AsyncTaskLoader<Result> { String mUsername; String mPassword; public LoginLoader(Context context, String username, String password) { super(context); mUsername = username; mPassword = password; } @Override public Result loadInBackground() { if (mUsername == null || mPassword == null) return Result.EMPTY; String newCookie = LoginManager.login(mUsername, mPassword); boolean isSuccess = newCookie != null; if (isSuccess) { // saves new user cookie and updates the timestamp UserPrefs prefs = new UserPrefs(getContext()); prefs.saveUserCookie(newCookie); prefs.saveUsername(mUsername); prefs.savePassword(mPassword); // delete all caches after logging in SQLiteDatabase db = DbHelperSingleton.getInstance(getContext()) .getWritableDatabase(); db.delete(new Story().getTableName(), null, null); db.delete(new Comment().getTableName(), null, null); db.delete(new StoryTimestamp().getTableName(), null, null); db.delete(new Vote().getTableName(), null, null); db.close(); } return isSuccess ? Result.SUCCESS : Result.FAILURE; } /** * Handles a request to start the Loader. */ @Override protected void onStartLoading() { forceLoad(); } }