private void refreshCampaigns() { mSharedPreferencesHelper.setLastCampaignRefreshTime(System.currentTimeMillis()); new CampaignReadTask(this) { @Override protected void onPreExecute() { super.onPreExecute(); getActionBar().setProgressVisible(true); } @Override protected void onPostExecute(CampaignReadResponse response) { if (response == null) return; super.onPostExecute(response); getActionBar().setProgressVisible(false); } }.execute(mSharedPreferencesHelper.getUsername(), mSharedPreferencesHelper.getHashedPassword()); }
private void loginFinished(String username, String hashedPassword) { // save creds mPreferencesHelper.putUsername(username); mPreferencesHelper.putHashedPassword(hashedPassword); // clear related notifications // NotificationHelper.cancel(LoginActivity.this, NotificationHelper.NOTIFY_LOGIN_FAIL); // makes more sense to clear notification on launch, so moved to oncreate // start services // set alarms // register receivers // BackgroundManager.initAuthComponents(this); boolean isFirstRun = mPreferencesHelper.isFirstRun(); if (isFirstRun) { Log.i(TAG, "this is the first run"); // Funf Ohmage // BackgroundManager.initComponents(this); // cancel get started notification. this works regardless of how we start the app // (notification or launcher) // NotificationHelper.cancel(this, NotificationHelper.NOTIFY_GET_STARTED, null); // show intro dialog // showDialog(DIALOG_FIRST_RUN); mPreferencesHelper.setFirstRun(false); mPreferencesHelper.putLoginTimestamp(System.currentTimeMillis()); } else { Log.i(TAG, "this is not the first run"); } if (mUpdateCredentials) finish(); else startActivityForResult(new Intent(this, MainActivity.class), LOGIN_FINISHED); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, "onCreate"); setContentView(R.layout.login); // first see if they are already logged in final SharedPreferencesHelper preferencesHelper = new SharedPreferencesHelper(this); // Funf Ohmage /* if (preferencesHelper.isUserDisabled()) { ((OhmageApplication) getApplication()).resetAll(); }*/ mUpdateCredentials = getIntent().getBooleanExtra(EXTRA_UPDATE_CREDENTIALS, false); // if they are, redirect them to the dashboard if (preferencesHelper.isAuthenticated() && !mUpdateCredentials) { startActivityForResult(new Intent(this, MainActivity.class), LOGIN_FINISHED); return; } mLoginButton = (Button) findViewById(R.id.login); mUsernameEdit = (EditText) findViewById(R.id.login_username); mPasswordEdit = (EditText) findViewById(R.id.login_password); mVersionText = (TextView) findViewById(R.id.version); try { mVersionText.setText("v" + getPackageManager().getPackageInfo("org.ohmage", 0).versionName); } catch (Exception e) { Log.e(TAG, "unable to retrieve version", e); mVersionText.setText(" "); } mLoginButton.setOnClickListener(mClickListener); mPreferencesHelper = new SharedPreferencesHelper(this); if (savedInstanceState == null) { Log.i(TAG, "creating from scratch"); // clear login fail notification (if such notification existed) // NotificationHelper.cancel(this, NotificationHelper.NOTIFY_LOGIN_FAIL, null); // move this down so notification is only cleared if login is successful??? // the following block is commented out to support single user lock-in, implemented in the // code below /*String username = mPreferencesHelper.getUsername(); if (username.length() > 0) { Log.i(TAG, "saved credentials exist"); mUsernameEdit.setText(username); mPasswordEdit.setText(DUMMY_PASSWORD); //launch main activity and finish //WE CAN'T DO THIS BECAUSE IF THE ACTIVITY IS LAUNCHED AFTER AN HTTP ERROR NOTIFICATION, CREDS WILL STILL BE STORED //startActivity(new Intent(LoginActivity.this, MainActivity.class)); //finish(); //OR do Login? doLogin(); //what if this works the other way around? make main activity the starting point, and launch login if needed? } else { Log.i(TAG, "saved credentials do not exist"); }*/ // Funf Ohmage /* if (mPreferencesHelper.isUserDisabled()) { ((OhmageApplication) getApplication()).resetAll(); } */ // code for single user lock-in String username = mPreferencesHelper.getUsername(); if (username.length() > 0) { Log.i(TAG, "saved username exists"); mUsernameEdit.setText(username); mUsernameEdit.setEnabled(false); mUsernameEdit.setFocusable(false); // String hashedPassword = mPreferencesHelper.getHashedPassword(); // if (hashedPassword.length() > 0) { // Log.i(TAG, "saved password exists"); // mPasswordEdit.setText(DUMMY_PASSWORD); // //doLogin(); // } else { // Log.i(TAG, "no saved password, must have had a login problem"); // } } else { Log.i(TAG, "no saved username"); } } // Funf-Ohmage // Since Campaighns not needed /* mCampaignDownloadTask = (CampaignReadTask) getSupportLoaderManager().initLoader(0, null, new LoaderManager.LoaderCallbacks<CampaignReadResponse>() { @Override public Loader<CampaignReadResponse> onCreateLoader(int id, Bundle args) { return new CampaignReadTask(OhmageLoginActivity.this, null, null); } @Override public void onLoadFinished(Loader<CampaignReadResponse> loader, CampaignReadResponse data) { String urn = Campaign.getSingleCampaign(OhmageLoginActivity.this); if(urn == null) { // Downloading the campaign failed so we should reset the username and password mPreferencesHelper.clearCredentials(); Toast.makeText(OhmageLoginActivity.this, R.string.login_error_downloading_campaign, Toast.LENGTH_LONG).show(); } else { loginFinished(((CampaignReadTask) loader).getUsername(), ((CampaignReadTask) loader).getHashedPassword()); } dismissDialog(DIALOG_DOWNLOADING_CAMPAIGNS); } @Override public void onLoaderReset(Loader<CampaignReadResponse> loader) { } });*/ }
private void onLoginTaskDone(OhmageApi.AuthenticateResponse response, final String username) { try { dismissDialog(DIALOG_LOGIN_PROGRESS); } catch (IllegalArgumentException e) { Log.e(TAG, "Attempting to dismiss dialog that had not been shown."); e.printStackTrace(); } switch (response.getResult()) { case SUCCESS: Log.i(TAG, "login success"); final String hashedPassword = response.getHashedPassword(); // Funf Ohmage: Since no camplaigns needed /* if(Config.IS_SINGLE_CAMPAIGN) { // Download the single campaign showDialog(DIALOG_DOWNLOADING_CAMPAIGNS); // Temporarily set the user credentials. If the download fails, they will be removed // We need to set this so the ResponseSyncService can use them once the campaign is downloaded mPreferencesHelper.putUsername(username); mPreferencesHelper.putHashedPassword(hashedPassword); mCampaignDownloadTask.setCredentials(username, hashedPassword); mCampaignDownloadTask.forceLoad(); } else { loginFinished(username, hashedPassword); }*/ loginFinished(username, hashedPassword); break; case FAILURE: Log.e(TAG, "login failure"); for (String s : response.getErrorCodes()) { Log.e(TAG, "error code: " + s); } // clear creds // mPreferencesHelper.clearCredentials(); // just clear password, keep username for single user lock-in // FAISAL: commenting this out so the user gets a chance to back out of a password change // attempt /*mPreferencesHelper.putHashedPassword("");*/ // clear password so user will re-enter it mPasswordEdit.setText(""); // show error dialog if (Arrays.asList(response.getErrorCodes()).contains("0201")) { mPreferencesHelper.setUserDisabled(true); showDialog(DIALOG_USER_DISABLED); } else { showDialog(DIALOG_LOGIN_ERROR); } break; case HTTP_ERROR: Log.e(TAG, "login http error"); // show error dialog showDialog(DIALOG_NETWORK_ERROR); break; case INTERNAL_ERROR: Log.e(TAG, "login internal error"); // show error dialog showDialog(DIALOG_INTERNAL_ERROR); break; } }