@@ -6,6 +6,7 @@ import androidx.lifecycle.Observer; | |||||
import androidx.lifecycle.ViewModelProvider; | import androidx.lifecycle.ViewModelProvider; | ||||
import android.content.Intent; | import android.content.Intent; | ||||
import android.net.Uri; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.text.Editable; | import android.text.Editable; | ||||
import android.text.TextUtils; | import android.text.TextUtils; | ||||
@@ -22,7 +23,6 @@ import android.widget.Toast; | |||||
import com.getbubblenow.android.R; | import com.getbubblenow.android.R; | ||||
import com.getbubblenow.android.api.ApiConstants; | import com.getbubblenow.android.api.ApiConstants; | ||||
import com.getbubblenow.android.repository.DataRepository; | |||||
import com.getbubblenow.android.resource.StatusResource; | import com.getbubblenow.android.resource.StatusResource; | ||||
import com.getbubblenow.android.viewmodel.LoginViewModel; | import com.getbubblenow.android.viewmodel.LoginViewModel; | ||||
@@ -33,6 +33,7 @@ public class LoginActivity extends BaseActivityBubble { | |||||
private EditText userName; | private EditText userName; | ||||
private EditText password; | private EditText password; | ||||
private AppCompatButton sign; | private AppCompatButton sign; | ||||
private TextView signUpButton; | |||||
private boolean userNameStateFlag = false; | private boolean userNameStateFlag = false; | ||||
private boolean passwordStateFlag = 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 PASSWORD_KEY = "password"; | ||||
private static final String NO_INTERNET_CONNECTION = "no internet connection"; | private static final String NO_INTERNET_CONNECTION = "no internet connection"; | ||||
private static final String LOGIN_FAILED = "Login Failed"; | private static final String LOGIN_FAILED = "Login Failed"; | ||||
private static final String REGISTER_POSTFIX = "/register"; | |||||
@Override | @Override | ||||
protected void onCreate(Bundle savedInstanceState) { | protected void onCreate(Bundle savedInstanceState) { | ||||
@@ -63,12 +65,34 @@ public class LoginActivity extends BaseActivityBubble { | |||||
userNameStateListener(); | userNameStateListener(); | ||||
passwordStateListener(); | passwordStateListener(); | ||||
sendListener(); | 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() { | private void initViews() { | ||||
userName = findViewById(R.id.userName); | userName = findViewById(R.id.userName); | ||||
password = findViewById(R.id.password); | password = findViewById(R.id.password); | ||||
sign = findViewById(R.id.signButton); | 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 RUNNING = "running"; | ||||
private static final String BASE_URL_PREFIX = "https://"; | private static final String BASE_URL_PREFIX = "https://"; | ||||
private static final String BASE_URL_SUFFIX = ":1443/api/"; | 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 deviceName; | ||||
private static String deviceID; | private static String deviceID; | ||||
private List<String> nodes; | 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) { | public MutableLiveData<StatusResource<byte[]>> login(Context context, String username, String password) { | ||||
return new NetworkBoundStatusResource<byte[]>() { | return new NetworkBoundStatusResource<byte[]>() { | ||||
@@ -5,9 +5,6 @@ import android.content.Context; | |||||
import com.getbubblenow.android.repository.DataRepository; | import com.getbubblenow.android.repository.DataRepository; | ||||
import com.getbubblenow.android.resource.StatusResource; | import com.getbubblenow.android.resource.StatusResource; | ||||
import java.util.List; | |||||
import androidx.lifecycle.LiveData; | |||||
import androidx.lifecycle.MutableLiveData; | import androidx.lifecycle.MutableLiveData; | ||||
import androidx.lifecycle.ViewModel; | import androidx.lifecycle.ViewModel; | ||||
@@ -49,4 +46,8 @@ public class LoginViewModel extends ViewModel { | |||||
public boolean checkRepositoryInstance(){ | public boolean checkRepositoryInstance(){ | ||||
return DataRepository.getRepositoryInstance() == null; | 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" /> | android:textSize="@dimen/text_title" /> | ||||
</LinearLayout> | </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> | </androidx.constraintlayout.widget.ConstraintLayout> |
@@ -264,4 +264,5 @@ | |||||
<string name="empty_message">"Email and password should not be empty"</string> | <string name="empty_message">"Email and password should not be empty"</string> | ||||
<string name="building_bubble_title">We Are Building</string> | <string name="building_bubble_title">We Are Building</string> | ||||
<string name="private_bubble">Your Private Bubble!</string> | <string name="private_bubble">Your Private Bubble!</string> | ||||
<string name="no_account_yet">No account yet? Create one.</string> | |||||
</resources> | </resources> |