diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2ae5448..08c38ea 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + @@ -8,22 +7,24 @@ + android:usesCleartextTraffic="true" + android:theme="@style/splashScreenTheme"> + + + + android:name=".ui.screens.MainActivity" + android:exported="true" > @@ -31,5 +32,4 @@ - - \ No newline at end of file + diff --git a/app/src/main/java/ru/myitschool/work/api/data/EmployeeRepositoryImpl.java b/app/src/main/java/ru/myitschool/work/api/data/EmployeeRepositoryImpl.java index c5c7fff..92bb96f 100644 --- a/app/src/main/java/ru/myitschool/work/api/data/EmployeeRepositoryImpl.java +++ b/app/src/main/java/ru/myitschool/work/api/data/EmployeeRepositoryImpl.java @@ -5,13 +5,11 @@ import androidx.annotation.NonNull; import ru.myitschool.work.api.data.dto.employee.EmployeeDTO; import ru.myitschool.work.api.data.network.RetrofitFactory; import ru.myitschool.work.api.data.source.EmployeeApi; -import ru.myitschool.work.api.data.utils.CallToConsumer; import ru.myitschool.work.api.domain.EmployeeRepository; import ru.myitschool.work.api.domain.entity.Status; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; import ru.myitschool.work.api.domain.entity.employee.ItemEmployeeEntity; -import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; @@ -85,22 +83,22 @@ public class EmployeeRepositoryImpl implements EmployeeRepository { // } @Override - public void getAllEmployees(@NonNull Consumer>> callback) { + public void getAllEmployees(@NonNull Consumer>> callback) { } @Override - public ItemEmployeeEntity getEmployeeById(long id, @NonNull Consumer> callback) { + public ItemEmployeeEntity getEmployeeById(long id, @NonNull Consumer> callback) { return null; } @Override - public void getEmployeeByEmail(@NonNull String email, @NonNull Consumer> callback) { + public void getEmployeeByEmail(@NonNull String email, @NonNull Consumer> callback) { } @Override - public void getEmployeeByTelephone(@NonNull String telephone, @NonNull Consumer> callback) { + public void getEmployeeByTelephone(@NonNull String telephone, @NonNull Consumer> callback) { } @@ -110,7 +108,7 @@ public class EmployeeRepositoryImpl implements EmployeeRepository { } @Override - public void deleteEmployee(long id, @NonNull Consumer> callback) { + public void deleteEmployee(long id, @NonNull Consumer> callback) { } diff --git a/app/src/main/java/ru/myitschool/work/api/data/SignRepositoryImpl.java b/app/src/main/java/ru/myitschool/work/api/data/SignRepositoryImpl.java index ecca9fa..3510752 100644 --- a/app/src/main/java/ru/myitschool/work/api/data/SignRepositoryImpl.java +++ b/app/src/main/java/ru/myitschool/work/api/data/SignRepositoryImpl.java @@ -1,5 +1,7 @@ package ru.myitschool.work.api.data; +import android.util.Log; + import androidx.annotation.NonNull; import java.util.List; @@ -11,7 +13,7 @@ import ru.myitschool.work.api.data.source.SignApi; import ru.myitschool.work.api.data.utils.CallToConsumer; import ru.myitschool.work.api.domain.SignRepository; import ru.myitschool.work.api.domain.entity.Status; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; public class SignRepositoryImpl implements SignRepository { private static SignRepositoryImpl INSTANCE; @@ -27,7 +29,7 @@ public class SignRepositoryImpl implements SignRepository { } @Override - public void createEmployee(@NonNull EmployeeCreateDTO employeeCreateDTO, @NonNull Consumer> callback) { + public void createEmployee(@NonNull EmployeeCreateDTO employeeCreateDTO, @NonNull Consumer> callback) { signApi.register(employeeCreateDTO).enqueue(new CallToConsumer<>( callback, employeeDTO -> { @@ -42,32 +44,27 @@ public class SignRepositoryImpl implements SignRepository { final long officeId = employeeDTO.officeId; final String officeName = employeeDTO.officeName; final String officeUrl= employeeDTO.officeImageUrl; - final String possition = employeeDTO.position; + final String position = employeeDTO.position; final String role = employeeDTO.role; final String profileImageUrl= employeeDTO.profileImageUrl; final boolean visitStatus= employeeDTO.visitStatus; final String startVisit= employeeDTO.startVisitDateTime; final List visitIdLast30Days = employeeDTO.visitsIdLast30Days; final long totalVisitTimeLast30Days = employeeDTO.totalTimeVisitsLast30Days; - final String curentOfficeName = employeeDTO.currentOfficeName; + final String currentOfficeName = employeeDTO.currentOfficeName; final String createdAt= employeeDTO.createAt; - if (name != null && surname != null && telephone != null && - email_ != null && officeName != null && officeUrl != null && - possition != null && role != null && startVisit != null && - visitIdLast30Days != null && curentOfficeName != null && - createdAt != null) { - - return new EmpolyeeEntity(id_, name, surname, patronymic, - telephone, email_, officeId, officeName, officeUrl, possition, role, profileImageUrl, - visitStatus, startVisit, visitIdLast30Days, totalVisitTimeLast30Days, curentOfficeName, createdAt); + if (name != null && surname != null && telephone != null && email_ != null && officeName != null && officeUrl != null && position != null && + role != null && startVisit != null && profileImageUrl != null && visitIdLast30Days != null && currentOfficeName != null && createdAt != null) { + return new EmployeeEntity(id_, name, surname, patronymic, telephone, email_, officeId, officeName, officeUrl, position, role, profileImageUrl, + visitStatus, startVisit, visitIdLast30Days, totalVisitTimeLast30Days, currentOfficeName, createdAt); } else return null; }) ); } @Override - public void login(@NonNull String email, @NonNull String password, @NonNull Consumer> callback) { + public void login(@NonNull String email, @NonNull String password, @NonNull Consumer> callback) { credentialsDataSource.updateLogin(email, password); signApi.login().enqueue(new CallToConsumer<>(callback, employeeDTO -> { if (employeeDTO == null) return null; @@ -81,25 +78,22 @@ public class SignRepositoryImpl implements SignRepository { final long officeId = employeeDTO.officeId; final String officeName = employeeDTO.officeName; final String officeUrl= employeeDTO.officeImageUrl; - final String possition = employeeDTO.position; + final String position = employeeDTO.position; final String role = employeeDTO.role; - final String profileImageUrl= employeeDTO.profileImageUrl; + final String profileImageUrl = employeeDTO.profileImageUrl; final boolean visitStatus= employeeDTO.visitStatus; - final String startVisit= employeeDTO.startVisitDateTime; + final String startVisit = employeeDTO.startVisitDateTime; final List visitIdLast30Days = employeeDTO.visitsIdLast30Days; final long totalVisitTimeLast30Days = employeeDTO.totalTimeVisitsLast30Days; - final String curentOfficeName = employeeDTO.currentOfficeName; - final String createdAt= employeeDTO.createAt; + final String currentOfficeName = employeeDTO.currentOfficeName; + final String createdAt = employeeDTO.createAt; - if (name != null && surname != null && telephone != null && - email_ != null && officeName != null && officeUrl != null && - possition != null && role != null && startVisit != null && - visitIdLast30Days != null && curentOfficeName != null && - createdAt != null) { + if (name != null && surname != null && telephone != null && email_ != null && officeName != null && officeUrl != null + && position != null && role != null && profileImageUrl != null && startVisit != null && visitIdLast30Days != null + && currentOfficeName != null && createdAt != null) { - return new EmpolyeeEntity(id_, name, surname, patronymic, - telephone, email_, officeId, officeName, officeUrl, possition, role, profileImageUrl, - visitStatus, startVisit, visitIdLast30Days, totalVisitTimeLast30Days, curentOfficeName, createdAt); + return new EmployeeEntity(id_, name, surname, patronymic, telephone, email_, officeId, officeName, officeUrl, position, role, profileImageUrl, + visitStatus, startVisit, visitIdLast30Days, totalVisitTimeLast30Days, currentOfficeName, createdAt); } else return null; })); } diff --git a/app/src/main/java/ru/myitschool/work/api/data/dto/employee/EmployeeDTO.java b/app/src/main/java/ru/myitschool/work/api/data/dto/employee/EmployeeDTO.java index da4da62..3ffaef7 100644 --- a/app/src/main/java/ru/myitschool/work/api/data/dto/employee/EmployeeDTO.java +++ b/app/src/main/java/ru/myitschool/work/api/data/dto/employee/EmployeeDTO.java @@ -36,7 +36,7 @@ public class EmployeeDTO { @SerializedName("officeImageUrl") public String officeImageUrl; @Nullable - @SerializedName("position") + @SerializedName("positionName") public String position; // Название должности @Nullable @SerializedName("role") diff --git a/app/src/main/java/ru/myitschool/work/api/data/network/RetrofitFactory.java b/app/src/main/java/ru/myitschool/work/api/data/network/RetrofitFactory.java index dc55b68..9b3194c 100644 --- a/app/src/main/java/ru/myitschool/work/api/data/network/RetrofitFactory.java +++ b/app/src/main/java/ru/myitschool/work/api/data/network/RetrofitFactory.java @@ -1,6 +1,6 @@ package ru.myitschool.work.api.data.network; -import com.example.myapplication.core.UrlConstants; +import ru.myitschool.work.core.UrlConstants; import okhttp3.OkHttpClient; import okhttp3.Request; diff --git a/app/src/main/java/ru/myitschool/work/api/data/source/SignApi.java b/app/src/main/java/ru/myitschool/work/api/data/source/SignApi.java index b0755a2..0e95206 100644 --- a/app/src/main/java/ru/myitschool/work/api/data/source/SignApi.java +++ b/app/src/main/java/ru/myitschool/work/api/data/source/SignApi.java @@ -9,10 +9,9 @@ import ru.myitschool.work.api.data.dto.employee.EmployeeCreateDTO; import ru.myitschool.work.api.data.dto.employee.EmployeeDTO; public interface SignApi { - @POST("api/v1/employees/authorization/register") + @POST("api/v1/authorization/register") Call register(@Body EmployeeCreateDTO employeeCreateDTO); - @GET("api/v1/employees/authorization//login") + @GET("api/v1/authorization/login") Call login(); - } diff --git a/app/src/main/java/ru/myitschool/work/api/domain/EmployeeRepository.java b/app/src/main/java/ru/myitschool/work/api/domain/EmployeeRepository.java index c0d3858..ca2f455 100644 --- a/app/src/main/java/ru/myitschool/work/api/domain/EmployeeRepository.java +++ b/app/src/main/java/ru/myitschool/work/api/domain/EmployeeRepository.java @@ -7,15 +7,15 @@ import java.util.function.Consumer; import ru.myitschool.work.api.data.dto.employee.EmployeeDTO; import ru.myitschool.work.api.domain.entity.Status; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; import ru.myitschool.work.api.domain.entity.employee.ItemEmployeeEntity; public interface EmployeeRepository { - void getAllEmployees(@NonNull Consumer>> callback); - ItemEmployeeEntity getEmployeeById(long id, @NonNull Consumer> callback); - void getEmployeeByEmail(@NonNull String email, @NonNull Consumer> callback); - void getEmployeeByTelephone(@NonNull String telephone, @NonNull Consumer> callback); + void getAllEmployees(@NonNull Consumer>> callback); + ItemEmployeeEntity getEmployeeById(long id, @NonNull Consumer> callback); + void getEmployeeByEmail(@NonNull String email, @NonNull Consumer> callback); + void getEmployeeByTelephone(@NonNull String telephone, @NonNull Consumer> callback); void updateEmployee(long id, @NonNull EmployeeDTO employeeDTO, @NonNull Consumer> callback);//переделай после dto - void deleteEmployee(long id, @NonNull Consumer> callback); + void deleteEmployee(long id, @NonNull Consumer> callback); void patchEmployeerOfficeId(long id, long officeId, @NonNull Consumer> callback); } diff --git a/app/src/main/java/ru/myitschool/work/api/domain/SignRepository.java b/app/src/main/java/ru/myitschool/work/api/domain/SignRepository.java index e87253b..d137fc6 100644 --- a/app/src/main/java/ru/myitschool/work/api/domain/SignRepository.java +++ b/app/src/main/java/ru/myitschool/work/api/domain/SignRepository.java @@ -6,10 +6,10 @@ import java.util.function.Consumer; import ru.myitschool.work.api.data.dto.employee.EmployeeCreateDTO; import ru.myitschool.work.api.domain.entity.Status; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; public interface SignRepository { - void createEmployee(@NonNull EmployeeCreateDTO employeeRegisterDTO, @NonNull Consumer> callback); - void login(@NonNull String email, @NonNull String password, @NonNull Consumer> callback); + void createEmployee(@NonNull EmployeeCreateDTO employeeRegisterDTO, @NonNull Consumer> callback); + void login(@NonNull String email, @NonNull String password, @NonNull Consumer> callback); void logout(); } diff --git a/app/src/main/java/ru/myitschool/work/api/domain/entity/Status.java b/app/src/main/java/ru/myitschool/work/api/domain/entity/Status.java index 4d4720b..172e5a5 100644 --- a/app/src/main/java/ru/myitschool/work/api/domain/entity/Status.java +++ b/app/src/main/java/ru/myitschool/work/api/domain/entity/Status.java @@ -1,21 +1,20 @@ package ru.myitschool.work.api.domain.entity; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; public class Status { - final int statusCod; + final int statusCode; @Nullable private final T value; @Nullable private final Throwable errors; - public Status(int statusCod, @Nullable T value, @Nullable Throwable errors) { - this.statusCod = statusCod; + public Status(int statusCode, @Nullable T value, @Nullable Throwable errors) { + this.statusCode = statusCode; this.value = value; this.errors = errors; } - public int getStatusCod() { - return statusCod; + public int getStatusCode() { + return statusCode; } @Nullable diff --git a/app/src/main/java/ru/myitschool/work/api/domain/entity/employee/EmpolyeeEntity.java b/app/src/main/java/ru/myitschool/work/api/domain/entity/employee/EmployeeEntity.java similarity index 83% rename from app/src/main/java/ru/myitschool/work/api/domain/entity/employee/EmpolyeeEntity.java rename to app/src/main/java/ru/myitschool/work/api/domain/entity/employee/EmployeeEntity.java index b0ab5b4..471b896 100644 --- a/app/src/main/java/ru/myitschool/work/api/domain/entity/employee/EmpolyeeEntity.java +++ b/app/src/main/java/ru/myitschool/work/api/domain/entity/employee/EmployeeEntity.java @@ -3,18 +3,17 @@ package ru.myitschool.work.api.domain.entity.employee; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import java.util.Date; import java.util.List; -public class EmpolyeeEntity { - @NonNull private final long id; +public class EmployeeEntity { + private final long id; @NonNull private final String name; @NonNull private final String surname; - @NonNull private final String patronymic; + @Nullable private final String patronymic; @NonNull private final String telephone; @NonNull private final String email; - @NonNull private final long officeId; + private final long officeId; @NonNull private final String officeName; @NonNull private final String officeImageUrl; @@ -24,7 +23,7 @@ public class EmpolyeeEntity { @NonNull private final String profileImageUrl; // Текущее состояние входа: false - visit (посещение) ещё не началось, true - visit идёт - @NonNull private final boolean visitStatus; + private final boolean visitStatus; // Если visitStatus true, то возвращает дату и время начала посещения в формате LocalDateTime.toString(), // превратить обратно можно с помощью LocalDateTime.parse(). @@ -33,7 +32,7 @@ public class EmpolyeeEntity { @NonNull private final List visitsIdLast30Days; // Список Id посещений за последние 30 дней. // Возвращает количество отработанных часов за последний месяц. - @NonNull private final long totalTimeVisitsLast30Days; + private final long totalTimeVisitsLast30Days; // (Возможно это стоит убрать) Название офиса, в котором сейчас находится работник. // Если visitStatus false, возвращает null. @@ -43,7 +42,7 @@ public class EmpolyeeEntity { // превратить обратно можно с помощью LocalDateTime.parse(). @NonNull private final String createAt; - public EmpolyeeEntity(long id, @NonNull String name, @NonNull String surname, @NonNull String patronymic, @NonNull String telephone, @NonNull String email, long officeId, @NonNull String officeName, @NonNull String officeImageUrl, @NonNull String position, @NonNull String role, @NonNull String profileImageUrl, boolean visitStatus, @NonNull String startVisitDateTime, @NonNull List visitsIdLast30Days, long totalTimeVisitsLast30Days, @NonNull String currentOfficeName, @NonNull String createAt) { + public EmployeeEntity(long id, @NonNull String name, @NonNull String surname, @Nullable String patronymic, @NonNull String telephone, @NonNull String email, long officeId, @NonNull String officeName, @NonNull String officeImageUrl, @NonNull String position, @NonNull String role, @NonNull String profileImageUrl, boolean visitStatus, @NonNull String startVisitDateTime, @NonNull List visitsIdLast30Days, long totalTimeVisitsLast30Days, @NonNull String currentOfficeName, @NonNull String createAt) { this.id = id; this.name = name; this.surname = surname; @@ -64,52 +63,37 @@ public class EmpolyeeEntity { this.createAt = createAt; } - public long getId() { - return id; + @NonNull + public String getCreateAt() { + return createAt; } @NonNull - public String getName() { - return name; + public String getCurrentOfficeName() { + return currentOfficeName; + } + + public long getTotalTimeVisitsLast30Days() { + return totalTimeVisitsLast30Days; } @NonNull - public String getSurname() { - return surname; + public List getVisitsIdLast30Days() { + return visitsIdLast30Days; } @NonNull - public String getPatronymic() { - return patronymic; + public String getStartVisitDateTime() { + return startVisitDateTime; + } + + public boolean isVisitStatus() { + return visitStatus; } @NonNull - public String getTelephone() { - return telephone; - } - - @NonNull - public String getEmail() { - return email; - } - - public long getOfficeId() { - return officeId; - } - - @NonNull - public String getOfficeName() { - return officeName; - } - - @NonNull - public String getOfficeImageUrl() { - return officeImageUrl; - } - - @NonNull - public String getPosition() { - return position; + public String getProfileImageUrl() { + return profileImageUrl; } @NonNull @@ -118,35 +102,50 @@ public class EmpolyeeEntity { } @NonNull - public String getProfileImageUrl() { - return profileImageUrl; - } - - public boolean isVisitStatus() { - return visitStatus; + public String getPosition() { + return position; } @NonNull - public String getStartVisitDateTime() { - return startVisitDateTime; + public String getOfficeImageUrl() { + return officeImageUrl; } @NonNull - public List getVisitsIdLast30Days() { - return visitsIdLast30Days; + public String getOfficeName() { + return officeName; } - public long getTotalTimeVisitsLast30Days() { - return totalTimeVisitsLast30Days; + public long getOfficeId() { + return officeId; } @NonNull - public String getCurrentOfficeName() { - return currentOfficeName; + public String getEmail() { + return email; } @NonNull - public String getCreateAt() { - return createAt; + public String getTelephone() { + return telephone; + } + + @Nullable + public String getPatronymic() { + return patronymic; + } + + @NonNull + public String getSurname() { + return surname; + } + + @NonNull + public String getName() { + return name; + } + + public long getId() { + return id; } } diff --git a/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/DeleteEmployeeUseCase.java b/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/DeleteEmployeeUseCase.java index 0476b04..37d76c0 100644 --- a/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/DeleteEmployeeUseCase.java +++ b/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/DeleteEmployeeUseCase.java @@ -6,7 +6,7 @@ import java.util.function.Consumer; import ru.myitschool.work.api.domain.EmployeeRepository; import ru.myitschool.work.api.domain.entity.Status; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; public class DeleteEmployeeUseCase { private final EmployeeRepository employeeRepository; @@ -16,7 +16,7 @@ public class DeleteEmployeeUseCase { } - public void execute(long id, @NonNull Consumer> callback) { + public void execute(long id, @NonNull Consumer> callback) { employeeRepository.deleteEmployee(id,callback); } } diff --git a/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetAllEmployees.java b/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetAllEmployees.java index f7e76f5..cf727a0 100644 --- a/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetAllEmployees.java +++ b/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetAllEmployees.java @@ -7,7 +7,7 @@ import java.util.function.Consumer; import ru.myitschool.work.api.domain.EmployeeRepository; import ru.myitschool.work.api.domain.entity.Status; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; public class GetAllEmployees { private final EmployeeRepository employeeRepository; @@ -16,7 +16,7 @@ public class GetAllEmployees { this.employeeRepository = employeeRepository; } - public void execute(@NonNull Consumer>> callback) { + public void execute(@NonNull Consumer>> callback) { employeeRepository.getAllEmployees(callback); } } diff --git a/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetEmloyeeByIdUseCase.java b/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetEmloyeeByIdUseCase.java index 80bcc4e..c93a8cf 100644 --- a/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetEmloyeeByIdUseCase.java +++ b/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetEmloyeeByIdUseCase.java @@ -8,7 +8,7 @@ import java.util.function.Consumer; import ru.myitschool.work.api.domain.EmployeeRepository; import ru.myitschool.work.api.domain.entity.Status; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; public class GetEmloyeeByIdUseCase { private final EmployeeRepository employeeRepository; @@ -17,7 +17,7 @@ public class GetEmloyeeByIdUseCase { this.employeeRepository = employeeRepository; } - public void execute(long id, @NonNull Consumer> callback) { + public void execute(long id, @NonNull Consumer> callback) { employeeRepository.getEmployeeById(id, callback); } } diff --git a/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetEmployeeByEmailUseCase.java b/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetEmployeeByEmailUseCase.java index f7c2a88..ef667e4 100644 --- a/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetEmployeeByEmailUseCase.java +++ b/app/src/main/java/ru/myitschool/work/api/domain/useCases/employee/GetEmployeeByEmailUseCase.java @@ -6,7 +6,7 @@ import java.util.function.Consumer; import ru.myitschool.work.api.domain.EmployeeRepository; import ru.myitschool.work.api.domain.entity.Status; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; public class GetEmployeeByEmailUseCase { private final ru.myitschool.work.api.domain.EmployeeRepository employeeRepository; @@ -15,6 +15,6 @@ public class GetEmployeeByEmailUseCase { this.employeeRepository = employeeRepository; } - public void execute(@NonNull String email, @NonNull Consumer> callback) { + public void execute(@NonNull String email, @NonNull Consumer> callback) { employeeRepository.getEmployeeByEmail(email, callback); }} diff --git a/app/src/main/java/ru/myitschool/work/api/domain/useCases/sign/CreateEmployeeUseCase.java b/app/src/main/java/ru/myitschool/work/api/domain/useCases/sign/CreateEmployeeUseCase.java index 65eabd3..22b3812 100644 --- a/app/src/main/java/ru/myitschool/work/api/domain/useCases/sign/CreateEmployeeUseCase.java +++ b/app/src/main/java/ru/myitschool/work/api/domain/useCases/sign/CreateEmployeeUseCase.java @@ -7,7 +7,7 @@ import java.util.function.Consumer; import ru.myitschool.work.api.data.dto.employee.EmployeeCreateDTO; import ru.myitschool.work.api.domain.SignRepository; import ru.myitschool.work.api.domain.entity.Status; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; public class CreateEmployeeUseCase { private final SignRepository signRepository; @@ -16,7 +16,7 @@ public class CreateEmployeeUseCase { this.signRepository = signRepository; } - public void execute(@NonNull EmployeeCreateDTO employeeRegisterDTO, Consumer> callback) { + public void execute(@NonNull EmployeeCreateDTO employeeRegisterDTO, Consumer> callback) { signRepository.createEmployee(employeeRegisterDTO, callback); } } diff --git a/app/src/main/java/ru/myitschool/work/api/domain/useCases/sign/LoginEmployeeUseCase.java b/app/src/main/java/ru/myitschool/work/api/domain/useCases/sign/LoginEmployeeUseCase.java index 7844eee..2be29c9 100644 --- a/app/src/main/java/ru/myitschool/work/api/domain/useCases/sign/LoginEmployeeUseCase.java +++ b/app/src/main/java/ru/myitschool/work/api/domain/useCases/sign/LoginEmployeeUseCase.java @@ -6,7 +6,7 @@ import java.util.function.Consumer; import ru.myitschool.work.api.domain.SignRepository; import ru.myitschool.work.api.domain.entity.Status; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; public class LoginEmployeeUseCase { private final SignRepository signRepository; @@ -15,9 +15,9 @@ public class LoginEmployeeUseCase { this.signRepository = signRepository; } - public void execute(@NonNull String email, @NonNull String password, Consumer> callback) { + public void execute(@NonNull String email, @NonNull String password, Consumer> callback) { signRepository.login(email, password, employeeEntityStatus -> { - //if (employeeEntityStatus.getStatusCode() != 200) signRepository.logout(); + if (employeeEntityStatus.getStatusCode() != 200) signRepository.logout(); callback.accept(employeeEntityStatus); }); } diff --git a/app/src/main/java/ru/myitschool/work/core/UrlConstants.kt b/app/src/main/java/ru/myitschool/work/core/UrlConstants.kt index ec03aab..c1e47ad 100644 --- a/app/src/main/java/ru/myitschool/work/core/UrlConstants.kt +++ b/app/src/main/java/ru/myitschool/work/core/UrlConstants.kt @@ -1,7 +1,6 @@ -package com.example.myapplication.core +package ru.myitschool.work.core object UrlConstants { // url для эмулятора http://10.0.2.2:8080/ - const val BASE_URL: String = "http://192.168.0.105:8080" - const val DOWNLOAD_URL: String = "$BASE_URL/api/v1/images/" + const val BASE_URL: String = "http://10.6.66.151:8080" } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/login/LoginActivity.java b/app/src/main/java/ru/myitschool/work/ui/login/LoginActivity.java deleted file mode 100644 index a2ef4b8..0000000 --- a/app/src/main/java/ru/myitschool/work/ui/login/LoginActivity.java +++ /dev/null @@ -1,115 +0,0 @@ -package ru.myitschool.work.ui.login; - -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.text.Editable; -import android.view.View; - -import androidx.activity.EdgeToEdge; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.graphics.Insets; -import androidx.core.view.ViewCompat; -import androidx.core.view.WindowInsetsCompat; -import androidx.lifecycle.ViewModelProvider; - -import com.example.myapplication.core.SettingConstants; -import com.google.android.material.snackbar.Snackbar; -import com.google.android.material.textfield.TextInputEditText; - -import ru.myitschool.work.R; -import ru.myitschool.work.databinding.ActivityLoginBinding; -import ru.myitschool.work.ui.main.MainActivity; - -public class LoginActivity extends AppCompatActivity { - - private ActivityLoginBinding binding; - private LoginViewModel viewModel; - - - public LoginActivity() { - super(R.layout.activity_login); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - EdgeToEdge.enable(this); - setContentView(R.layout.activity_login); - ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { - Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); - v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); - return insets; - - binding = ActivityLoginBinding.bind(v); - viewModel = new ViewModelProvider(this).get(ActivityLoginBinding.class); - - binding.email.addTextChangedListener(new TextChangedListener<>(binding.email) { - @Override - public void onTextChanged(TextInputEditText target, Editable s) { - listenerEmailEditText(s); - } - }); - - binding.password.addTextChangedListener(new TextChangedListener<>(binding.password) { - @Override - public void onTextChanged(TextInputEditText target, Editable s) { - listenerPasswordEditText(s); - } - }); - - binding.btEnter.setOnClickListener(this.onClickListenerLoginButton); - - subscribe(); - }); - } - - private void subscribe() { - viewModel.errorLiveData.observe(getViewLifecycleOwner(), error -> { - binding.btEnter.setEnabled(true); - Snackbar.make(requireView(), error, Snackbar.LENGTH_LONG).show(); - }); - viewModel.openLiveData.observe(getViewLifecycleOwner(), employee -> { - binding.btEnter.setEnabled(true); - - SharedPreferences settings = requireView().getContext().getSharedPreferences( - SettingConstants.PREFS_FILE, Context.MODE_PRIVATE - ); - settings.edit().putLong(SettingConstants.PREF_ID, employee.getId()).apply(); - settings.edit().putString(SettingConstants.PREF_ROLE, employee.getRole()).apply(); - - startActivity(new Intent(getApplicationContext(), MainActivity.class)); - }); - } - - private void listenerEmailEditText(Editable s) { - if (s.toString().isEmpty()) { - binding.email.setError("Обязательное поле"); - } else if (!isEmailValid(s.toString())) { - binding.emailLay.setError("Неверный формат"); - } else { - binding.emailLay.setErrorEnabled(false); - } - } - - private void listenerPasswordEditText(Editable s) { - if (s.toString().isEmpty()) { - binding.passwordLay.setError("Обязательное поле"); - } else { - binding.passwordLay.setErrorEnabled(false); - } - } - - private void onClickListenerLoginButton(View view) { - binding.btEnter.setEnabled(false); - - viewModel.changeEmail(String.valueOf(binding.email.getText())); - viewModel.changePassword(String.valueOf(binding.password.getText())); - viewModel.confirm(); - } - - private boolean isEmailValid(String email) { - return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches(); - } -} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.java b/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.java deleted file mode 100644 index 7355bf6..0000000 --- a/app/src/main/java/ru/myitschool/work/ui/profile/ProfileFragment.java +++ /dev/null @@ -1,35 +0,0 @@ -package ru.myitschool.work.ui.profile; - -import android.os.Bundle; - -import androidx.fragment.app.Fragment; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import ru.myitschool.work.R; - -/** - * A simple {@link Fragment} subclass. - * Use the {@link ProfileFragment#newInstance} factory method to - * create an instance of this fragment. - */ -public class ProfileFragment extends Fragment { - - - - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_profile, container, false); - } -} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/RedactProfileFragment.java b/app/src/main/java/ru/myitschool/work/ui/profile/RedactProfileFragment.java deleted file mode 100644 index d191f01..0000000 --- a/app/src/main/java/ru/myitschool/work/ui/profile/RedactProfileFragment.java +++ /dev/null @@ -1,38 +0,0 @@ -package ru.myitschool.work.ui.profile; - -import androidx.lifecycle.ViewModelProvider; - -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import ru.myitschool.work.R; - -public class RedactProfileFragment extends Fragment { - - private RedactProfileViewModel mViewModel; - - public static RedactProfileFragment newInstance() { - return new RedactProfileFragment(); - } - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_redact_profile, container, false); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - mViewModel = new ViewModelProvider(this).get(RedactProfileViewModel.class); - // TODO: Use the ViewModel - } - -} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/RedactProfileViewModel.java b/app/src/main/java/ru/myitschool/work/ui/profile/RedactProfileViewModel.java deleted file mode 100644 index b06e10e..0000000 --- a/app/src/main/java/ru/myitschool/work/ui/profile/RedactProfileViewModel.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.myitschool.work.ui.profile; - -import androidx.lifecycle.ViewModel; - -public class RedactProfileViewModel extends ViewModel { - // TODO: Implement the ViewModel -} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/screens/LoginActivity.java b/app/src/main/java/ru/myitschool/work/ui/screens/LoginActivity.java new file mode 100644 index 0000000..4c3bf7c --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/ui/screens/LoginActivity.java @@ -0,0 +1,120 @@ +package ru.myitschool.work.ui.screens; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.text.Editable; +import android.view.View; +import android.widget.Button; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.lifecycle.ViewModelProvider; + +import com.example.myapplication.core.SettingConstants; +import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; + +import ru.myitschool.work.R; +import ru.myitschool.work.ui.viewModel.LoginViewModel; +import ru.myitschool.work.utils.TextChangedListener; + +public class LoginActivity extends AppCompatActivity { + private Button loginButton; + private TextInputEditText email; + private TextInputLayout emailLayout; + private TextInputEditText password; + private TextInputLayout passwordLayout; + private LoginViewModel viewModel; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + setContentView(R.layout.activity_login); + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + + loginButton = findViewById(R.id.loginButton); + email = findViewById(R.id.email); + emailLayout = findViewById(R.id.email_layout); + password = findViewById(R.id.password); + passwordLayout = findViewById(R.id.password_layout); + + viewModel = new ViewModelProvider(this).get(LoginViewModel.class); + + email.addTextChangedListener(new TextChangedListener<>(email) { + @Override + public void onTextChanged(TextInputEditText target, Editable s) { + listenerEmailEditText(s); + } + }); + password.addTextChangedListener(new TextChangedListener<>(password) { + @Override + public void onTextChanged(TextInputEditText target, Editable s) { + listenerPasswordEditText(s); + } + }); + + loginButton.setOnClickListener(this::onClickListenerLoginButton); + subscribe(); + } + + private void subscribe() { + viewModel.errorLiveData.observe(this, error -> { + loginButton.setEnabled(true); + Snackbar.make(findViewById(android.R.id.content), error, Snackbar.LENGTH_LONG).show(); + }); + viewModel.openLiveData.observe(this, employee -> { + loginButton.setEnabled(true); + + SharedPreferences settings = getSharedPreferences( + SettingConstants.PREFS_FILE, Context.MODE_PRIVATE + ); + settings.edit().putLong(SettingConstants.PREF_ID, employee.getId()).apply(); + settings.edit().putString(SettingConstants.PREF_ROLE, employee.getRole()).apply(); + + startActivity(new Intent(this, MainActivity.class)); + finish(); + }); + } + + private void listenerEmailEditText(Editable s) { + if (s.toString().isEmpty()) { + emailLayout.setError("Обязательное поле"); + } else if (!isEmailValid(s.toString())) { + emailLayout.setError("Неверный формат"); + } else { + emailLayout.setErrorEnabled(false); + } + } + + private void listenerPasswordEditText(Editable s) { + if (s.toString().isEmpty()) { + passwordLayout.setError("Обязательное поле"); + } else { + passwordLayout.setErrorEnabled(false); + } + } + + private void onClickListenerLoginButton(View view) { + loginButton.setEnabled(false); + + viewModel.changeEmail(String.valueOf(email.getText())); + viewModel.changePassword(String.valueOf(password.getText())); + viewModel.confirm(); + } + + private boolean isEmailValid(String email) { + return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches(); + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/main/MainActivity.java b/app/src/main/java/ru/myitschool/work/ui/screens/MainActivity.java similarity index 57% rename from app/src/main/java/ru/myitschool/work/ui/main/MainActivity.java rename to app/src/main/java/ru/myitschool/work/ui/screens/MainActivity.java index 339e6a7..d89691b 100644 --- a/app/src/main/java/ru/myitschool/work/ui/main/MainActivity.java +++ b/app/src/main/java/ru/myitschool/work/ui/screens/MainActivity.java @@ -1,6 +1,9 @@ -package ru.myitschool.work.ui.main; +package ru.myitschool.work.ui.screens; +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; @@ -8,9 +11,12 @@ import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import com.example.myapplication.core.SettingConstants; + import ru.myitschool.work.R; public class MainActivity extends AppCompatActivity { + private SharedPreferences settings; @Override protected void onCreate(Bundle savedInstanceState) { @@ -22,5 +28,13 @@ public class MainActivity extends AppCompatActivity { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); + + settings = getSharedPreferences(SettingConstants.PREFS_FILE, MODE_PRIVATE); + + if (settings.getLong(SettingConstants.PREF_ID, SettingConstants.ERROR_ID) == SettingConstants.ERROR_ID) { + Log.d("Test", "(MainActivity) Пользователь не авторизован!"); + startActivity(new Intent(this, LoginActivity.class)); + finish(); + } } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/userlist/CompanyInfoFragment.java b/app/src/main/java/ru/myitschool/work/ui/userlist/CompanyInfoFragment.java deleted file mode 100644 index 8c78ba5..0000000 --- a/app/src/main/java/ru/myitschool/work/ui/userlist/CompanyInfoFragment.java +++ /dev/null @@ -1,38 +0,0 @@ -package ru.myitschool.work.ui.userlist; - -import androidx.lifecycle.ViewModelProvider; - -import android.os.Bundle; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import ru.myitschool.work.R; - -public class CompanyInfoFragment extends Fragment { - - private CompanyInfoViewModel mViewModel; - - public static CompanyInfoFragment newInstance() { - return new CompanyInfoFragment(); - } - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.company_info_fragment, container, false); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - mViewModel = new ViewModelProvider(this).get(CompanyInfoViewModel.class); - // TODO: Use the ViewModel - } - -} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/userlist/CompanyInfoViewModel.java b/app/src/main/java/ru/myitschool/work/ui/userlist/CompanyInfoViewModel.java deleted file mode 100644 index 708da7d..0000000 --- a/app/src/main/java/ru/myitschool/work/ui/userlist/CompanyInfoViewModel.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.myitschool.work.ui.userlist; - -import androidx.lifecycle.ViewModel; - -public class CompanyInfoViewModel extends ViewModel { - // TODO: Implement the ViewModel -} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.java b/app/src/main/java/ru/myitschool/work/ui/viewModel/LoginViewModel.java similarity index 66% rename from app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.java rename to app/src/main/java/ru/myitschool/work/ui/viewModel/LoginViewModel.java index 2b7a25d..237a10e 100644 --- a/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.java +++ b/app/src/main/java/ru/myitschool/work/ui/viewModel/LoginViewModel.java @@ -1,4 +1,6 @@ -package ru.myitschool.work.ui.login; +package ru.myitschool.work.ui.viewModel; + +import androidx.lifecycle.ViewModel; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -6,17 +8,17 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import ru.myitschool.work.api.data.SignRepositoryImpl; -import ru.myitschool.work.api.domain.entity.employee.EmpolyeeEntity; +import ru.myitschool.work.api.domain.entity.employee.EmployeeEntity; import ru.myitschool.work.api.domain.useCases.sign.LoginEmployeeUseCase; -public class LoginViewModel { +public class LoginViewModel extends ViewModel { private final MutableLiveData mutableErrorLiveData = new MutableLiveData<>(); public final LiveData errorLiveData = mutableErrorLiveData; - private final MutableLiveData mutableOpenLiveData = new MutableLiveData<>(); - public final LiveData openLiveData = mutableOpenLiveData; + private final MutableLiveData mutableOpenLiveData = new MutableLiveData<>(); + public final LiveData openLiveData = mutableOpenLiveData; - private final LoginEmployeeUseCase loginEmployeeUseCase = new LoginEmployeeUseCase( + private final LoginEmployeeUseCase loginVolunteerUseCase = new LoginEmployeeUseCase( SignRepositoryImpl.getInstance() ); @@ -38,19 +40,19 @@ public class LoginViewModel { final String currentPassword = password; if (currentEmail == null || currentEmail.isEmpty()) { - mutableErrorLiveData.postValue("Пароль пустой!"); - return; - } - if (currentPassword == null || currentPassword.isEmpty()) { mutableErrorLiveData.postValue("email пустой!"); return; } - loginEmployeeUseCase.execute(currentEmail, currentPassword, status -> { + if (currentPassword == null || currentPassword.isEmpty()) { + mutableErrorLiveData.postValue("Пароль пустой!"); + return; + } + loginVolunteerUseCase.execute("example1@gmail.com", "password", status -> { if (status.getStatusCode() == 200 && status.getErrors() == null && status.getValue() != null) { mutableOpenLiveData.postValue(status.getValue()); - } else if (status.getStatusCode() == 401) mutableErrorLiveData.postValue("Данные не верны. Попробуйте ещё разок :("); - else mutableErrorLiveData.postValue("Вы не подключены к интернету :("); + } else if (status.getStatusCode() == 401) + mutableErrorLiveData.postValue("Данные не верны. Попробуйте ещё разок :("); + else mutableErrorLiveData.postValue("Вы не подключены к интернету :( " + status.getStatusCode() + " " + status.getValue()); }); } - } diff --git a/app/src/main/res/drawable/activity_main.xml b/app/src/main/res/drawable/activity_main.xml new file mode 100644 index 0000000..c025673 --- /dev/null +++ b/app/src/main/res/drawable/activity_main.xml @@ -0,0 +1,36 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/application_icon.png b/app/src/main/res/drawable/application_icon.png new file mode 100644 index 0000000..da9cb60 Binary files /dev/null and b/app/src/main/res/drawable/application_icon.png differ diff --git a/app/src/main/res/drawable/background.png b/app/src/main/res/drawable/background_login.png similarity index 100% rename from app/src/main/res/drawable/background.png rename to app/src/main/res/drawable/background_login.png diff --git a/app/src/main/res/drawable/small_application_icon.png b/app/src/main/res/drawable/small_application_icon.png new file mode 100644 index 0000000..d603dd7 Binary files /dev/null and b/app/src/main/res/drawable/small_application_icon.png differ diff --git a/app/src/main/res/drawable/splash_screen.xml b/app/src/main/res/drawable/splash_screen.xml new file mode 100644 index 0000000..19a0a21 --- /dev/null +++ b/app/src/main/res/drawable/splash_screen.xml @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-w936dp/fragment_main.xml b/app/src/main/res/layout-w936dp/fragment_main.xml deleted file mode 100644 index 7b5668a..0000000 --- a/app/src/main/res/layout-w936dp/fragment_main.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - -