diff --git a/ui/src/main/AndroidManifest.xml b/ui/src/main/AndroidManifest.xml index a708955..ca4816e 100644 --- a/ui/src/main/AndroidManifest.xml +++ b/ui/src/main/AndroidManifest.xml @@ -35,15 +35,17 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/AppTheme"> - + android:theme="@style/BubbleTheme"> + - + diff --git a/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java b/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java index 97bc0ed..8c202b4 100644 --- a/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java +++ b/ui/src/main/java/com/wireguard/android/activity/LoginActivity.java @@ -1,42 +1,47 @@ package com.wireguard.android.activity; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.widget.AppCompatButton; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import android.content.Intent; import android.os.Bundle; import android.security.KeyChain; +import android.text.Editable; +import android.text.TextWatcher; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; -import android.widget.Button; import android.widget.EditText; import android.widget.Toast; - import com.wireguard.android.R; import com.wireguard.android.model.User; import com.wireguard.android.repository.DataRepository; import com.wireguard.android.resource.StatusResource; import com.wireguard.android.viewmodel.LoginViewModel; -import javax.security.cert.CertificateEncodingException; -import javax.security.cert.CertificateException; -import javax.security.cert.X509Certificate; - public class LoginActivity extends BaseActivityBubble { private LoginViewModel loginViewModel; private EditText bubbleName; private EditText userName; private EditText password; - private Button sign; + private AppCompatButton sign; private static final String BASE_URL_PREFIX = "https://"; private static final String BASE_URL_SUFFIX = ":1443/api/"; private static final String SEPARATOR = "\\."; private static final int REQUEST_CODE = 1555; private static final String CERTIFICATE_NAME = "Bubble Certificate"; + private boolean bubbleNameStateFlag = false; + private boolean userNameStateFlag = false; + private boolean passwordStateFlag = false; + private static final String BUBBLE_NAME_KEY = "bubbleName"; + private static final String USER_NAME_KEY = "userName"; + private static final String PASSWORD_KEY = "password"; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -71,8 +76,12 @@ public class LoginActivity extends BaseActivityBubble { login(usernameInput, passwordInput); } }); + bubbleNameStateListener(); + userNameStateListener(); + passwordStateListener(); } + private void initViews() { bubbleName = findViewById(R.id.bubbleName); userName = findViewById(R.id.userName); @@ -80,6 +89,84 @@ public class LoginActivity extends BaseActivityBubble { sign = findViewById(R.id.signButton); } + private void bubbleNameStateListener() { + bubbleName.addTextChangedListener(new TextWatcher() { + @Override public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { + + } + + @Override public void onTextChanged(final CharSequence s, final int start, final int before, final int count) { + + } + + @Override public void afterTextChanged(final Editable s) { + + if (bubbleName.getText().toString().trim().isEmpty()) { + bubbleNameStateFlag = false; + } else { + bubbleNameStateFlag = true; + } + setButtonState(); + } + }); + } + + private void userNameStateListener() { + userName.addTextChangedListener(new TextWatcher() { + @Override public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { + + } + + @Override public void onTextChanged(final CharSequence s, final int start, final int before, final int count) { + + } + + @Override public void afterTextChanged(final Editable s) { + + if (userName.getText().toString().trim().isEmpty()) { + userNameStateFlag = false; + } else { + userNameStateFlag = true; + } + setButtonState(); + } + }); + } + + private void passwordStateListener() { + + password.addTextChangedListener(new TextWatcher() { + @Override public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) { + + } + + @Override public void onTextChanged(final CharSequence s, final int start, final int before, final int count) { + + } + + @Override public void afterTextChanged(final Editable s) { + + if (password.getText().toString().trim().isEmpty()) { + passwordStateFlag = false; + } else { + passwordStateFlag = true; + } + setButtonState(); + } + }); + } + + private void setButtonState(){ + if(userNameStateFlag && bubbleNameStateFlag && passwordStateFlag){ + sign.setBackgroundDrawable(getDrawable(R.drawable.sign_in_enable)); + sign.setEnabled(true); + } + else { + sign.setBackgroundDrawable(getDrawable(R.drawable.sign_in_button)); + sign.setEnabled(false); + } + } + private void login(String username, String password) { loginViewModel.login(username, password, this).observe(this, new Observer>() { @Override public void onChanged(final StatusResource userStatusResource) { @@ -124,4 +211,18 @@ public class LoginActivity extends BaseActivityBubble { Toast.makeText(this, getString(R.string.cerificate_install), Toast.LENGTH_LONG).show(); } } + + @Override protected void onSaveInstanceState(@NonNull final Bundle outState) { + outState.putBoolean(BUBBLE_NAME_KEY,bubbleNameStateFlag); + outState.putBoolean(USER_NAME_KEY,userNameStateFlag); + outState.putBoolean(PASSWORD_KEY,passwordStateFlag); + super.onSaveInstanceState(outState); + } + + @Override protected void onRestoreInstanceState(@NonNull final Bundle savedInstanceState) { + bubbleNameStateFlag = savedInstanceState.getBoolean(BUBBLE_NAME_KEY); + userNameStateFlag = savedInstanceState.getBoolean(USER_NAME_KEY); + passwordStateFlag = savedInstanceState.getBoolean(PASSWORD_KEY); + super.onRestoreInstanceState(savedInstanceState); + } } diff --git a/ui/src/main/res/drawable-hdpi/bubble_top.png b/ui/src/main/res/drawable-hdpi/bubble_top.png new file mode 100644 index 0000000..e0d4518 Binary files /dev/null and b/ui/src/main/res/drawable-hdpi/bubble_top.png differ diff --git a/ui/src/main/res/drawable-hdpi/color_curves.png b/ui/src/main/res/drawable-hdpi/color_curves.png new file mode 100644 index 0000000..5088638 Binary files /dev/null and b/ui/src/main/res/drawable-hdpi/color_curves.png differ diff --git a/ui/src/main/res/drawable-ldpi/bubble_top.png b/ui/src/main/res/drawable-ldpi/bubble_top.png new file mode 100644 index 0000000..8b432b9 Binary files /dev/null and b/ui/src/main/res/drawable-ldpi/bubble_top.png differ diff --git a/ui/src/main/res/drawable-ldpi/color_curves.png b/ui/src/main/res/drawable-ldpi/color_curves.png new file mode 100644 index 0000000..7b2c88c Binary files /dev/null and b/ui/src/main/res/drawable-ldpi/color_curves.png differ diff --git a/ui/src/main/res/drawable-mdpi/bubble_top.png b/ui/src/main/res/drawable-mdpi/bubble_top.png new file mode 100644 index 0000000..4b8acbf Binary files /dev/null and b/ui/src/main/res/drawable-mdpi/bubble_top.png differ diff --git a/ui/src/main/res/drawable-mdpi/color_curves.png b/ui/src/main/res/drawable-mdpi/color_curves.png new file mode 100644 index 0000000..1ec5558 Binary files /dev/null and b/ui/src/main/res/drawable-mdpi/color_curves.png differ diff --git a/ui/src/main/res/drawable-xhdpi/bubble_top.png b/ui/src/main/res/drawable-xhdpi/bubble_top.png new file mode 100644 index 0000000..6e2bf91 Binary files /dev/null and b/ui/src/main/res/drawable-xhdpi/bubble_top.png differ diff --git a/ui/src/main/res/drawable-xhdpi/color_curves.png b/ui/src/main/res/drawable-xhdpi/color_curves.png new file mode 100644 index 0000000..a4737eb Binary files /dev/null and b/ui/src/main/res/drawable-xhdpi/color_curves.png differ diff --git a/ui/src/main/res/drawable-xxhdpi/bubble_top.png b/ui/src/main/res/drawable-xxhdpi/bubble_top.png new file mode 100644 index 0000000..3383efa Binary files /dev/null and b/ui/src/main/res/drawable-xxhdpi/bubble_top.png differ diff --git a/ui/src/main/res/drawable-xxhdpi/color_curves.png b/ui/src/main/res/drawable-xxhdpi/color_curves.png new file mode 100644 index 0000000..0f09aac Binary files /dev/null and b/ui/src/main/res/drawable-xxhdpi/color_curves.png differ diff --git a/ui/src/main/res/drawable-xxxhdpi/bubble_top.png b/ui/src/main/res/drawable-xxxhdpi/bubble_top.png new file mode 100644 index 0000000..97d68d1 Binary files /dev/null and b/ui/src/main/res/drawable-xxxhdpi/bubble_top.png differ diff --git a/ui/src/main/res/drawable-xxxhdpi/color_curves.png b/ui/src/main/res/drawable-xxxhdpi/color_curves.png new file mode 100644 index 0000000..b858d28 Binary files /dev/null and b/ui/src/main/res/drawable-xxxhdpi/color_curves.png differ diff --git a/ui/src/main/res/drawable/rectangle.xml b/ui/src/main/res/drawable/rectangle.xml new file mode 100644 index 0000000..e7cce7d --- /dev/null +++ b/ui/src/main/res/drawable/rectangle.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/ui/src/main/res/drawable/sign_in_button.xml b/ui/src/main/res/drawable/sign_in_button.xml new file mode 100644 index 0000000..78d7223 --- /dev/null +++ b/ui/src/main/res/drawable/sign_in_button.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/ui/src/main/res/drawable/sign_in_enable.xml b/ui/src/main/res/drawable/sign_in_enable.xml new file mode 100644 index 0000000..4e43ce6 --- /dev/null +++ b/ui/src/main/res/drawable/sign_in_enable.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/ui/src/main/res/font/josefin_sans.ttf b/ui/src/main/res/font/josefin_sans.ttf new file mode 100644 index 0000000..d234c43 Binary files /dev/null and b/ui/src/main/res/font/josefin_sans.ttf differ diff --git a/ui/src/main/res/font/josefin_sans_bold.ttf b/ui/src/main/res/font/josefin_sans_bold.ttf new file mode 100644 index 0000000..7541bf0 Binary files /dev/null and b/ui/src/main/res/font/josefin_sans_bold.ttf differ diff --git a/ui/src/main/res/font/lato.ttf b/ui/src/main/res/font/lato.ttf new file mode 100644 index 0000000..04ea8ef Binary files /dev/null and b/ui/src/main/res/font/lato.ttf differ diff --git a/ui/src/main/res/layout/activity_login.xml b/ui/src/main/res/layout/activity_login.xml index ff9b13d..2e08aed 100644 --- a/ui/src/main/res/layout/activity_login.xml +++ b/ui/src/main/res/layout/activity_login.xml @@ -4,87 +4,199 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" + android:background="@color/white" android:layout_height="match_parent" tools:context="com.wireguard.android.activity.LoginActivity"> + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/signIn" /> + + + app:layout_constraintTop_toBottomOf="@+id/bubbleName" /> + app:layout_constraintTop_toBottomOf="@+id/findBubble" /> + app:layout_constraintTop_toBottomOf="@+id/emailTitle" /> + app:layout_constraintTop_toBottomOf="@+id/userName" /> - -