Click here to Skip to main content
15,897,187 members
Articles / Mobile Apps / Android

Drupal with Android integration: Make posts and upload photos. Part II - Android

Rate me:
Please Sign up or sign in to vote.
0.00/5 (No votes)
13 Mar 2013CPOL6 min read 18.2K   6  
This is part II of the article series on Drupal and Android integration.
package com.bitgriff.androiddrupal;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;

import com.bitgriff.helpers.GUIHelper;
import com.bitgriff.helpers.PrefsHelper;
import com.bitgriff.http.DrupalConnect;

/**
 * Activity than asks user to enter login and password.
 * This activity shown first, when application is started. 
 * 
 * @author Moskvichev Andrey V.
 *
 */
public class LoginActivity extends Activity {
	// UI controls
	private EditText editUsername;
	private EditText editPassword;
	private CheckBox checkRemember;
	private Button buttonOk;
	private Button buttonCancel;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        // get UI controls
        editUsername = (EditText) findViewById(R.id.editUsername);
        editPassword = (EditText) findViewById(R.id.editPassword);
        checkRemember = (CheckBox) findViewById(R.id.checkRemember);
        
        buttonOk = (Button) findViewById(R.id.buttonOk);
        buttonOk.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				onButtonOk();
			}
		});
        
        buttonCancel = (Button) findViewById(R.id.buttonCancel);
        buttonCancel.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				onButtonCancel();
			}
		});
        
        PrefsHelper.setup(this, "AndroidDrupal");
        loadAuthData();
    }

    @Override
	protected void onPause() {
		super.onPause();
	}

	@Override
	protected void onResume() {
		super.onResume();
	}

	/**
	 * Called to button "ok" click.
	 */
	public void onButtonOk() {
		final String username = editUsername.getText().toString();
		final String password = editPassword.getText().toString();
		
		// string buffer for errors
		StringBuilder errors = null;
		
		// check user name
		if (username.trim().length() == 0 || !username.matches("\\w+")) {
			if (errors == null)
				errors = new StringBuilder();
			errors.append("Invalid user name\n");
		}
		
		// check password
		if (password.trim().length() == 0 || !password.matches("\\w+")) {
			if (errors == null)
				errors = new StringBuilder();
			errors.append("Invalid password\n");
		}	
		
		// 
		if (errors != null) {
			GUIHelper.showError(this, errors.toString());
			return ;
		}
		
		// show login progress dialog
		final ProgressDialog dlg = ProgressDialog.show(this, "Logging in", "Logging in. Please wait.", true, true);
		
		// create an async task to perform login
		(new AsyncTask<Void, Void, String>() {
			@Override
			protected String doInBackground(Void... params) {
				try {
					DrupalConnect.getInstance().login(username, password);
					return "OK";
				}
				catch (Exception ex) {
					return ex.getMessage();
				}
			}

			@Override
			protected void onPostExecute(String result) {
				dlg.dismiss();
				
				if (result.equals("OK")) {
					saveAuthData();
					
					// switch to MainActivity
					Intent intent = new Intent(LoginActivity.this, PostActivity.class);
					startActivity(intent);
					finish();
				}
				else {
					GUIHelper.showError(LoginActivity.this, "Login is failed. " + result);
				}
			}
		}).execute();
    }

	/**
	 * Called on button "cancel" click.
	 */
    public void onButtonCancel() {
    	this.finish();
    }

    /**
     * Load authorization data from preferences.
     */
    private void loadAuthData() {
    	SharedPreferences prefs = PrefsHelper.getPreferences();
    
    	String username = prefs.getString("username", null);
    	String password = prefs.getString("password", null);
    	
    	if (username != null && password != null) {
    		editUsername.setText(username);
        	editPassword.setText(password);
        	
        	checkRemember.setChecked(true);
    	}
    	else {
    		editUsername.setText("");
        	editPassword.setText("");
        	
        	checkRemember.setChecked(false);
    	}
    }
    
    /**
     * Save authorization data to preferences.
     */
	private void saveAuthData() {
		SharedPreferences prefs = PrefsHelper.getPreferences();
		
		SharedPreferences.Editor editor = prefs.edit();
		
		if (checkRemember.isChecked()) {
			editor.putString("username", editUsername.getText().toString());
			editor.putString("password", editPassword.getText().toString());
		}
		else {
			editor.remove("username");
			editor.remove("password");
		}
		editor.commit();
	}

}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
CEO BitGriff LLC
Russian Federation Russian Federation
My name is Andrey Moskvichev.

I'm a software developer with more than 14 years of programming experience.

I specialize in networking, Unix systems (Linux, FreeBSD), mobile programming, computer graphics, software architecture, reverse engineering, data processing systems, AI, computer vision.

I'm interested in all new cutting edge technologies.

Comments and Discussions