added sign up page, still working on drop down menu
This commit is contained in:
		
							parent
							
								
									5663255788
								
							
						
					
					
						commit
						5a97ad2ec8
					
				
					 13 changed files with 167 additions and 364 deletions
				
			
		
							
								
								
									
										
											BIN
										
									
								
								OlympusServices/.idea/caches/build_file_checksums.ser
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								OlympusServices/.idea/caches/build_file_checksums.ser
									
										
									
										generated
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										25
									
								
								OlympusServices/.idea/misc.xml
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										25
									
								
								OlympusServices/.idea/misc.xml
									
										
									
										generated
									
									
									
								
							| 
						 | 
					@ -1,5 +1,30 @@
 | 
				
			||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
<project version="4">
 | 
					<project version="4">
 | 
				
			||||||
 | 
					  <component name="NullableNotNullManager">
 | 
				
			||||||
 | 
					    <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
 | 
				
			||||||
 | 
					    <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
 | 
				
			||||||
 | 
					    <option name="myNullables">
 | 
				
			||||||
 | 
					      <value>
 | 
				
			||||||
 | 
					        <list size="5">
 | 
				
			||||||
 | 
					          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
 | 
				
			||||||
 | 
					          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
 | 
				
			||||||
 | 
					          <item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
 | 
				
			||||||
 | 
					          <item index="3" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
 | 
				
			||||||
 | 
					          <item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
 | 
				
			||||||
 | 
					        </list>
 | 
				
			||||||
 | 
					      </value>
 | 
				
			||||||
 | 
					    </option>
 | 
				
			||||||
 | 
					    <option name="myNotNulls">
 | 
				
			||||||
 | 
					      <value>
 | 
				
			||||||
 | 
					        <list size="4">
 | 
				
			||||||
 | 
					          <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
 | 
				
			||||||
 | 
					          <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
 | 
				
			||||||
 | 
					          <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
 | 
				
			||||||
 | 
					          <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
 | 
				
			||||||
 | 
					        </list>
 | 
				
			||||||
 | 
					      </value>
 | 
				
			||||||
 | 
					    </option>
 | 
				
			||||||
 | 
					  </component>
 | 
				
			||||||
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
 | 
					  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
 | 
				
			||||||
    <output url="file://$PROJECT_DIR$/build/classes" />
 | 
					    <output url="file://$PROJECT_DIR$/build/classes" />
 | 
				
			||||||
  </component>
 | 
					  </component>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,7 @@ dependencies {
 | 
				
			||||||
    implementation fileTree(dir: 'libs', include: ['*.jar'])
 | 
					    implementation fileTree(dir: 'libs', include: ['*.jar'])
 | 
				
			||||||
    implementation 'com.android.support:appcompat-v7:28.0.0'
 | 
					    implementation 'com.android.support:appcompat-v7:28.0.0'
 | 
				
			||||||
    implementation 'com.android.support:design:28.0.0'
 | 
					    implementation 'com.android.support:design:28.0.0'
 | 
				
			||||||
 | 
					    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
 | 
				
			||||||
    testImplementation 'junit:junit:4.12'
 | 
					    testImplementation 'junit:junit:4.12'
 | 
				
			||||||
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
 | 
					    androidTestImplementation 'com.android.support.test:runner:1.0.2'
 | 
				
			||||||
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
 | 
					    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
<?xml version="1.0" encoding="utf-8"?>
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 | 
					<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
    package="com.uottawa.olympus.olympusservices">
 | 
					    package="com.uottawa.olympus.olympusservices">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- To auto-complete the email text field in the login form with the user's emails -->
 | 
					    <!-- To auto-complete the email text field in the login form with the user's emails -->
 | 
				
			||||||
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
 | 
					    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
 | 
				
			||||||
    <uses-permission android:name="android.permission.READ_PROFILE" />
 | 
					    <uses-permission android:name="android.permission.READ_PROFILE" />
 | 
				
			||||||
| 
						 | 
					@ -14,7 +15,7 @@
 | 
				
			||||||
        android:supportsRtl="true"
 | 
					        android:supportsRtl="true"
 | 
				
			||||||
        android:theme="@style/AppTheme">
 | 
					        android:theme="@style/AppTheme">
 | 
				
			||||||
        <activity
 | 
					        <activity
 | 
				
			||||||
            android:name=".LoginActivity"
 | 
					            android:name=".Main"
 | 
				
			||||||
            android:label="@string/app_name">
 | 
					            android:label="@string/app_name">
 | 
				
			||||||
            <intent-filter>
 | 
					            <intent-filter>
 | 
				
			||||||
                <action android:name="android.intent.action.MAIN" />
 | 
					                <action android:name="android.intent.action.MAIN" />
 | 
				
			||||||
| 
						 | 
					@ -22,9 +23,12 @@
 | 
				
			||||||
                <category android:name="android.intent.category.LAUNCHER" />
 | 
					                <category android:name="android.intent.category.LAUNCHER" />
 | 
				
			||||||
            </intent-filter>
 | 
					            </intent-filter>
 | 
				
			||||||
        </activity>
 | 
					        </activity>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <meta-data
 | 
					        <meta-data
 | 
				
			||||||
            android:name="preloaded_fonts"
 | 
					            android:name="preloaded_fonts"
 | 
				
			||||||
            android:resource="@array/preloaded_fonts" />
 | 
					            android:resource="@array/preloaded_fonts" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <activity android:name=".SignUp"></activity>
 | 
				
			||||||
    </application>
 | 
					    </application>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</manifest>
 | 
					</manifest>
 | 
				
			||||||
| 
						 | 
					@ -1,350 +0,0 @@
 | 
				
			||||||
package com.uottawa.olympus.olympusservices;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import android.animation.Animator;
 | 
					 | 
				
			||||||
import android.animation.AnimatorListenerAdapter;
 | 
					 | 
				
			||||||
import android.annotation.TargetApi;
 | 
					 | 
				
			||||||
import android.content.pm.PackageManager;
 | 
					 | 
				
			||||||
import android.support.annotation.NonNull;
 | 
					 | 
				
			||||||
import android.support.design.widget.Snackbar;
 | 
					 | 
				
			||||||
import android.support.v7.app.AppCompatActivity;
 | 
					 | 
				
			||||||
import android.app.LoaderManager.LoaderCallbacks;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import android.content.CursorLoader;
 | 
					 | 
				
			||||||
import android.content.Loader;
 | 
					 | 
				
			||||||
import android.database.Cursor;
 | 
					 | 
				
			||||||
import android.net.Uri;
 | 
					 | 
				
			||||||
import android.os.AsyncTask;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import android.os.Build;
 | 
					 | 
				
			||||||
import android.os.Bundle;
 | 
					 | 
				
			||||||
import android.provider.ContactsContract;
 | 
					 | 
				
			||||||
import android.text.TextUtils;
 | 
					 | 
				
			||||||
import android.view.KeyEvent;
 | 
					 | 
				
			||||||
import android.view.View;
 | 
					 | 
				
			||||||
import android.view.View.OnClickListener;
 | 
					 | 
				
			||||||
import android.view.inputmethod.EditorInfo;
 | 
					 | 
				
			||||||
import android.widget.ArrayAdapter;
 | 
					 | 
				
			||||||
import android.widget.AutoCompleteTextView;
 | 
					 | 
				
			||||||
import android.widget.Button;
 | 
					 | 
				
			||||||
import android.widget.EditText;
 | 
					 | 
				
			||||||
import android.widget.TextView;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import java.util.ArrayList;
 | 
					 | 
				
			||||||
import java.util.List;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import static android.Manifest.permission.READ_CONTACTS;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * A login screen that offers login via email/password.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
public class LoginActivity extends AppCompatActivity implements LoaderCallbacks<Cursor> {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Id to identity READ_CONTACTS permission request.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private static final int REQUEST_READ_CONTACTS = 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * A dummy authentication store containing known user names and passwords.
 | 
					 | 
				
			||||||
     * TODO: remove after connecting to a real authentication system.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private static final String[] DUMMY_CREDENTIALS = new String[]{
 | 
					 | 
				
			||||||
            "foo@example.com:hello", "bar@example.com:world"
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Keep track of the login task to ensure we can cancel it if requested.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private UserLoginTask mAuthTask = null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // UI references.
 | 
					 | 
				
			||||||
    private AutoCompleteTextView mEmailView;
 | 
					 | 
				
			||||||
    private EditText mPasswordView;
 | 
					 | 
				
			||||||
    private View mProgressView;
 | 
					 | 
				
			||||||
    private View mLoginFormView;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    protected void onCreate(Bundle savedInstanceState) {
 | 
					 | 
				
			||||||
        super.onCreate(savedInstanceState);
 | 
					 | 
				
			||||||
        setContentView(R.layout.activity_login);
 | 
					 | 
				
			||||||
        // Set up the login form.
 | 
					 | 
				
			||||||
        mEmailView = (AutoCompleteTextView) findViewById(R.id.email);
 | 
					 | 
				
			||||||
        populateAutoComplete();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        mPasswordView = (EditText) findViewById(R.id.password);
 | 
					 | 
				
			||||||
        mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
 | 
					 | 
				
			||||||
            @Override
 | 
					 | 
				
			||||||
            public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
 | 
					 | 
				
			||||||
                if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
 | 
					 | 
				
			||||||
                    attemptLogin();
 | 
					 | 
				
			||||||
                    return true;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                return false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);
 | 
					 | 
				
			||||||
        mEmailSignInButton.setOnClickListener(new OnClickListener() {
 | 
					 | 
				
			||||||
            @Override
 | 
					 | 
				
			||||||
            public void onClick(View view) {
 | 
					 | 
				
			||||||
                attemptLogin();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        mLoginFormView = findViewById(R.id.login_form);
 | 
					 | 
				
			||||||
        mProgressView = findViewById(R.id.login_progress);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private void populateAutoComplete() {
 | 
					 | 
				
			||||||
        if (!mayRequestContacts()) {
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        getLoaderManager().initLoader(0, null, this);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private boolean mayRequestContacts() {
 | 
					 | 
				
			||||||
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (shouldShowRequestPermissionRationale(READ_CONTACTS)) {
 | 
					 | 
				
			||||||
            Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE)
 | 
					 | 
				
			||||||
                    .setAction(android.R.string.ok, new View.OnClickListener() {
 | 
					 | 
				
			||||||
                        @Override
 | 
					 | 
				
			||||||
                        @TargetApi(Build.VERSION_CODES.M)
 | 
					 | 
				
			||||||
                        public void onClick(View v) {
 | 
					 | 
				
			||||||
                            requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    });
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return false;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Callback received when a permissions request has been completed.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
 | 
					 | 
				
			||||||
                                           @NonNull int[] grantResults) {
 | 
					 | 
				
			||||||
        if (requestCode == REQUEST_READ_CONTACTS) {
 | 
					 | 
				
			||||||
            if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
 | 
					 | 
				
			||||||
                populateAutoComplete();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Attempts to sign in or register the account specified by the login form.
 | 
					 | 
				
			||||||
     * If there are form errors (invalid email, missing fields, etc.), the
 | 
					 | 
				
			||||||
     * errors are presented and no actual login attempt is made.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    private void attemptLogin() {
 | 
					 | 
				
			||||||
        if (mAuthTask != null) {
 | 
					 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Reset errors.
 | 
					 | 
				
			||||||
        mEmailView.setError(null);
 | 
					 | 
				
			||||||
        mPasswordView.setError(null);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Store values at the time of the login attempt.
 | 
					 | 
				
			||||||
        String email = mEmailView.getText().toString();
 | 
					 | 
				
			||||||
        String password = mPasswordView.getText().toString();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        boolean cancel = false;
 | 
					 | 
				
			||||||
        View focusView = null;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Check for a valid password, if the user entered one.
 | 
					 | 
				
			||||||
        if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) {
 | 
					 | 
				
			||||||
            mPasswordView.setError(getString(R.string.error_invalid_password));
 | 
					 | 
				
			||||||
            focusView = mPasswordView;
 | 
					 | 
				
			||||||
            cancel = true;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Check for a valid email address.
 | 
					 | 
				
			||||||
        if (TextUtils.isEmpty(email)) {
 | 
					 | 
				
			||||||
            mEmailView.setError(getString(R.string.error_field_required));
 | 
					 | 
				
			||||||
            focusView = mEmailView;
 | 
					 | 
				
			||||||
            cancel = true;
 | 
					 | 
				
			||||||
        } else if (!isEmailValid(email)) {
 | 
					 | 
				
			||||||
            mEmailView.setError(getString(R.string.error_invalid_email));
 | 
					 | 
				
			||||||
            focusView = mEmailView;
 | 
					 | 
				
			||||||
            cancel = true;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (cancel) {
 | 
					 | 
				
			||||||
            // There was an error; don't attempt login and focus the first
 | 
					 | 
				
			||||||
            // form field with an error.
 | 
					 | 
				
			||||||
            focusView.requestFocus();
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            // Show a progress spinner, and kick off a background task to
 | 
					 | 
				
			||||||
            // perform the user login attempt.
 | 
					 | 
				
			||||||
            showProgress(true);
 | 
					 | 
				
			||||||
            mAuthTask = new UserLoginTask(email, password);
 | 
					 | 
				
			||||||
            mAuthTask.execute((Void) null);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private boolean isEmailValid(String email) {
 | 
					 | 
				
			||||||
        //TODO: Replace this with your own logic
 | 
					 | 
				
			||||||
        return email.contains("@");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private boolean isPasswordValid(String password) {
 | 
					 | 
				
			||||||
        //TODO: Replace this with your own logic
 | 
					 | 
				
			||||||
        return password.length() > 4;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Shows the progress UI and hides the login form.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
 | 
					 | 
				
			||||||
    private void showProgress(final boolean show) {
 | 
					 | 
				
			||||||
        // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
 | 
					 | 
				
			||||||
        // for very easy animations. If available, use these APIs to fade-in
 | 
					 | 
				
			||||||
        // the progress spinner.
 | 
					 | 
				
			||||||
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
 | 
					 | 
				
			||||||
            int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
 | 
					 | 
				
			||||||
            mLoginFormView.animate().setDuration(shortAnimTime).alpha(
 | 
					 | 
				
			||||||
                    show ? 0 : 1).setListener(new AnimatorListenerAdapter() {
 | 
					 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public void onAnimationEnd(Animator animation) {
 | 
					 | 
				
			||||||
                    mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
 | 
					 | 
				
			||||||
            mProgressView.animate().setDuration(shortAnimTime).alpha(
 | 
					 | 
				
			||||||
                    show ? 1 : 0).setListener(new AnimatorListenerAdapter() {
 | 
					 | 
				
			||||||
                @Override
 | 
					 | 
				
			||||||
                public void onAnimationEnd(Animator animation) {
 | 
					 | 
				
			||||||
                    mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            // The ViewPropertyAnimator APIs are not available, so simply show
 | 
					 | 
				
			||||||
            // and hide the relevant UI components.
 | 
					 | 
				
			||||||
            mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
 | 
					 | 
				
			||||||
            mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
 | 
					 | 
				
			||||||
        return new CursorLoader(this,
 | 
					 | 
				
			||||||
                // Retrieve data rows for the device user's 'profile' contact.
 | 
					 | 
				
			||||||
                Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI,
 | 
					 | 
				
			||||||
                        ContactsContract.Contacts.Data.CONTENT_DIRECTORY), ProfileQuery.PROJECTION,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                // Select only email addresses.
 | 
					 | 
				
			||||||
                ContactsContract.Contacts.Data.MIMETYPE +
 | 
					 | 
				
			||||||
                        " = ?", new String[]{ContactsContract.CommonDataKinds.Email
 | 
					 | 
				
			||||||
                .CONTENT_ITEM_TYPE},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                // Show primary email addresses first. Note that there won't be
 | 
					 | 
				
			||||||
                // a primary email address if the user hasn't specified one.
 | 
					 | 
				
			||||||
                ContactsContract.Contacts.Data.IS_PRIMARY + " DESC");
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
 | 
					 | 
				
			||||||
        List<String> emails = new ArrayList<>();
 | 
					 | 
				
			||||||
        cursor.moveToFirst();
 | 
					 | 
				
			||||||
        while (!cursor.isAfterLast()) {
 | 
					 | 
				
			||||||
            emails.add(cursor.getString(ProfileQuery.ADDRESS));
 | 
					 | 
				
			||||||
            cursor.moveToNext();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        addEmailsToAutoComplete(emails);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public void onLoaderReset(Loader<Cursor> cursorLoader) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private void addEmailsToAutoComplete(List<String> emailAddressCollection) {
 | 
					 | 
				
			||||||
        //Create adapter to tell the AutoCompleteTextView what to show in its dropdown list.
 | 
					 | 
				
			||||||
        ArrayAdapter<String> adapter =
 | 
					 | 
				
			||||||
                new ArrayAdapter<>(LoginActivity.this,
 | 
					 | 
				
			||||||
                        android.R.layout.simple_dropdown_item_1line, emailAddressCollection);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        mEmailView.setAdapter(adapter);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private interface ProfileQuery {
 | 
					 | 
				
			||||||
        String[] PROJECTION = {
 | 
					 | 
				
			||||||
                ContactsContract.CommonDataKinds.Email.ADDRESS,
 | 
					 | 
				
			||||||
                ContactsContract.CommonDataKinds.Email.IS_PRIMARY,
 | 
					 | 
				
			||||||
        };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        int ADDRESS = 0;
 | 
					 | 
				
			||||||
        int IS_PRIMARY = 1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Represents an asynchronous login/registration task used to authenticate
 | 
					 | 
				
			||||||
     * the user.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public class UserLoginTask extends AsyncTask<Void, Void, Boolean> {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private final String mEmail;
 | 
					 | 
				
			||||||
        private final String mPassword;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        UserLoginTask(String email, String password) {
 | 
					 | 
				
			||||||
            mEmail = email;
 | 
					 | 
				
			||||||
            mPassword = password;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        @Override
 | 
					 | 
				
			||||||
        protected Boolean doInBackground(Void... params) {
 | 
					 | 
				
			||||||
            // TODO: attempt authentication against a network service.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            try {
 | 
					 | 
				
			||||||
                // Simulate network access.
 | 
					 | 
				
			||||||
                Thread.sleep(2000);
 | 
					 | 
				
			||||||
            } catch (InterruptedException e) {
 | 
					 | 
				
			||||||
                return false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            for (String credential : DUMMY_CREDENTIALS) {
 | 
					 | 
				
			||||||
                String[] pieces = credential.split(":");
 | 
					 | 
				
			||||||
                if (pieces[0].equals(mEmail)) {
 | 
					 | 
				
			||||||
                    // Account exists, return true if the password matches.
 | 
					 | 
				
			||||||
                    return pieces[1].equals(mPassword);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // TODO: register the new account here.
 | 
					 | 
				
			||||||
            return true;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        @Override
 | 
					 | 
				
			||||||
        protected void onPostExecute(final Boolean success) {
 | 
					 | 
				
			||||||
            mAuthTask = null;
 | 
					 | 
				
			||||||
            showProgress(false);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (success) {
 | 
					 | 
				
			||||||
                finish();
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                mPasswordView.setError(getString(R.string.error_incorrect_password));
 | 
					 | 
				
			||||||
                mPasswordView.requestFocus();
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        @Override
 | 
					 | 
				
			||||||
        protected void onCancelled() {
 | 
					 | 
				
			||||||
            mAuthTask = null;
 | 
					 | 
				
			||||||
            showProgress(false);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					package com.uottawa.olympus.olympusservices;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.support.v7.app.AppCompatActivity;
 | 
				
			||||||
 | 
					import android.os.Bundle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class Main extends AppCompatActivity {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void onCreate(Bundle savedInstanceState) {
 | 
				
			||||||
 | 
					        super.onCreate(savedInstanceState);
 | 
				
			||||||
 | 
					        setContentView(R.layout.activity_main);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					package com.uottawa.olympus.olympusservices;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import android.support.v7.app.AppCompatActivity;
 | 
				
			||||||
 | 
					import android.os.Bundle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class SignUp extends AppCompatActivity {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    protected void onCreate(Bundle savedInstanceState) {
 | 
				
			||||||
 | 
					        super.onCreate(savedInstanceState);
 | 
				
			||||||
 | 
					        setContentView(R.layout.activity_sign_up);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    public static void main(String[] args){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<shape xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					    android:shape="rectangle">
 | 
				
			||||||
 | 
					    <!--Border width and color-->
 | 
				
			||||||
 | 
					    <stroke android:width="5px" android:color="#ffffff" />
 | 
				
			||||||
 | 
					</shape>
 | 
				
			||||||
| 
						 | 
					@ -11,35 +11,27 @@
 | 
				
			||||||
    android:paddingRight="@dimen/activity_horizontal_margin"
 | 
					    android:paddingRight="@dimen/activity_horizontal_margin"
 | 
				
			||||||
    android:paddingTop="@dimen/activity_vertical_margin"
 | 
					    android:paddingTop="@dimen/activity_vertical_margin"
 | 
				
			||||||
    android:background="@drawable/background"
 | 
					    android:background="@drawable/background"
 | 
				
			||||||
    tools:context=".LoginActivity">
 | 
					    tools:context=".Main">
 | 
				
			||||||
    <!-- Login progress -->
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <TextView
 | 
					    <TextView
 | 
				
			||||||
        android:id="@+id/textView"
 | 
					        android:id="@+id/Title"
 | 
				
			||||||
        android:layout_width="300dp"
 | 
					        android:layout_width="300dp"
 | 
				
			||||||
        android:layout_height="50dp"
 | 
					        android:layout_height="50dp"
 | 
				
			||||||
 | 
					        android:layout_marginBottom="100dp"
 | 
				
			||||||
        android:text="@string/CompanyName"
 | 
					        android:text="@string/CompanyName"
 | 
				
			||||||
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
 | 
					        android:textAppearance="@style/TextAppearance.AppCompat.Large"
 | 
				
			||||||
        android:textColor="@android:color/white"
 | 
					        android:textColor="@android:color/white"
 | 
				
			||||||
        android:textSize="36sp"
 | 
					        android:textSize="36sp"
 | 
				
			||||||
 | 
					        android:gravity="center"
 | 
				
			||||||
        app:fontFamily="@font/julius_sans_one" />
 | 
					        app:fontFamily="@font/julius_sans_one" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <TextView
 | 
					 | 
				
			||||||
        android:id="@+id/textView2"
 | 
					 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					 | 
				
			||||||
        android:layout_height="50dp" />
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <Button
 | 
					    <Button
 | 
				
			||||||
        android:id="@+id/SignUp"
 | 
					        android:id="@+id/SignUp"
 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
        android:layout_height="wrap_content"
 | 
					        android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					        android:layout_marginBottom="50dp"
 | 
				
			||||||
        android:text="@string/signup" />
 | 
					        android:text="@string/signup" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <TextView
 | 
					 | 
				
			||||||
        android:id="@+id/textView3"
 | 
					 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					 | 
				
			||||||
        android:layout_height="30dp" />
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <Button
 | 
					    <Button
 | 
				
			||||||
        android:id="@+id/LogIn"
 | 
					        android:id="@+id/LogIn"
 | 
				
			||||||
        android:layout_width="match_parent"
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
							
								
								
									
										76
									
								
								OlympusServices/app/src/main/res/layout/activity_sign_up.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								OlympusServices/app/src/main/res/layout/activity_sign_up.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,76 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					    xmlns:app="http://schemas.android.com/apk/res-auto"
 | 
				
			||||||
 | 
					    xmlns:tools="http://schemas.android.com/tools"
 | 
				
			||||||
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
 | 
					    android:layout_height="match_parent"
 | 
				
			||||||
 | 
					    android:gravity="center_horizontal"
 | 
				
			||||||
 | 
					    android:orientation="vertical"
 | 
				
			||||||
 | 
					    android:paddingBottom="@dimen/activity_vertical_margin"
 | 
				
			||||||
 | 
					    android:paddingLeft="@dimen/activity_horizontal_margin"
 | 
				
			||||||
 | 
					    android:paddingRight="@dimen/activity_horizontal_margin"
 | 
				
			||||||
 | 
					    android:paddingTop="@dimen/activity_vertical_margin"
 | 
				
			||||||
 | 
					    android:background="@drawable/background"
 | 
				
			||||||
 | 
					    tools:context=".SignUp">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <TextView
 | 
				
			||||||
 | 
					        android:id="@+id/Title"
 | 
				
			||||||
 | 
					        android:layout_width="300dp"
 | 
				
			||||||
 | 
					        android:layout_height="50dp"
 | 
				
			||||||
 | 
					        android:layout_marginBottom="80dp"
 | 
				
			||||||
 | 
					        android:gravity="center"
 | 
				
			||||||
 | 
					        android:text="@string/signup"
 | 
				
			||||||
 | 
					        android:textAppearance="@style/TextAppearance.AppCompat.Large"
 | 
				
			||||||
 | 
					        android:textColor="@android:color/white"
 | 
				
			||||||
 | 
					        android:textSize="36sp"
 | 
				
			||||||
 | 
					        app:fontFamily="@font/julius_sans_one" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <Spinner
 | 
				
			||||||
 | 
					        android:id="@+id/RolesInput"
 | 
				
			||||||
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					        android:layout_height="72dp"
 | 
				
			||||||
 | 
					        android:layout_marginBottom="50dp"
 | 
				
			||||||
 | 
					        android:background="@drawable/customborder"
 | 
				
			||||||
 | 
					        android:entries="@array/roles"
 | 
				
			||||||
 | 
					        android:textColor="@android:color/white"
 | 
				
			||||||
 | 
					        android:textSize="15sp"
 | 
				
			||||||
 | 
					        android:theme="@android:style/TextAppearance.DeviceDefault.Widget.DropDownItem"
 | 
				
			||||||
 | 
					        tools:layout_editor_absoluteX="0dp"
 | 
				
			||||||
 | 
					        tools:layout_editor_absoluteY="108dp" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <android.support.design.widget.TextInputLayout
 | 
				
			||||||
 | 
					        android:id="@+id/UsernameInput"
 | 
				
			||||||
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					        android:layout_height="81dp"
 | 
				
			||||||
 | 
					        android:layout_marginBottom="50dp"
 | 
				
			||||||
 | 
					        android:background="@drawable/customborder"
 | 
				
			||||||
 | 
					        android:theme="@android:style/TextAppearance.DeviceDefault.Widget.EditText">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <android.support.design.widget.TextInputEditText
 | 
				
			||||||
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 | 
					            android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					            android:text="@string/newusername"
 | 
				
			||||||
 | 
					            android:textAppearance="@style/TextAppearance.AppCompat.Large"
 | 
				
			||||||
 | 
					            android:textColor="@android:color/white"
 | 
				
			||||||
 | 
					            android:textSize="20sp" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </android.support.design.widget.TextInputLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <android.support.design.widget.TextInputLayout
 | 
				
			||||||
 | 
					        android:id="@+id/PasswordInput"
 | 
				
			||||||
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					        android:layout_height="95dp"
 | 
				
			||||||
 | 
					        android:background="@drawable/customborder"
 | 
				
			||||||
 | 
					        android:theme="@android:style/TextAppearance.Holo.Widget.EditText">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <android.support.design.widget.TextInputEditText
 | 
				
			||||||
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 | 
					            android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					            android:hint=""
 | 
				
			||||||
 | 
					            android:text="@string/newpassword"
 | 
				
			||||||
 | 
					            android:textAppearance="@style/TextAppearance.AppCompat.Large"
 | 
				
			||||||
 | 
					            android:textColor="@android:color/white"
 | 
				
			||||||
 | 
					            android:textSize="20sp" />
 | 
				
			||||||
 | 
					    </android.support.design.widget.TextInputLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</LinearLayout>
 | 
				
			||||||
							
								
								
									
										11
									
								
								OlympusServices/app/src/main/res/layout/customspinner.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								OlympusServices/app/src/main/res/layout/customspinner.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<TextView
 | 
				
			||||||
 | 
					    xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
 | 
					    android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					    android:textSize="20sp"
 | 
				
			||||||
 | 
					    android:gravity="left"
 | 
				
			||||||
 | 
					    android:textColor="#FF0000"
 | 
				
			||||||
 | 
					    android:padding="5dip"
 | 
				
			||||||
 | 
					    />
 | 
				
			||||||
| 
						 | 
					@ -2,4 +2,5 @@
 | 
				
			||||||
    <!-- Default screen margins, per the Android Design guidelines. -->
 | 
					    <!-- Default screen margins, per the Android Design guidelines. -->
 | 
				
			||||||
    <dimen name="activity_horizontal_margin">16dp</dimen>
 | 
					    <dimen name="activity_horizontal_margin">16dp</dimen>
 | 
				
			||||||
    <dimen name="activity_vertical_margin">16dp</dimen>
 | 
					    <dimen name="activity_vertical_margin">16dp</dimen>
 | 
				
			||||||
 | 
					    <dimen name="padding_bottom">100dp</dimen>
 | 
				
			||||||
</resources>
 | 
					</resources>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,4 +17,12 @@
 | 
				
			||||||
    <string name="CompanyName">Olympus Services</string>
 | 
					    <string name="CompanyName">Olympus Services</string>
 | 
				
			||||||
    <string name="signup">Sign Up</string>
 | 
					    <string name="signup">Sign Up</string>
 | 
				
			||||||
    <string name="login">Log In</string>
 | 
					    <string name="login">Log In</string>
 | 
				
			||||||
 | 
					    <string name="newusername">Enter Username</string>
 | 
				
			||||||
 | 
					    <string name="newpassword">Enter Password</string>
 | 
				
			||||||
 | 
					    <string-array name="roles">
 | 
				
			||||||
 | 
					        <item>Admin</item>
 | 
				
			||||||
 | 
					        <item>User</item>
 | 
				
			||||||
 | 
					        <item>Service Provider</item>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </string-array>
 | 
				
			||||||
</resources>
 | 
					</resources>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue