szkolny/app/src/main/java/pl/szczodrzynski/edziennik/login/LoginMobidziennikFragment.java
2019-09-18 22:29:09 +02:00

149 lines
6.5 KiB
Java

package pl.szczodrzynski.edziennik.login;
import androidx.databinding.DataBindingUtil;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.text.Editable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.danimahardhika.cafebar.CafeBar;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import pl.szczodrzynski.edziennik.App;
import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.api.AppError;
import pl.szczodrzynski.edziennik.databinding.FragmentLoginMobidziennikBinding;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_ARCHIVED;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_LOGIN;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_INVALID_SERVER_ADDRESS;
import static pl.szczodrzynski.edziennik.api.AppError.CODE_OLD_PASSWORD;
import static pl.szczodrzynski.edziennik.datamodels.LoginStore.LOGIN_TYPE_MOBIDZIENNIK;
public class LoginMobidziennikFragment extends Fragment {
private App app;
private NavController nav;
private FragmentLoginMobidziennikBinding b;
private static final String TAG = "LoginMobidziennik";
public LoginMobidziennikFragment() { }
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
if (getActivity() != null) {
app = (App) getActivity().getApplicationContext();
nav = Navigation.findNavController(getActivity(), R.id.nav_host_fragment);
}
else {
return null;
}
b = DataBindingUtil.inflate(inflater, R.layout.fragment_login_mobidziennik, container, false);
return b.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
assert getContext() != null;
assert getActivity() != null;
view.postDelayed(() -> {
AppError error = LoginActivity.error;
if (error != null) {
switch (error.errorCode) {
case CODE_INVALID_LOGIN:
b.loginPasswordLayout.setError(getString(R.string.login_error_incorrect_login_or_password));
break;
case CODE_OLD_PASSWORD:
b.loginPasswordLayout.setError(getString(R.string.login_error_old_password));
break;
case CODE_ARCHIVED:
b.loginUsernameLayout.setError(getString(R.string.sync_error_archived));
break;
case CODE_INVALID_SERVER_ADDRESS:
b.loginServerAddressLayout.setError(getString(R.string.login_error_incorrect_address));
break;
default:
CafeBar.builder(getActivity())
.to(b.root)
.content(getString(R.string.login_error, error.asReadableString(getActivity())))
.autoDismiss(false)
.positiveText(R.string.ok)
.onPositive(CafeBar::dismiss)
.floating(true)
.swipeToDismiss(true)
.neutralText(R.string.more)
.onNeutral(cafeBar -> app.apiEdziennik.guiShowErrorDialog(getActivity(), error, R.string.error_details))
.negativeText(R.string.report)
.onNegative((cafeBar -> app.apiEdziennik.guiReportError(getActivity(), error, null)))
.show();
break;
}
LoginActivity.error = null;
}
}, 100);
b.helpButton.setOnClickListener((v) -> nav.navigate(R.id.loginMobidziennikHelpFragment, null, LoginActivity.navOptions));
b.backButton.setOnClickListener((v) -> nav.navigateUp());
b.loginButton.setOnClickListener((v) -> {
boolean errors = false;
b.loginServerAddressLayout.setError(null);
b.loginUsernameLayout.setError(null);
b.loginPasswordLayout.setError(null);
Editable serverNameEditable = b.loginServerAddress.getText();
Editable usernameEditable = b.loginUsername.getText();
Editable passwordEditable = b.loginPassword.getText();
if (serverNameEditable == null || serverNameEditable.length() == 0) {
b.loginServerAddressLayout.setError(getString(R.string.login_error_no_address));
errors = true;
}
if (usernameEditable == null || usernameEditable.length() == 0) {
b.loginUsernameLayout.setError(getString(R.string.login_error_no_login));
errors = true;
}
if (passwordEditable == null || passwordEditable.length() == 0) {
b.loginPasswordLayout.setError(getString(R.string.login_error_no_password));
errors = true;
}
if (errors)
return;
errors = false;
String serverName = serverNameEditable.toString().toLowerCase().replaceAll("(?:http://|www.|mobidziennik\\.pl|wizja\\.net|\\.)", "");
String username = usernameEditable.toString().toLowerCase();
String password = passwordEditable.toString();
b.loginServerAddress.setText(serverName);
b.loginUsername.setText(username);
if (!serverName.matches("^[a-z0-9_\\-]+$")) {
b.loginServerAddressLayout.setError(getString(R.string.login_error_incorrect_address));
errors = true;
}
if (!username.matches("^[a-z0-9_\\-@+.]+$")) {
b.loginUsernameLayout.setError(getString(R.string.login_error_incorrect_login));
errors = true;
}
if (errors)
return;
errors = false;
Bundle args = new Bundle();
args.putInt("loginType", LOGIN_TYPE_MOBIDZIENNIK);
args.putString("serverName", serverName);
args.putString("username", username);
args.putString("password", password);
nav.navigate(R.id.loginProgressFragment, args, LoginActivity.navOptions);
});
}
}