diff --git a/app/src/main/java/ru/myitschool/work/core/Constants.kt b/app/src/main/java/ru/myitschool/work/core/Constants.kt index 971f65a..18f9dd5 100644 --- a/app/src/main/java/ru/myitschool/work/core/Constants.kt +++ b/app/src/main/java/ru/myitschool/work/core/Constants.kt @@ -1,5 +1,5 @@ package ru.myitschool.work.core // БЕРИТЕ И ИЗМЕНЯЙТЕ ХОСТ ТОЛЬКО ЗДЕСЬ И НЕ БЕРИТЕ ИЗ ДРУГИХ МЕСТ. ФАЙЛ ПЕРЕМЕЩАТЬ НЕЛЬЗЯ object Constants { - const val SERVER_ADDRESS = "http://localhost:8090" + const val SERVER_ADDRESS = "http://192.168.1.2:8080" } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/data/source/UserApi.java b/app/src/main/java/ru/myitschool/work/data/source/UserApi.java index 7d74f2b..38d1a29 100644 --- a/app/src/main/java/ru/myitschool/work/data/source/UserApi.java +++ b/app/src/main/java/ru/myitschool/work/data/source/UserApi.java @@ -13,7 +13,7 @@ public interface UserApi { @GET("api/{login}/info") Call getByLogin(@Path("login") String login); @GET("api/{login}/auth") - Call isExist(@Path("username") String login); + Call isExist(@Path("login") String login); @PATCH("api/{login}/open/") Call openDoor(@Path("login") String login, @Body QrDto qrDto); } diff --git a/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.java b/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.java index 5b2f1a1..d1fb5f8 100644 --- a/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.java +++ b/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.text.Editable; +import android.util.Log; import android.view.View; import android.widget.Toast; @@ -69,7 +70,7 @@ public class LoginFragment extends Fragment { } if (getView() == null) return; - + Log.d("process", "navigated"); Navigation.findNavController(getView()).navigate( R.id.action_loginFragment_to_userFragment); }); diff --git a/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.java b/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.java index 420ab5a..8b18faf 100644 --- a/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.java +++ b/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.java @@ -1,6 +1,6 @@ package ru.myitschool.work.ui.login; -import android.content.SharedPreferences; +import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -52,11 +52,12 @@ public class LoginViewModel extends ViewModel { } isUserExistUseCase.execute(currentLogin, status -> { if (status.getValue() == null || status.getErrors() != null) { + Log.e("errors", status.getErrors().getLocalizedMessage()); mutableErrorLiveData.postValue("Something went wrong. Try again later"); return; } if (status.getStatusCode() == 401) { - mutableErrorLiveData.postValue("Логина не существует или неверный"); + mutableErrorLiveData.postValue("There is no such login or incorrect"); } if (status.getStatusCode() == 200) { mutableOpenProfileLiveData.postValue(null); diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/UserFragment.java b/app/src/main/java/ru/myitschool/work/ui/profile/UserFragment.java index 3e99319..970eb1b 100644 --- a/app/src/main/java/ru/myitschool/work/ui/profile/UserFragment.java +++ b/app/src/main/java/ru/myitschool/work/ui/profile/UserFragment.java @@ -8,7 +8,6 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentResultListener; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; @@ -17,7 +16,6 @@ import com.squareup.picasso.Picasso; import ru.myitschool.work.R; import ru.myitschool.work.databinding.FragmentUserBinding; import ru.myitschool.work.domain.entities.UserEntity; -import ru.myitschool.work.ui.qr.scan.QrScanDestination; import ru.myitschool.work.utils.Utils; public class UserFragment extends Fragment { @@ -34,37 +32,6 @@ public class UserFragment extends Fragment { super.onViewCreated(view, savedInstanceState); binding = FragmentUserBinding.bind(view); - binding.scan.setOnClickListener(v -> { - if (getView() != null) { - Navigation.findNavController(getView()).navigate( - R.id.action_userFragment_to_qrScanFragment); - } - }); - - getParentFragmentManager().setFragmentResultListener(QrScanDestination.REQUEST_KEY, this, new FragmentResultListener() { - @Override - public void onFragmentResult(@NonNull String key, @NonNull Bundle bundle) { - - if (getView() != null) { - Navigation.findNavController(getView()).navigate( - R.id.action_userFragment_to_qrResultFragment); - } - } - }); - - binding.logout.setOnClickListener(v -> { - if (getContext() != null) { - SharedPreferences sharedPreferences = getContext().getSharedPreferences("login", Context.MODE_PRIVATE); - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putString("login", null); - editor.commit(); - } - if (getView() != null) { - Navigation.findNavController(getView()).navigate( - R.id.action_userFragment_to_loginFragment); - } - }); - viewModel = new ViewModelProvider(this).get(UserViewModel.class); viewModel.stateLiveData.observe(getViewLifecycleOwner(), state -> { UserEntity entity = state.getItem(); @@ -86,13 +53,31 @@ public class UserFragment extends Fragment { }); if (getContext() != null) { - SharedPreferences sharedPreferences = getContext().getSharedPreferences("login", Context.MODE_PRIVATE); - String login = sharedPreferences.getString("login", null); - if (login != null && getView() != null) { - viewModel.update(login); - } + SharedPreferences preferences = getContext().getSharedPreferences( + "login", Context.MODE_PRIVATE); + viewModel.update(preferences.getString("login", "")); } + binding.scan.setOnClickListener(v -> { + if (getView() != null) { + Navigation.findNavController(getView()).navigate( + R.id.action_userFragment_to_qrResultFragment); + } + }); + + binding.logout.setOnClickListener(v -> { + if (getContext() != null) { + SharedPreferences sharedPreferences = getContext().getSharedPreferences("login", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sharedPreferences.edit(); + editor.putString("login", null); + editor.commit(); + } + if (getView() != null) { + Navigation.findNavController(getView()).navigate( + R.id.action_userFragment_to_loginFragment); + } + }); + } diff --git a/app/src/main/java/ru/myitschool/work/ui/profile/UserViewModel.java b/app/src/main/java/ru/myitschool/work/ui/profile/UserViewModel.java index a988427..b9a1b27 100644 --- a/app/src/main/java/ru/myitschool/work/ui/profile/UserViewModel.java +++ b/app/src/main/java/ru/myitschool/work/ui/profile/UserViewModel.java @@ -1,5 +1,7 @@ package ru.myitschool.work.ui.profile; +import android.util.Log; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; @@ -13,34 +15,24 @@ import ru.myitschool.work.domain.user.GetUserByLoginUseCase; public class UserViewModel extends ViewModel { - private final MutableLiveData mutableStateLiveData = new MutableLiveData(); + private final MutableLiveData mutableStateLiveData = new MutableLiveData<>(); public final LiveData stateLiveData = mutableStateLiveData; public final GetUserByLoginUseCase getUserByLoginUseCase = new GetUserByLoginUseCase( UserRepositoryImplementation.getInstance() ); - - - public UserViewModel(String login) { - update(login); - } - public void update(@NonNull String login) { mutableStateLiveData.setValue(new State(null, null, true)); getUserByLoginUseCase.execute(login, status -> { - mutableStateLiveData.postValue(fromStatus(status)); + mutableStateLiveData.postValue(new State( + status.getErrors() != null ? status.getErrors().getLocalizedMessage() : null, + status.getValue(), + false + )); }); } - private State fromStatus(Status status) { - return new State( - status.getErrors() != null ? status.getErrors().getLocalizedMessage(): null, - status.getValue(), - false - ); - } - public class State { @Nullable private final String errorMessage; diff --git a/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResultFragment.java b/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResultFragment.java index e868ed9..e7a05e4 100644 --- a/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResultFragment.java +++ b/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResultFragment.java @@ -3,6 +3,7 @@ package ru.myitschool.work.ui.qr.result; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; +import android.util.Log; import android.view.View; import android.widget.Toast; @@ -20,7 +21,7 @@ import ru.myitschool.work.ui.qr.scan.QrScanDestination; public class QrResultFragment extends Fragment { private FragmentQrResultBinding binding; - private String resultQr; + private Bundle resultQr; private QrResultViewModel viewModel; public QrResultFragment() { @@ -28,31 +29,40 @@ public class QrResultFragment extends Fragment { } @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - binding = FragmentQrResultBinding.bind(view); - - binding.close.setOnClickListener(v -> { - if (getView() != null) { - Navigation.findNavController(getView()).navigate( - R.id.action_qrResultFragment_to_userFragment); - } - }); + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); getParentFragmentManager().setFragmentResultListener(QrScanDestination.REQUEST_KEY, this, new FragmentResultListener() { @Override - public void onFragmentResult(@NonNull String key, @NonNull Bundle bundle) { - resultQr = bundle.getString(QrScanDestination.REQUEST_KEY); + public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) { + resultQr = result; } }); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + Log.d("status", String.valueOf(resultQr != null)); + + if (getView() != null && resultQr == null) { + Navigation.findNavController(getView()).navigate(R.id.action_qrResultFragment_to_qrScanFragment); + return; + } + + binding = FragmentQrResultBinding.bind(view); viewModel = new ViewModelProvider(this).get(QrResultViewModel.class); viewModel.stateLiveData.observe(getViewLifecycleOwner(), state -> { if (state.getErrorMessage() == null && state.isOpened()) { binding.result.setText(R.string.door_opened); - } else { + } else if (state.getErrorMessage() != null) { binding.result.setText(R.string.error); Toast.makeText(getContext(), state.getErrorMessage(), Toast.LENGTH_SHORT).show(); + } else { + binding.result.setText(R.string.error); + Toast.makeText(getContext(), "error", Toast.LENGTH_SHORT).show(); } }); @@ -60,9 +70,16 @@ public class QrResultFragment extends Fragment { SharedPreferences sharedPreferences = getContext().getSharedPreferences("login", Context.MODE_PRIVATE); String login = sharedPreferences.getString("login", null); if (login != null && getView() != null) { - viewModel.update(login, resultQr); + viewModel.update(login, "12314543654745676"); } } + + binding.close.setOnClickListener(v -> { + if (getView() != null) { + Navigation.findNavController(getView()).navigate( + R.id.action_qrResultFragment_to_userFragment); + } + }); } @Override diff --git a/app/src/main/java/ru/myitschool/work/ui/qr/scan/QrScanDestination.kt b/app/src/main/java/ru/myitschool/work/ui/qr/scan/QrScanDestination.kt index 7e34b28..44ba99b 100644 --- a/app/src/main/java/ru/myitschool/work/ui/qr/scan/QrScanDestination.kt +++ b/app/src/main/java/ru/myitschool/work/ui/qr/scan/QrScanDestination.kt @@ -20,6 +20,7 @@ data object QrScanDestination { } else { null } + } internal fun packToBundle(data: String): Bundle { diff --git a/app/src/main/java/ru/myitschool/work/ui/qr/scan/QrScanFragment.kt b/app/src/main/java/ru/myitschool/work/ui/qr/scan/QrScanFragment.kt index a9ddaab..49a4bc7 100644 --- a/app/src/main/java/ru/myitschool/work/ui/qr/scan/QrScanFragment.kt +++ b/app/src/main/java/ru/myitschool/work/ui/qr/scan/QrScanFragment.kt @@ -1,6 +1,7 @@ package ru.myitschool.work.ui.qr.scan import android.os.Bundle +import android.util.Log import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.camera.core.ImageAnalysis @@ -65,6 +66,7 @@ class QrScanFragment : Fragment(R.layout.fragment_qr_scan) { goBack() } is QrScanViewModel.Action.CloseWithResult -> { + Log.d("result", action.result) sendResult(QrScanDestination.packToBundle(action.result)) goBack() } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 5784ad6..aae9be6 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -8,9 +8,6 @@ android:id="@+id/userFragment" android:name="ru.myitschool.work.ui.profile.UserFragment" android:label="UserFragment" > - @@ -23,8 +20,8 @@ android:name="ru.myitschool.work.ui.qr.scan.QrScanFragment" android:label="QrScanFragment" > + android:id="@+id/action_qrScanFragment_to_qrResultFragment" + app:destination="@id/qrResultFragment" /> + \ No newline at end of file