Add change password
This commit is contained in:
@@ -17,6 +17,12 @@
|
||||
android:theme="@style/Theme.TaskTracker"
|
||||
android:usesCleartextTraffic="true"
|
||||
tools:targetApi="31">
|
||||
<activity
|
||||
android:name=".Activities.SettingsActivity"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name=".Settings"
|
||||
android:exported="false" />
|
||||
<activity
|
||||
android:name=".Activities.EditTask"
|
||||
android:exported="false" />
|
||||
|
||||
@@ -2,14 +2,13 @@ package com.example.tasktracker.Activities;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.activity.EdgeToEdge;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.example.tasktracker.Answers.LoginAnswer;
|
||||
import com.example.tasktracker.Answers.StatusAnswer;
|
||||
import com.example.tasktracker.Api.ApiFactory;
|
||||
import com.example.tasktracker.PublicKeyNames;
|
||||
import com.example.tasktracker.R;
|
||||
@@ -84,9 +83,9 @@ public class LoginActivity extends AppCompatActivity {
|
||||
|
||||
private void SingIn() {
|
||||
Disposable disposable = ApiFactory.getApiService().singin(login, password)
|
||||
.subscribeOn(Schedulers.io()).subscribe(new Consumer<LoginAnswer>() {
|
||||
.subscribeOn(Schedulers.io()).subscribe(new Consumer<StatusAnswer>() {
|
||||
@Override
|
||||
public void accept(LoginAnswer loginAnswer) throws Throwable {
|
||||
public void accept(StatusAnswer loginAnswer) throws Throwable {
|
||||
if(loginAnswer.getStatus().equals("big")) {
|
||||
Snackbar.make(binding.getRoot(), R.string.snackbar_InvalidLogin, Snackbar.LENGTH_SHORT).show();
|
||||
return;
|
||||
@@ -116,9 +115,9 @@ public class LoginActivity extends AppCompatActivity {
|
||||
}
|
||||
private void SingUp() {
|
||||
Disposable disposable = ApiFactory.getApiService().singup(login, password)
|
||||
.subscribeOn(Schedulers.io()).subscribe(new Consumer<LoginAnswer>() {
|
||||
.subscribeOn(Schedulers.io()).subscribe(new Consumer<StatusAnswer>() {
|
||||
@Override
|
||||
public void accept(LoginAnswer loginAnswer) throws Throwable {
|
||||
public void accept(StatusAnswer loginAnswer) throws Throwable {
|
||||
if(loginAnswer.getStatus().equals("big")) {
|
||||
Snackbar.make(binding.getRoot(), R.string.snackbar_BigLoginPassword, Snackbar.LENGTH_SHORT).show();
|
||||
return;
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package com.example.tasktracker.Activities;
|
||||
|
||||
import static android.view.View.INVISIBLE;
|
||||
import static android.view.View.VISIBLE;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
@@ -115,19 +118,6 @@ public class MainMenu extends AppCompatActivity {
|
||||
}
|
||||
});
|
||||
|
||||
binding.buttonSingOut.setOnClickListener(v -> {
|
||||
getSharedPreferences(PublicKeyNames.TOKEN_LIST, MODE_PRIVATE).
|
||||
edit().
|
||||
remove(PublicKeyNames.LOGIN_KEY).
|
||||
remove(PublicKeyNames.PASSWORD_KEY).
|
||||
apply();
|
||||
|
||||
@SuppressLint("UnsafeIntentLaunch")
|
||||
Intent intent = new Intent(this, LoginActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
});
|
||||
|
||||
viewModel.getOnLoad().observe(this, new Observer<List<Task>>() {
|
||||
@Override
|
||||
public void onChanged(List<Task> tasks) {
|
||||
@@ -148,6 +138,22 @@ public class MainMenu extends AppCompatActivity {
|
||||
}
|
||||
|
||||
public void Offline() {
|
||||
binding.buttonSettings.setVisibility(INVISIBLE);
|
||||
binding.buttonLogOut.setVisibility(VISIBLE);
|
||||
|
||||
binding.buttonLogOut.setOnClickListener(v -> {
|
||||
getSharedPreferences(PublicKeyNames.TOKEN_LIST, MODE_PRIVATE).
|
||||
edit().
|
||||
remove(PublicKeyNames.LOGIN_KEY).
|
||||
remove(PublicKeyNames.PASSWORD_KEY).
|
||||
apply();
|
||||
|
||||
@SuppressLint("UnsafeIntentLaunch")
|
||||
Intent intent = new Intent(this, LoginActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
});
|
||||
|
||||
ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,
|
||||
ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
|
||||
@Override
|
||||
@@ -181,6 +187,11 @@ public class MainMenu extends AppCompatActivity {
|
||||
}
|
||||
|
||||
private void Online() {
|
||||
binding.buttonSettings.setOnClickListener(v->{
|
||||
Intent intent = SettingsActivity.getIntent(this, login);
|
||||
startActivity(intent);
|
||||
});
|
||||
|
||||
viewModel.onFail().observe(this, new Observer<String>() {
|
||||
@Override
|
||||
public void onChanged(String s) {
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
package com.example.tasktracker.Activities;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.example.tasktracker.Answers.StatusAnswer;
|
||||
import com.example.tasktracker.Api.ApiFactory;
|
||||
import com.example.tasktracker.PublicKeyNames;
|
||||
import com.example.tasktracker.R;
|
||||
import com.example.tasktracker.databinding.ActivitySettingsBinding;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
import io.reactivex.rxjava3.disposables.CompositeDisposable;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
import io.reactivex.rxjava3.functions.Consumer;
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers;
|
||||
|
||||
public class SettingsActivity extends AppCompatActivity {
|
||||
private ActivitySettingsBinding binding;
|
||||
private CompositeDisposable compositeDisposable;
|
||||
|
||||
private String login;
|
||||
|
||||
public static Intent getIntent(Context context, String login) {
|
||||
Intent intent = new Intent(context, SettingsActivity.class);
|
||||
intent.putExtra(PublicKeyNames.LOGIN_KEY, login);
|
||||
return intent;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
binding = ActivitySettingsBinding.inflate(getLayoutInflater());
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(binding.getRoot());
|
||||
|
||||
login = getIntent().getStringExtra(PublicKeyNames.LOGIN_KEY);
|
||||
|
||||
binding.login.setText(login);
|
||||
|
||||
binding.buttonBack.setOnClickListener(v->{
|
||||
finish();
|
||||
});
|
||||
binding.buttonLogOut.setOnClickListener(v->{
|
||||
getSharedPreferences(PublicKeyNames.TOKEN_LIST, MODE_PRIVATE)
|
||||
.edit()
|
||||
.remove(PublicKeyNames.LOGIN_KEY)
|
||||
.remove(PublicKeyNames.PASSWORD_KEY)
|
||||
.apply();
|
||||
Intent intent = new Intent(SettingsActivity.this, LoginActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
});
|
||||
compositeDisposable = new CompositeDisposable();
|
||||
|
||||
binding.buttonChangePassword.setOnClickListener(v->{
|
||||
String oldPassword = binding.fieldOldPassword.getText().toString();
|
||||
String newPassword = binding.fieldNewPassword.getText().toString();
|
||||
String retryPassword = binding.fieldRetreyPassword.getText().toString();
|
||||
|
||||
if(!retryPassword.equals(newPassword)) {
|
||||
Snackbar.make(binding.getRoot(), R.string.snackbar_PasswordsNotEquals, Snackbar.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
|
||||
Disposable disposable = ApiFactory.getApiService().changePassword(oldPassword, login, newPassword)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.subscribe(new Consumer<StatusAnswer>() {
|
||||
@Override
|
||||
public void accept(StatusAnswer statusAnswer) throws Throwable {
|
||||
if (statusAnswer.getStatus().equals("ok")) {
|
||||
getSharedPreferences(PublicKeyNames.TOKEN_LIST, MODE_PRIVATE)
|
||||
.edit()
|
||||
.remove(PublicKeyNames.LOGIN_KEY)
|
||||
.remove(PublicKeyNames.PASSWORD_KEY)
|
||||
.apply();
|
||||
Intent intent = new Intent(SettingsActivity.this, LoginActivity.class);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
else {
|
||||
Snackbar.make(binding.getRoot(), R.string.snackbar_InvalidPassword, Snackbar.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}, new Consumer<Throwable>() {
|
||||
@Override
|
||||
public void accept(Throwable throwable) throws Throwable {
|
||||
Snackbar.make(binding.getRoot(), R.string.snackbar_InternetError, Snackbar.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
compositeDisposable.add(disposable);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
compositeDisposable.dispose();
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -4,7 +4,7 @@ import com.google.gson.annotations.SerializedName;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class LoginAnswer implements Serializable {
|
||||
public class StatusAnswer implements Serializable {
|
||||
@SerializedName("status")
|
||||
private String status;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.tasktracker.Api;
|
||||
|
||||
import com.example.tasktracker.Answers.LoginAnswer;
|
||||
import com.example.tasktracker.Answers.StatusAnswer;
|
||||
import com.example.tasktracker.Answers.Task;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -14,10 +14,10 @@ import retrofit2.http.Query;
|
||||
|
||||
public interface ApiService {
|
||||
@GET("singin")
|
||||
Single<LoginAnswer> singin(@Query("login") String login, @Query("password") String password);
|
||||
Single<StatusAnswer> singin(@Query("login") String login, @Query("password") String password);
|
||||
|
||||
@POST("singup")
|
||||
Single<LoginAnswer> singup(@Query("login") String login, @Query("password") String password);
|
||||
Single<StatusAnswer> singup(@Query("login") String login, @Query("password") String password);
|
||||
|
||||
@GET("user/task")
|
||||
Single<Task> getTask(@Query("login") String login, @Query("password") String password, @Query("id") long id);
|
||||
@@ -33,4 +33,7 @@ public interface ApiService {
|
||||
|
||||
@POST("user/task/remove")
|
||||
Call<Void> removeTask(@Query("login") String login, @Query("password") String password, @Query("id") long ID);
|
||||
|
||||
@POST("user/ChangePassword")
|
||||
Single<StatusAnswer> changePassword(@Query("oldPassword") String oldPassword, @Query("login") String login, @Query("newPassword") String newPassword);
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
@@ -29,12 +29,22 @@
|
||||
app:layout_constraintTop_toBottomOf="@id/findLine"/>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/button_SingOut"
|
||||
android:id="@+id/button_LogOut"
|
||||
android:src="@drawable/exit"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toTopOf="@+id/button_addNewTask"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_margin="20sp"
|
||||
android:visibility="invisible"/>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/button_Settings"
|
||||
android:src="@drawable/setting"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toTopOf="@+id/button_addNewTask"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_margin="20sp"/>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/main"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
tools:context=".Activities.SettingsActivity">
|
||||
|
||||
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
android:id="@+id/button_back"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="10sp"
|
||||
android:src="@android:drawable/ic_media_rew"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/login"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="25sp"
|
||||
android:layout_margin="10sp"
|
||||
tools:hint="login"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/field_oldPassword"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="25sp"
|
||||
android:layout_margin="10sp"
|
||||
android:hint="@string/hint_OldPassword"
|
||||
android:inputType="textPassword"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/field_newPassword"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="25sp"
|
||||
android:layout_margin="10sp"
|
||||
android:hint="@string/hint_NewPassword"
|
||||
android:inputType="textPassword"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/field_retreyPassword"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="25sp"
|
||||
android:layout_margin="10sp"
|
||||
android:hint="@string/hint_RetreyPassword"
|
||||
android:inputType="textPassword"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_changePassword"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="25sp"
|
||||
android:layout_margin="10sp"
|
||||
android:text="@string/button_ChangePassword"/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/button_LogOut"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="25sp"
|
||||
android:layout_margin="10sp"
|
||||
android:text="@string/button_LogOut"/>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -13,6 +13,8 @@
|
||||
<string name="hint_TaskName">Task name</string>
|
||||
<string name="hint_TaskDescription">Description</string>
|
||||
<string name="hint_Minute">Minute</string>
|
||||
<string name="snackbar_PasswordsNotEquals">Passwords not equals</string>
|
||||
<string name="hint_RetreyPassword">Retry password</string>
|
||||
<string name="snackbar_EnterLogin">Enter login</string>
|
||||
<string name="snackbar_EnterPassword">Enter password</string>
|
||||
<string name="snackbar_InvalidLogin">Incorrect login or password</string>
|
||||
@@ -29,4 +31,9 @@
|
||||
<string name="hint_Hour">Hour</string>
|
||||
<string name="snackbar_BigLoginPassword">Login or password is too long.</string>
|
||||
<string name="snackbar_SmallLoginPassword">Login or password is too small.</string>
|
||||
<string name="hint_OldPassword">Old password</string>
|
||||
<string name="hint_NewPassword">New password</string>
|
||||
<string name="button_ChangePassword">Change password</string>
|
||||
<string name="button_LogOut">Log out</string>
|
||||
<string name="snackbar_InvalidPassword">Invalid password</string>
|
||||
</resources>
|
||||
@@ -13,6 +13,8 @@
|
||||
<string name="hint_TaskName">Название задачи</string>
|
||||
<string name="hint_TaskDescription">Описание</string>
|
||||
<string name="hint_Minute">Минута</string>
|
||||
<string name="snackbar_PasswordsNotEquals">Пароли не софпадают</string>
|
||||
<string name="hint_RetreyPassword">Повтори пароль</string>
|
||||
<string name="snackbar_EnterLogin">Введите логин</string>
|
||||
<string name="snackbar_EnterPassword">Введите пароль</string>
|
||||
<string name="snackbar_InvalidLogin">Неправильный логин или пароль</string>
|
||||
@@ -29,4 +31,9 @@
|
||||
<string name="hint_Hour">Час</string>
|
||||
<string name="snackbar_BigLoginPassword">Логин или пороль слишком длинный.</string>
|
||||
<string name="snackbar_SmallLoginPassword">Логин или пороль слишком короткий.</string>
|
||||
<string name="hint_OldPassword">Старый пароль</string>
|
||||
<string name="hint_NewPassword">Новый пароль</string>
|
||||
<string name="button_ChangePassword">Сменить пароль</string>
|
||||
<string name="button_LogOut">Выйти</string>
|
||||
<string name="snackbar_InvalidPassword">Не верный пароль</string>
|
||||
</resources>
|
||||
@@ -12,6 +12,8 @@
|
||||
<string name="button_NO">No</string>
|
||||
<string name="button_DefaultData" translatable="false">DD/MM/YEAR</string>
|
||||
<string name="button_DefaultTime" translatable="false">HH/MM</string>
|
||||
<string name="button_ChangePassword">Change password</string>
|
||||
<string name="button_LogOut">Log out</string>
|
||||
|
||||
<!-- Hints -->
|
||||
<string name="hint_Login">Login</string>
|
||||
@@ -24,6 +26,9 @@
|
||||
<string name="hint_Yar">Year</string>
|
||||
<string name="hint_Hour">Hour</string>
|
||||
<string name="hint_Minute">Minute</string>
|
||||
<string name="hint_OldPassword">Old password</string>
|
||||
<string name="hint_NewPassword">New password</string>
|
||||
<string name="hint_RetreyPassword">Retry password</string>
|
||||
|
||||
<!-- Snackbar -->
|
||||
<string name="snackbar_EnterLogin">Enter login</string>
|
||||
@@ -36,5 +41,7 @@
|
||||
<string name="snackbar_DataBaseError">Something went wrong.</string>
|
||||
<string name="snackbar_BigLoginPassword">Login or password is too long.</string>
|
||||
<string name="snackbar_SmallLoginPassword">Login or password is too small.</string>
|
||||
<string name="snackbar_PasswordsNotEquals">Passwords not equals</string>
|
||||
<string name="snackbar_InvalidPassword">Invalid password</string>
|
||||
|
||||
</resources>
|
||||
Reference in New Issue
Block a user