Android Open Source - UniTracker Login Fragment






From Project

Back to project page UniTracker.

License

The source code is released under:

MIT License

If you think the Android project UniTracker listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.connorroberts.unitracker.fragments;
/*from  w w  w. j a  v  a2  s.c om*/
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;

import com.connorroberts.unitracker.MainActivity;
import com.connorroberts.unitracker.R;
import com.connorroberts.unitracker.helpers.JSInterface;
import com.connorroberts.unitracker.helpers.SecurePreferences;

public class LoginFragment extends Fragment {

    public WebView loginWebView;

    public LoginFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        final View rootView = inflater.inflate(R.layout.fragment_login, container, false);
        final SecurePreferences preferences = MainActivity.getSecurePreferences();

        final RelativeLayout progress = (RelativeLayout) rootView.findViewById(R.id.login_progress);

        rootView.findViewById(R.id.sign_in_button).setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {

                final EditText personalID = (EditText) rootView.findViewById(R.id.personalID);
                final EditText password = (EditText) rootView.findViewById(R.id.password);
                final LinearLayout form = (LinearLayout) rootView.findViewById(R.id.ucas_login_form);

                if(!personalID.getText().toString().isEmpty() && !password.getText().toString().isEmpty()){

                    if(personalID.getText().toString().length() == 10 || personalID.getText().toString().length() == 12) {

                        form.setVisibility(View.GONE);
                        progress.setVisibility(View.VISIBLE);

                        loginWebView = (WebView) rootView.findViewById(R.id.loginWebView);
                        loginWebView.addJavascriptInterface(new JSInterface(getActivity().getApplicationContext(), rootView, getActivity()), "Android");

                        WebViewClient webClient = new WebViewClient() {

                            int urlCounter = 0;

                            @Override
                            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                                return false;

                            }

                            public void onPageFinished(WebView view, String url) {

                                Log.e("", "Page Loaded - URL: " + url);

                                /* Hacky way to check if login was correct */
                                if (url.equals("https://track.ucas.com/")) {

                                    if (urlCounter == 0) {

                                        String loginJS = "javascript:(function () { " +
                                                "document.getElementById('PersonalId').value = '" + personalID.getText() + "';" +
                                                "document.getElementById('Password').value = '" + password.getText() + "';" +
                                                "document.getElementsByTagName('input')[3].click();" +
                                                "})()";

                                        loginWebView.loadUrl(loginJS);

                                    } else {

                                        /* Login has failed */

                                        progress.setVisibility(View.GONE);
                                        password.setText("");
                                        form.setVisibility(View.VISIBLE);

                                        showError("The personal ID / password wasn't correct, please try again!");

                                    }


                                } else if (url.equals("https://track.ucas.com/Home")) {

                                    /* Login was successful */

                                    preferences.put("personalId", personalID.getText().toString());
                                    preferences.put("password", password.getText().toString());

                                    getFragmentManager().beginTransaction()
                                            .replace(R.id.container, new MainFragment())
                                            .commit();

                                    progress.setVisibility(View.GONE);

                                }

                                urlCounter += 1;

                            }

                        };

                        loginWebView.setWebViewClient(webClient);

                        WebSettings webSettings = loginWebView.getSettings();
                        webSettings.setJavaScriptEnabled(true);

                        loginWebView.loadUrl("https://track.ucas.com");

                    }else {

                        showError("Personal ID should be 10 digits (or 12 with hyphens)");

                    }

                }else {

                    showError("Please fill out both fields!");

                }


            }

        });

        return rootView;

    }

    public void showError(String message){

        AlertDialog.Builder error = new AlertDialog.Builder(getActivity());

        error.setTitle("Login Error")
            .setMessage(message)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int id) {

                    dialog.cancel();

                }

            })
            .create()
            .show();

    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

        if (menu != null) {

            menu.findItem(R.id.action_refresh).setVisible(false);
            menu.findItem(R.id.action_logout).setVisible(false);

        }

    }

}




Java Source Code List

com.connorroberts.unitracker.MainActivity.java
com.connorroberts.unitracker.fragments.LoginFragment.java
com.connorroberts.unitracker.fragments.MainFragment.java
com.connorroberts.unitracker.helpers.JSInterface.java
com.connorroberts.unitracker.helpers.SecurePreferences.java