diff --git a/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java b/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java index 8a18d04..d0a4485 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/LoginActivity.java @@ -219,9 +219,9 @@ public class LoginActivity extends AppCompatActivity { parameters.put(Helper.CLIENT_SECRET, sharedpreferences.getString(Helper.CLIENT_SECRET, null)); parameters.put("grant_type", "password"); try { - parameters.put("username", URLEncoder.encode(login_uid.getText().toString().trim().toLowerCase(), "UTF-8")); + parameters.put("username", URLEncoder.encode(login_uid.getText().toString().trim(), "UTF-8")); } catch (UnsupportedEncodingException e) { - parameters.put("username", login_uid.getText().toString().trim().toLowerCase()); + parameters.put("username", login_uid.getText().toString().trim()); } try { parameters.put("password", URLEncoder.encode(login_passwd.getText().toString(), "UTF-8")); diff --git a/app/src/main/java/app/fedilab/fedilabtube/PeertubeRegisterActivity.java b/app/src/main/java/app/fedilab/fedilabtube/PeertubeRegisterActivity.java index afb7d3c..8cd5290 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/PeertubeRegisterActivity.java +++ b/app/src/main/java/app/fedilab/fedilabtube/PeertubeRegisterActivity.java @@ -17,17 +17,21 @@ package app.fedilab.fedilabtube; import android.os.Bundle; import android.text.Html; import android.text.method.LinkMovementMethod; +import android.util.Patterns; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.CheckBox; -import android.widget.EditText; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; +import com.google.android.material.textfield.TextInputEditText; + import java.util.Arrays; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import app.fedilab.fedilabtube.asynctasks.CreatePeertubeAccountAsyncTask; import app.fedilab.fedilabtube.client.APIResponse; @@ -55,16 +59,53 @@ public class PeertubeRegisterActivity extends AppCompatActivity implements OnPos getSupportActionBar().setDisplayHomeAsUpEnabled(true); signup = findViewById(R.id.signup); - EditText username = findViewById(R.id.username); - EditText email = findViewById(R.id.email); - EditText password = findViewById(R.id.password); - EditText password_confirm = findViewById(R.id.password_confirm); + TextInputEditText username = findViewById(R.id.username); + TextInputEditText email = findViewById(R.id.email); + TextInputEditText password = findViewById(R.id.password); + TextInputEditText password_confirm = findViewById(R.id.password_confirm); CheckBox agreement = findViewById(R.id.agreement); error_message = findViewById(R.id.error_message); + + username.setOnFocusChangeListener((view, focused) -> { + if (!focused && username.getText() != null) { + Pattern patternUsername = Pattern.compile("^[a-z0-9._]{1,50}$"); + Matcher matcherMaxId = patternUsername.matcher(username.getText().toString()); + if (!matcherMaxId.matches()) { + username.setError(getString(R.string.username_error)); + } + } + }); + + email.setOnFocusChangeListener((view, focused) -> { + if (!focused && email.getText() != null) { + Pattern patternUsername = Patterns.EMAIL_ADDRESS; + Matcher matcherMaxId = patternUsername.matcher(email.getText().toString()); + if (!matcherMaxId.matches()) { + email.setError(getString(R.string.email_error)); + } + } + }); + + password.setOnFocusChangeListener((view, focused) -> { + if (!focused && password.getText() != null) { + if (password.getText().length() < 6) { + password.setError(getString(R.string.password_length_error)); + } + } + }); + + password_confirm.setOnFocusChangeListener((view, focused) -> { + if (!focused && password_confirm.getText() != null && password.getText() != null) { + if (password_confirm.getText().toString().compareTo(password.getText().toString()) != 0) { + password_confirm.setError(getString(R.string.password)); + } + } + }); + signup.setOnClickListener(view -> { error_message.setVisibility(View.GONE); - if (username.getText().toString().trim().length() == 0 || email.getText().toString().trim().length() == 0 || + if (username.getText() == null || email.getText() == null || password.getText() == null || password_confirm.getText() == null || username.getText().toString().trim().length() == 0 || email.getText().toString().trim().length() == 0 || password.getText().toString().trim().length() == 0 || password_confirm.getText().toString().trim().length() == 0 || !agreement.isChecked()) { Toasty.error(PeertubeRegisterActivity.this, getString(R.string.all_field_filled)).show(); return; @@ -101,6 +142,7 @@ public class PeertubeRegisterActivity extends AppCompatActivity implements OnPos accountCreation.setPassword(password.getText().toString().trim()); accountCreation.setPasswordConfirm(password_confirm.getText().toString().trim()); accountCreation.setUsername(username.getText().toString().trim()); + accountCreation.setInstance(instance); new CreatePeertubeAccountAsyncTask(PeertubeRegisterActivity.this, accountCreation, Helper.getPeertubeUrl(instance), PeertubeRegisterActivity.this).executeOnExecutor(THREAD_POOL_EXECUTOR); }); diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeAPI.java b/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeAPI.java index a3ace32..35bbbdc 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeAPI.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/PeertubeAPI.java @@ -838,7 +838,7 @@ public class PeertubeAPI { params.put("username", accountCreation.getUsername()); params.put("email", accountCreation.getEmail()); params.put("password", accountCreation.getPassword()); - new HttpsConnection(context).post(getAbsoluteUrl("/users/register"), 30, params, null); + new HttpsConnection(context).post(getAbsoluteUrlForInstance(accountCreation.getInstance(), "/users/register"), 30, params, null); apiResponse.setStringData(accountCreation.getEmail()); } catch (NoSuchAlgorithmException | IOException | KeyManagementException e) { e.printStackTrace(); @@ -920,7 +920,6 @@ public class PeertubeAPI { * @param accountId String account fetched * @return Account entity */ - @SuppressWarnings("unused") public Account getAccount(String accountId) { account = new Account(); @@ -2074,6 +2073,11 @@ public class PeertubeAPI { return Helper.instanceWithProtocol(context) + "/api/v1" + action; } + + private String getAbsoluteUrlForInstance(String instance, String action) { + return "https://" + instance + "/api/v1" + action; + } + public enum reportType { ACCOUNT, COMMENT, diff --git a/app/src/main/java/app/fedilab/fedilabtube/client/entities/AccountCreation.java b/app/src/main/java/app/fedilab/fedilabtube/client/entities/AccountCreation.java index 73466b9..4ab5830 100644 --- a/app/src/main/java/app/fedilab/fedilabtube/client/entities/AccountCreation.java +++ b/app/src/main/java/app/fedilab/fedilabtube/client/entities/AccountCreation.java @@ -22,6 +22,7 @@ public class AccountCreation { private String email; private String password; private String passwordConfirm; + private String instance; public String getUsername() { return username; @@ -62,4 +63,12 @@ public class AccountCreation { public void setDisplayName(String displayName) { this.displayName = displayName; } + + public String getInstance() { + return instance; + } + + public void setInstance(String instance) { + this.instance = instance; + } } diff --git a/app/src/main/res/layout/activity_register_peertube.xml b/app/src/main/res/layout/activity_register_peertube.xml index 9fd16e5..8e270d4 100644 --- a/app/src/main/res/layout/activity_register_peertube.xml +++ b/app/src/main/res/layout/activity_register_peertube.xml @@ -14,150 +14,176 @@ You should have received a copy of the GNU General Public License along with TubeLab; if not, see . --> - + android:layout_height="match_parent"> + android:layout_margin="@dimen/fab_margin" + android:orientation="vertical"> - + android:orientation="horizontal"> + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_margin="10dp" + android:background="@drawable/red_border" + android:gravity="center" + android:padding="5dp" + android:textColor="@color/red_1" + android:visibility="gone" /> - + android:layout_marginTop="20dp" + android:labelFor="@+id/username" + android:text="@string/username" /> -