|
|
@@ -10,11 +10,16 @@ import android.content.Intent; |
|
|
|
import android.os.Bundle; |
|
|
|
import android.security.KeyChain; |
|
|
|
import android.text.Editable; |
|
|
|
import android.text.TextUtils; |
|
|
|
import android.text.TextWatcher; |
|
|
|
import android.util.Log; |
|
|
|
import android.view.KeyEvent; |
|
|
|
import android.view.View; |
|
|
|
import android.view.View.OnClickListener; |
|
|
|
import android.view.inputmethod.EditorInfo; |
|
|
|
import android.widget.EditText; |
|
|
|
import android.widget.TextView; |
|
|
|
import android.widget.TextView.OnEditorActionListener; |
|
|
|
import android.widget.Toast; |
|
|
|
|
|
|
|
import com.getbubblenow.android.R; |
|
|
@@ -60,71 +65,12 @@ public class LoginActivity extends BaseActivityBubble { |
|
|
|
private void initListeners() { |
|
|
|
sign.setOnClickListener(new OnClickListener() { |
|
|
|
@Override public void onClick(final View v) { |
|
|
|
|
|
|
|
if (DataRepository.getRepositoryInstance() == null) { |
|
|
|
loginViewModel.buildRepositoryInstance(LoginActivity.this, ApiConstants.BOOTSTRAP_URL); |
|
|
|
} else { |
|
|
|
loginViewModel.buildClientService(ApiConstants.BOOTSTRAP_URL); |
|
|
|
} |
|
|
|
final String usernameInput = userName.getText().toString().trim(); |
|
|
|
final String passwordInput = password.getText().toString().trim(); |
|
|
|
showLoadingDialog(); |
|
|
|
loginViewModel.login(LoginActivity.this,usernameInput,passwordInput).observe(LoginActivity.this, new Observer<StatusResource<byte[]>>() { |
|
|
|
@Override public void onChanged(final StatusResource<byte[]> stringStatusResource) { |
|
|
|
switch (stringStatusResource.status) { |
|
|
|
case SUCCESS: |
|
|
|
byte[] certificateEncode = stringStatusResource.data; |
|
|
|
loginViewModel.getConfig(LoginActivity.this).observe(LoginActivity.this, new Observer<StatusResource<String>>() { |
|
|
|
@Override public void onChanged(final StatusResource<String> stringStatusResource) { |
|
|
|
switch (stringStatusResource.status){ |
|
|
|
case SUCCESS: |
|
|
|
closeLoadingDialog(); |
|
|
|
config = stringStatusResource.data; |
|
|
|
if (loginViewModel.isHaveCertificate(LoginActivity.this)) { |
|
|
|
createTunnel(); |
|
|
|
} else { |
|
|
|
final Intent intent = KeyChain.createInstallIntent(); |
|
|
|
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, certificateEncode); |
|
|
|
intent.putExtra(KeyChain.EXTRA_NAME, CERTIFICATE_NAME); |
|
|
|
startActivityForResult(intent, REQUEST_CODE); |
|
|
|
} |
|
|
|
break; |
|
|
|
case LOADING: |
|
|
|
break; |
|
|
|
case ERROR: |
|
|
|
closeLoadingDialog(); |
|
|
|
if (stringStatusResource.message.equals(NO_INTERNET_CONNECTION)) { |
|
|
|
showNetworkNotAvailableMessage(); |
|
|
|
} else if (stringStatusResource.message.equals(LOGIN_FAILED)) { |
|
|
|
Toast.makeText(LoginActivity.this, LOGIN_FAILED, Toast.LENGTH_LONG).show(); |
|
|
|
} else { |
|
|
|
showErrorDialog(stringStatusResource.message); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
break; |
|
|
|
case LOADING: |
|
|
|
Log.d("TAG", "Loading"); |
|
|
|
break; |
|
|
|
case ERROR: |
|
|
|
closeLoadingDialog(); |
|
|
|
if (stringStatusResource.message.equals(NO_INTERNET_CONNECTION)) { |
|
|
|
showNetworkNotAvailableMessage(); |
|
|
|
} else if (stringStatusResource.message.equals(LOGIN_FAILED)) { |
|
|
|
Toast.makeText(LoginActivity.this, LOGIN_FAILED, Toast.LENGTH_LONG).show(); |
|
|
|
} else { |
|
|
|
showErrorDialog(stringStatusResource.message); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
signIn(); |
|
|
|
} |
|
|
|
}); |
|
|
|
userNameStateListener(); |
|
|
|
passwordStateListener(); |
|
|
|
sendListener(); |
|
|
|
} |
|
|
|
|
|
|
|
private void initViews() { |
|
|
@@ -133,6 +79,23 @@ public class LoginActivity extends BaseActivityBubble { |
|
|
|
sign = findViewById(R.id.signButton); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void sendListener() { |
|
|
|
password.setOnEditorActionListener(new OnEditorActionListener() { |
|
|
|
@Override public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) { |
|
|
|
if(((event!=null)&&(event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_SEND)){ |
|
|
|
if(!TextUtils.isEmpty(password.getText().toString()) && !TextUtils.isEmpty(userName.getText().toString())) { |
|
|
|
signIn(); |
|
|
|
} |
|
|
|
else { |
|
|
|
Toast.makeText(LoginActivity.this,getString(R.string.empty_message),Toast.LENGTH_SHORT).show(); |
|
|
|
} |
|
|
|
} |
|
|
|
return false; |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private void userNameStateListener() { |
|
|
|
userName.addTextChangedListener(new TextWatcher() { |
|
|
|
@Override public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { |
|
|
@@ -178,6 +141,69 @@ public class LoginActivity extends BaseActivityBubble { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private void signIn() { |
|
|
|
if (DataRepository.getRepositoryInstance() == null) { |
|
|
|
loginViewModel.buildRepositoryInstance(LoginActivity.this, ApiConstants.BOOTSTRAP_URL); |
|
|
|
} else { |
|
|
|
loginViewModel.buildClientService(ApiConstants.BOOTSTRAP_URL); |
|
|
|
} |
|
|
|
final String usernameInput = userName.getText().toString().trim(); |
|
|
|
final String passwordInput = password.getText().toString().trim(); |
|
|
|
showLoadingDialog(); |
|
|
|
loginViewModel.login(LoginActivity.this,usernameInput,passwordInput).observe(LoginActivity.this, new Observer<StatusResource<byte[]>>() { |
|
|
|
@Override public void onChanged(final StatusResource<byte[]> stringStatusResource) { |
|
|
|
switch (stringStatusResource.status) { |
|
|
|
case SUCCESS: |
|
|
|
byte[] certificateEncode = stringStatusResource.data; |
|
|
|
loginViewModel.getConfig(LoginActivity.this).observe(LoginActivity.this, new Observer<StatusResource<String>>() { |
|
|
|
@Override public void onChanged(final StatusResource<String> stringStatusResource) { |
|
|
|
switch (stringStatusResource.status){ |
|
|
|
case SUCCESS: |
|
|
|
closeLoadingDialog(); |
|
|
|
config = stringStatusResource.data; |
|
|
|
if (loginViewModel.isHaveCertificate(LoginActivity.this)) { |
|
|
|
createTunnel(); |
|
|
|
} else { |
|
|
|
final Intent intent = KeyChain.createInstallIntent(); |
|
|
|
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, certificateEncode); |
|
|
|
intent.putExtra(KeyChain.EXTRA_NAME, CERTIFICATE_NAME); |
|
|
|
startActivityForResult(intent, REQUEST_CODE); |
|
|
|
} |
|
|
|
break; |
|
|
|
case LOADING: |
|
|
|
break; |
|
|
|
case ERROR: |
|
|
|
closeLoadingDialog(); |
|
|
|
if (stringStatusResource.message.equals(NO_INTERNET_CONNECTION)) { |
|
|
|
showNetworkNotAvailableMessage(); |
|
|
|
} else if (stringStatusResource.message.equals(LOGIN_FAILED)) { |
|
|
|
Toast.makeText(LoginActivity.this, LOGIN_FAILED, Toast.LENGTH_LONG).show(); |
|
|
|
} else { |
|
|
|
showErrorDialog(stringStatusResource.message); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
break; |
|
|
|
case LOADING: |
|
|
|
Log.d("TAG", "Loading"); |
|
|
|
break; |
|
|
|
case ERROR: |
|
|
|
closeLoadingDialog(); |
|
|
|
if (stringStatusResource.message.equals(NO_INTERNET_CONNECTION)) { |
|
|
|
showNetworkNotAvailableMessage(); |
|
|
|
} else if (stringStatusResource.message.equals(LOGIN_FAILED)) { |
|
|
|
Toast.makeText(LoginActivity.this, LOGIN_FAILED, Toast.LENGTH_LONG).show(); |
|
|
|
} else { |
|
|
|
showErrorDialog(stringStatusResource.message); |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private void setButtonState(){ |
|
|
|
if(userNameStateFlag && passwordStateFlag){ |
|
|
|
sign.setBackgroundDrawable(getDrawable(R.drawable.sign_in_enable)); |
|
|
|