@@ -6,6 +6,7 @@ import androidx.lifecycle.Observer; | |||
import androidx.lifecycle.ViewModelProvider; | |||
import android.content.Intent; | |||
import android.net.Uri; | |||
import android.os.Bundle; | |||
import android.text.Editable; | |||
import android.text.TextUtils; | |||
@@ -22,7 +23,6 @@ import android.widget.Toast; | |||
import com.getbubblenow.android.R; | |||
import com.getbubblenow.android.api.ApiConstants; | |||
import com.getbubblenow.android.repository.DataRepository; | |||
import com.getbubblenow.android.resource.StatusResource; | |||
import com.getbubblenow.android.viewmodel.LoginViewModel; | |||
@@ -33,6 +33,7 @@ public class LoginActivity extends BaseActivityBubble { | |||
private EditText userName; | |||
private EditText password; | |||
private AppCompatButton sign; | |||
private TextView signUpButton; | |||
private boolean userNameStateFlag = false; | |||
private boolean passwordStateFlag = false; | |||
@@ -40,6 +41,7 @@ public class LoginActivity extends BaseActivityBubble { | |||
private static final String PASSWORD_KEY = "password"; | |||
private static final String NO_INTERNET_CONNECTION = "no internet connection"; | |||
private static final String LOGIN_FAILED = "Login Failed"; | |||
private static final String REGISTER_POSTFIX = "/register"; | |||
@Override | |||
protected void onCreate(Bundle savedInstanceState) { | |||
@@ -63,12 +65,34 @@ public class LoginActivity extends BaseActivityBubble { | |||
userNameStateListener(); | |||
passwordStateListener(); | |||
sendListener(); | |||
signUpButton.setOnClickListener(v -> signUp()); | |||
} | |||
private void signUp() { | |||
showLoadingDialog(); | |||
loginViewModel.getSignUpSage(this).observe(this, statusResource -> { | |||
switch (statusResource.status) { | |||
case SUCCESS: | |||
closeLoadingDialog(); | |||
final String sage = statusResource.data; | |||
final String url = sage + REGISTER_POSTFIX; | |||
final Intent intent = new Intent(Intent.ACTION_VIEW); | |||
intent.setData(Uri.parse(url)); | |||
startActivity(intent); | |||
break; | |||
case ERROR: | |||
closeLoadingDialog(); | |||
showErrorDialog(statusResource.message); | |||
break; | |||
} | |||
}); | |||
} | |||
private void initViews() { | |||
userName = findViewById(R.id.userName); | |||
password = findViewById(R.id.password); | |||
sign = findViewById(R.id.signButton); | |||
signUpButton = findViewById(R.id.signUpButton); | |||
} | |||
@@ -78,6 +78,7 @@ public class DataRepository { | |||
private static final String RUNNING = "running"; | |||
private static final String BASE_URL_PREFIX = "https://"; | |||
private static final String BASE_URL_SUFFIX = ":1443/api/"; | |||
private static final String SAGE_LIST_IS_EMPTY = "Sage list is empty"; | |||
private static String deviceName; | |||
private static String deviceID; | |||
private List<String> nodes; | |||
@@ -251,6 +252,30 @@ public class DataRepository { | |||
} | |||
public MutableLiveData<StatusResource<String>> getSignUpSage(final Context context) { | |||
return new NetworkBoundStatusResource<String>() { | |||
@Override protected void createCall() { | |||
final Disposable sagesDisposable = clientApi.getSages() | |||
.subscribeOn(Schedulers.newThread()) | |||
.observeOn(AndroidSchedulers.mainThread()) | |||
.subscribe(sages -> { | |||
nodes = sages.getSages(); | |||
if (nodes != null && !nodes.isEmpty()) { | |||
postMutableLiveData(StatusResource.success(nodes.get(0))); | |||
} else { | |||
Log.e("ERR", "There are no available sages at bootstrap URL."); | |||
postMutableLiveData(StatusResource.error(SAGE_LIST_IS_EMPTY)); | |||
} | |||
}, throwable -> { | |||
Log.e("ERR", "Bootstrap URL cannot be reached."); | |||
setErrorMessage(throwable, this); | |||
}); | |||
compositeDisposable.add(sagesDisposable); | |||
} | |||
}.getMutableLiveData(); | |||
} | |||
public MutableLiveData<StatusResource<byte[]>> login(Context context, String username, String password) { | |||
return new NetworkBoundStatusResource<byte[]>() { | |||
@@ -5,9 +5,6 @@ import android.content.Context; | |||
import com.getbubblenow.android.repository.DataRepository; | |||
import com.getbubblenow.android.resource.StatusResource; | |||
import java.util.List; | |||
import androidx.lifecycle.LiveData; | |||
import androidx.lifecycle.MutableLiveData; | |||
import androidx.lifecycle.ViewModel; | |||
@@ -49,4 +46,8 @@ public class LoginViewModel extends ViewModel { | |||
public boolean checkRepositoryInstance(){ | |||
return DataRepository.getRepositoryInstance() == null; | |||
} | |||
public MutableLiveData<StatusResource<String>> getSignUpSage(Context context){ | |||
return DataRepository.getRepositoryInstance().getSignUpSage(context); | |||
} | |||
} |
@@ -154,4 +154,28 @@ | |||
android:textSize="@dimen/text_title" /> | |||
</LinearLayout> | |||
<LinearLayout | |||
android:id="@+id/linearLayoutForRegister" | |||
android:layout_width="@dimen/edit_text_width" | |||
android:layout_height="wrap_content" | |||
android:layout_marginStart="@dimen/margin_start_and_end" | |||
android:layout_marginTop="24dp" | |||
android:layout_marginEnd="@dimen/margin_start_and_end" | |||
android:background="@color/white" | |||
android:orientation="vertical" | |||
app:layout_constraintEnd_toEndOf="parent" | |||
app:layout_constraintStart_toStartOf="parent" | |||
app:layout_constraintTop_toBottomOf="@+id/linearLayout"> | |||
<TextView | |||
android:id="@+id/signUpButton" | |||
android:layout_width="match_parent" | |||
android:layout_height="wrap_content" | |||
android:text="@string/no_account_yet" | |||
android:textAlignment="center" | |||
android:textSize="14sp" | |||
android:textStyle="normal" | |||
android:clickable="true" | |||
android:focusable="true" /> | |||
</LinearLayout> | |||
</androidx.constraintlayout.widget.ConstraintLayout> |
@@ -264,4 +264,5 @@ | |||
<string name="empty_message">"Email and password should not be empty"</string> | |||
<string name="building_bubble_title">We Are Building</string> | |||
<string name="private_bubble">Your Private Bubble!</string> | |||
<string name="no_account_yet">No account yet? Create one.</string> | |||
</resources> |