Java tutorial
/* * Copyright 2015 Hauke Oldsen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package de.gebatzens.sia.dialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Paint; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.design.widget.Snackbar; import android.support.v4.app.DialogFragment; import android.support.v7.app.AlertDialog; import android.text.method.HideReturnsTransformationMethod; import android.text.method.PasswordTransformationMethod; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.TextView; import de.gebatzens.sia.SIAApp; import de.gebatzens.sia.R; import de.gebatzens.sia.SetupActivity; import de.gebatzens.sia.TextActivity; public class LoginDialog extends DialogFragment { SetupActivity activity; @Override public void onAttach(Context a) { super.onAttach(a); activity = (SetupActivity) a; } @Override @NonNull public Dialog onCreateDialog(Bundle savedInstanceState) { final String sid = getArguments().getString("sid"); final boolean auth = getArguments().getBoolean("auth"); AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(getResources().getString(R.string.login)); builder.setView(((LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE)) .inflate(R.layout.login_dialog, null)); builder.setPositiveButton(getResources().getString(R.string.do_login_submit), new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, int which) { final String user = auth ? ((EditText) ((Dialog) dialog).findViewById(R.id.usernameInput)) .getText().toString() : "_anonymous"; final String pass = auth ? ((EditText) ((Dialog) dialog).findViewById(R.id.passwordInput)) .getText().toString() : ""; final String lsid = sid == null ? ((EditText) ((Dialog) dialog).findViewById(R.id.sidInput)).getText().toString() : sid; new AsyncTask<String, Integer, Integer>() { @Override public void onPreExecute() { } @Override public void onPostExecute(Integer v) { boolean restoreDialog = false; switch (v) { case 0: activity.startDownloadingSchool(); break; case 1: restoreDialog = true; Snackbar.make( activity.getWindow().getDecorView() .findViewById(R.id.coordinator_layout), activity.getString(R.string.username_or_password_wrong), Snackbar.LENGTH_LONG).show(); break; case 2: restoreDialog = true; Snackbar.make( activity.getWindow().getDecorView() .findViewById(R.id.coordinator_layout), activity.getString(R.string.could_not_connect), Snackbar.LENGTH_LONG) .show(); break; case 3: Snackbar.make( activity.getWindow().getDecorView() .findViewById(R.id.coordinator_layout), activity.getString(R.string.maintenance), Snackbar.LENGTH_LONG).show(); break; case 4: Snackbar.make( activity.getWindow().getDecorView() .findViewById(R.id.coordinator_layout), activity.getString(R.string.unknown_error_login), Snackbar.LENGTH_LONG) .show(); break; } if (restoreDialog) { activity.restoreDialog = LoginDialog.this.getArguments(); activity.restoreDialog.putString("user", user); activity.restoreDialog.putString("sid", lsid); } } @Override protected Integer doInBackground(String... params) { return SIAApp.SIA_APP.api.login(params[0], params[1], params[2]); } }.execute(lsid, user, pass); dialog.dismiss(); } }); builder.setNegativeButton(getString(R.string.abort), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); Dialog d = builder.create(); if (auth) { d.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); } return d; } @Override public void onStart() { super.onStart(); boolean hideSid = getArguments().getBoolean("hideSid"); String sid = getArguments().getString("sid"); boolean auth = getArguments().getBoolean("auth"); String user = getArguments().getString("user"); final AlertDialog dialog = (AlertDialog) getDialog(); ((SetupActivity) getActivity()).currentLoginDialog = dialog; if (auth) { final EditText passwordInput = (EditText) dialog.findViewById(R.id.passwordInput); final CheckBox passwordToggle = (CheckBox) dialog.findViewById(R.id.passwordToggle); passwordToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (!isChecked) { passwordInput.setTransformationMethod(PasswordTransformationMethod.getInstance()); passwordInput.setSelection(passwordInput.getText().length()); } else { passwordInput.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); passwordInput.setSelection(passwordInput.getText().length()); } } }); ((EditText) dialog.findViewById(R.id.usernameInput)).setText(user); } else { dialog.findViewById(R.id.passwordInput).setVisibility(View.GONE); dialog.findViewById(R.id.passwordToggle).setVisibility(View.GONE); dialog.findViewById(R.id.usernameInput).setVisibility(View.GONE); } if (hideSid) { dialog.findViewById(R.id.sidInput).setVisibility(View.GONE); } else { ((EditText) dialog.findViewById(R.id.sidInput)).setText(sid); } TextView acceptTermsLink = (TextView) dialog.findViewById(R.id.acceptTermsLink); acceptTermsLink.setPaintFlags(acceptTermsLink.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); acceptTermsLink.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View widget) { Intent i = new Intent(activity, TextActivity.class); i.putExtra("title", R.string.terms_title); i.putExtra("text", R.array.terms); activity.startActivity(i); } }); final CheckBox acceptTerms = (CheckBox) dialog.findViewById(R.id.acceptTerms); acceptTerms.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { dialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(isChecked); } }); dialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(acceptTerms.isChecked()); } }