Back to project page UniTracker.
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.
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); } } }