diff --git a/app/src/main/java/ru/myitschool/work/ui/RootActivity.kt b/app/src/main/java/ru/myitschool/work/ui/RootActivity.kt index cfe1f86..8ebe7af 100644 --- a/app/src/main/java/ru/myitschool/work/ui/RootActivity.kt +++ b/app/src/main/java/ru/myitschool/work/ui/RootActivity.kt @@ -21,36 +21,6 @@ class RootActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_root) - val navHostFragment = supportFragmentManager - .findFragmentById(R.id.nav_host_fragment) as NavHostFragment? - if (navHostFragment != null) { - val navController = navHostFragment.navController - navController.graph = navController.createGraph( - startDestination = LoginDestination - ) { - fragment() - fragment() - } - } - - onBackPressedDispatcher.addCallback( - this, - object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { - onSupportNavigateUp() - } - } - ) - } - - override fun onSupportNavigateUp(): Boolean { - val navController = findNavController(R.id.nav_host_fragment) - val popBackResult = if (navController.previousBackStackEntry != null) { - navController.popBackStack() - } else { - false - } - return popBackResult || super.onSupportNavigateUp() } } \ No newline at end of file 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 04da319..c33ff85 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 @@ -1,8 +1,71 @@ package ru.myitschool.work.ui.profile; +import android.os.Bundle; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.lifecycle.ViewModelProvider; + +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.utils.Utils; public class UserFragment extends Fragment { + private static final String KEY_ID = "id"; + private FragmentUserBinding binding; + private UserViewModel viewModel; + + public UserFragment() { + super(R.layout.fragment_user); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + binding = FragmentUserBinding.bind(view); + + viewModel = new ViewModelProvider(this).get(UserViewModel.class); + viewModel.stateLiveData.observe(getViewLifecycleOwner(), state -> { + UserEntity entity = state.getItem(); + if (entity == null) { + return; + } else { + binding.photo.setVisibility(Utils.visibleOrGone(entity.getPhoto() != null)); + binding.position.setVisibility(Utils.visibleOrGone(entity.getPosition() != null)); + binding.lastEntry.setVisibility(Utils.visibleOrGone(entity.getLast_visit() != null)); + + binding.fullname.setText(entity.getName()); + binding.position.setText(entity.getPosition()); + binding.lastEntry.setText(entity.getLast_visit()); + + if (entity.getPhoto() != null) { + Picasso.get().load(entity.getPhoto()).into(binding.photo); + } + } + }); + + String id = getArguments() != null ? getArguments().getString(KEY_ID) : null; + if (id == null) throw new IllegalStateException("ID is null"); + viewModel.update(id); + } + + + @Override + public void onDestroyView() { + binding = null; + super.onDestroyView(); + } + + public static Bundle getBundle(@NonNull String id) { + Bundle bundle = new Bundle(); + bundle.putString(KEY_ID, id); + return bundle; + } } 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 3cd5097..3c9d493 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,6 +1,73 @@ package ru.myitschool.work.ui.profile; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import ru.myitschool.work.data.UserRepositoryImplementation; +import ru.myitschool.work.domain.entities.Status; +import ru.myitschool.work.domain.entities.UserEntity; +import ru.myitschool.work.domain.user.GetUserByIdUseCase; + public class UserViewModel extends ViewModel { + + private final MutableLiveData mutableStateLiveData = new MutableLiveData(); + public final LiveData stateLiveData = mutableStateLiveData; + + public final GetUserByIdUseCase getUserByIdUseCase = new GetUserByIdUseCase( + UserRepositoryImplementation.getInstance() + ); + + + + public UserViewModel(String id) { + update(id); + } + + public void update(@NonNull String id) { + mutableStateLiveData.setValue(new State(null, null, true)); + getUserByIdUseCase.execute(id, status -> { + mutableStateLiveData.postValue(fromStatus(status)); + }); + } + + 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; + + @Nullable + private final UserEntity item; + + private final boolean isLoading; + + @Nullable + public String getErrorMessage() { + return errorMessage; + } + + @Nullable + public UserEntity getItem() { + return item; + } + + public boolean isLoading() { + return isLoading; + } + + public State(@Nullable String errorMessage, @Nullable UserEntity item, boolean isLoading) { + this.errorMessage = errorMessage; + this.item = item; + this.isLoading = isLoading; + } + } } diff --git a/app/src/main/java/ru/myitschool/work/utils/Utils.java b/app/src/main/java/ru/myitschool/work/utils/Utils.java new file mode 100644 index 0000000..128903a --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/utils/Utils.java @@ -0,0 +1,13 @@ +package ru.myitschool.work.utils; + +import static android.view.View.GONE; +import static android.view.View.VISIBLE; + +import android.view.View; + +public class Utils { + + public static int visibleOrGone(boolean isVisible) { + return isVisible ? VISIBLE : GONE; + } +} diff --git a/app/src/main/res/layout/activity_root.xml b/app/src/main/res/layout/activity_root.xml index e7cb1a9..b3982f3 100644 --- a/app/src/main/res/layout/activity_root.xml +++ b/app/src/main/res/layout/activity_root.xml @@ -1,13 +1,9 @@ - - - - \ No newline at end of file + android:layout_height="match_parent" + android:id="@+id/root" + app:navGraph="@navigation/nav_graph" + android:name="androidx.navigation.fragment.NavHostFragment" + app:defaultNavHost="true" /> diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml new file mode 100644 index 0000000..e815315 --- /dev/null +++ b/app/src/main/res/navigation/nav_graph.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file