/**
* This file is part of FileSpace for Android, an app for managing your server (files, talks...).
* <p>
* Copyright (c) 2014-2015 FileSpace for Android contributors (http://mercandalli.com)
* <p>
* LICENSE:
* <p>
* FileSpace for Android is free software: you can redistribute it and/or modify it under the terms of the GNU General
* Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any
* later version.
* <p>
* FileSpace for Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* @author Jonathan Mercandalli
* @license http://www.gnu.org/licenses/gpl.html
* @copyright 2014-2015 FileSpace for Android contributors (http://mercandalli.com)
*/
package com.mercandalli.android.apps.files.user;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.mercandalli.android.apps.files.R;
import com.mercandalli.android.apps.files.common.fragment.BackFragment;
import com.mercandalli.android.apps.files.common.listener.IPostExecuteListener;
import com.mercandalli.android.apps.files.common.net.TaskPost;
import com.mercandalli.android.apps.files.common.util.StringPair;
import com.mercandalli.android.apps.files.main.Config;
import com.mercandalli.android.apps.files.main.Constants;
import com.mercandalli.android.apps.files.main.MainActivity;
import com.mercandalli.android.apps.files.main.network.NetUtils;
import com.mercandalli.android.library.base.java.HashUtils;
import com.mercandalli.android.library.base.java.StringUtils;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class RegistrationFragment extends BackFragment {
private boolean mRequestLaunched = false; // Block the second task if one launch
private EditText mUsername, mPassword;
public static RegistrationFragment newInstance() {
return new RegistrationFragment();
}
public RegistrationFragment() {
super();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_registration, container, false);
this.mUsername = (EditText) rootView.findViewById(R.id.fragment_registration_username);
this.mPassword = (EditText) rootView.findViewById(R.id.fragment_registration_password);
((CheckBox) rootView.findViewById(R.id.fragment_registration_auto_connection)).setChecked(Config.isAutoConnection());
((CheckBox) rootView.findViewById(R.id.fragment_registration_auto_connection)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Config.setAutoConnection(getContext(), isChecked);
}
});
this.mUsername.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
RegistrationFragment.this.mPassword.requestFocus();
return true;
}
return false;
}
});
this.mPassword.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
inscription();
return true;
}
return false;
}
});
return rootView;
}
public void connectionSucceed() {
Intent intent = new Intent(getActivity(), MainActivity.class);
this.startActivity(intent);
getActivity().overridePendingTransition(R.anim.left_in, R.anim.left_out);
getActivity().finish();
}
public void inscription() {
UserModel user = new UserModel();
if (!StringUtils.isNullOrEmpty(mUsername.getText().toString())) {
user.username = mUsername.getText().toString();
}
if (!StringUtils.isNullOrEmpty(mPassword.getText().toString())) {
user.password = HashUtils.sha1(mPassword.getText().toString());
}
inscription(user);
}
public void inscription(UserModel user) {
if (mRequestLaunched) {
return;
}
mRequestLaunched = true;
if (!StringUtils.isNullOrEmpty(user.username)) {
Config.setUserUsername(getContext(), user.username);
} else {
user.username = Config.getUserUsername();
}
if (!StringUtils.isNullOrEmpty(user.password)) {
Config.setUserPassword(getContext(), user.password);
} else {
user.password = Config.getUserPassword();
}
if (StringUtils.isNullOrEmpty(Constants.URL_DOMAIN)) {
mRequestLaunched = false;
return;
}
// Register : POST /user
List<StringPair> parameters = new ArrayList<>();
parameters.add(new StringPair("username", "" + user.username));
parameters.add(new StringPair("password", "" + user.password));
//parameters.add(new StringPair("latitude", "" + GpsUtils.getLatitude(getActivity())));
//parameters.add(new StringPair("longitude", "" + GpsUtils.getLongitude(getActivity())));
//parameters.add(new StringPair("altitude", "" + GpsUtils.getAltitude(getActivity())));
if (NetUtils.isInternetConnection(getContext())) {
(new TaskPost(getActivity(), Constants.URL_DOMAIN + Config.ROUTE_USER, new IPostExecuteListener() {
@Override
public void onPostExecute(JSONObject json, String body) {
try {
if (json != null) {
if (json.has("succeed") && json.getBoolean("succeed")) {
connectionSucceed();
}
if (json.has("user")) {
JSONObject user = json.getJSONObject("user");
if (user.has("id")) {
Config.setUserId(getContext(), user.getInt("id"));
}
}
} else {
Toast.makeText(getContext(), R.string.server_error, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
Log.e(getClass().getName(), "Failed to convert Json", e);
}
mRequestLaunched = false;
}
}, parameters)).execute();
} else {
mRequestLaunched = false;
}
}
@Override
public boolean back() {
return false;
}
}