This commit is contained in:
Serafim_Pankin 2025-02-19 16:19:08 +03:00
commit 8c05ab1325
14 changed files with 154 additions and 24 deletions

View File

@ -1,10 +1,20 @@
package com.displaynone.acss
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.activity.enableEdgeToEdge
import androidx.annotation.IdRes
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.navigation.NavController
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.NavigationUI
import com.displaynone.acss.components.auth.models.user.UserServiceST
import com.google.android.material.bottomnavigation.BottomNavigationView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@ -16,5 +26,40 @@ class MainActivity : AppCompatActivity() {
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
Log.d("123", R.id.action_nav_main_to_nav_profile.toString())
Log.d("123", R.id.action_nav_main_to_nav_auth.toString())
val navController: NavController = this.setupNavigation()
if(isUserAuthenticated()) { navigateTo(navController, R.id.action_nav_main_to_nav_profile)} else {navigateTo(navController, R.id.action_nav_main_to_nav_auth)}
}
fun navigateTo(navController: NavController, @IdRes actionId: Int) {
navController.navigate(actionId)
}
private fun setupNavigation(): NavController {
val navView = findViewById<BottomNavigationView>(R.id.bottom_navigation)
val toolbar = findViewById<Toolbar>(R.id.toolbar);
setSupportActionBar(toolbar)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as? NavHostFragment
if (navHostFragment == null){
throw IllegalStateException("NavHostFragment is null")
}
val navController = navHostFragment.navController
val appBarConfiguration = AppBarConfiguration(setOf(R.id.nav_auth,R.id.nav_scan, R.id.nav_profile, R.id.nav_admin))
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration)
NavigationUI.setupWithNavController(navView, navController)
navController.addOnDestinationChangedListener { _, destination, _ ->
Log.d("Navigate", "Navigate to " + destination.label)
navView.visibility = if (destination.id == R.id.nav_auth) View.GONE else View.VISIBLE
}
return navController
}
private fun isUserAuthenticated(): Boolean {
return UserServiceST.getInstance().hasTokens()
}
}

View File

@ -37,6 +37,9 @@ class UserServiceST(
}
}
}
fun hasTokens(): Boolean {
return tokenManager.hasTokens()
}
suspend fun getMyLastVisits(pageNum: Int,
pageSize: Int): Result<List<VisitDto>> {
if (!tokenManager.hasTokens()) {

View File

@ -126,7 +126,7 @@ class UserRepository(
runCatching {
Log.d("UserRepository", login)
val encodedLogin = login.encodeURLPath()
val result = Network.client.get("$serverUrl/api/acs/login/visits/${encodedLogin}?page=$pageNum&size=$pageSize") {
val result = Network.client.get("$serverUrl/api/acs/visits/login/${encodedLogin}?page=$pageNum&size=$pageSize") {
headers {
append(HttpHeaders.Authorization, "Bearer $token")
}

View File

@ -1,6 +1,7 @@
package com.displaynone.acss.ui.auth
import android.annotation.SuppressLint
import android.graphics.drawable.TransitionDrawable
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
@ -28,7 +29,6 @@ class AuthFragment: Fragment(R.layout.fragment_auth) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAuthBinding.bind(view)
setupLoginButton()
viewModel.action.collectWithLifecycle(this) { action ->
if (action is Action.GotoProfile) {
blockLoginButton() // FIXME() При двойном нажатии вылетает с ошибкой

View File

@ -0,0 +1,4 @@
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/gradient_1" />
<item android:drawable="@drawable/gradient_2" />
</transition>

View File

@ -0,0 +1,9 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
>
<gradient
android:startColor="#FFFFFF"
android:endColor="#BCE0E0"
android:angle="270"
android:type="linear" />
</shape>

View File

@ -0,0 +1,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#03a9f4"
android:endColor="#ffffff"
android:angle="270"
android:type="linear" />
</shape>

View File

@ -7,12 +7,37 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:navGraph="@navigation/nav_graph" />
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:popupTheme="@style/Base.Theme.ACSS"/>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_weight="1"
app:defaultNavHost="true"
android:layout_height="0dp"
app:navGraph="@navigation/nav_graph" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:labelVisibilityMode="labeled"
app:menu="@menu/bottom_nav_menu"
app:itemIconSize="24dp" />
</LinearLayout>
</com.google.android.material.appbar.AppBarLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -69,6 +69,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:maxLines="1"
android:hint="@string/login"

View File

@ -18,6 +18,7 @@
android:paddingTop="50dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="200dp"
android:foregroundGravity="center"
@ -40,8 +41,9 @@
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:background="@drawable/gradient_1"
android:layout_marginTop="10dp"
android:layout_width="280dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal">
@ -63,6 +65,8 @@
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="70dp"
android:layout_marginRight="70dp"
app:boxStrokeColor="@color/primary"
app:hintTextColor="?attr/colorOnBackground"
app:helperTextTextColor="?attr/colorOnBackground"
@ -73,6 +77,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="14dp"
android:maxLines="1"
android:hint="@string/login"
android:textColorHint="?attr/colorSecondary"
@ -91,7 +97,10 @@
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="70dp"
android:layout_marginRight="70dp"
android:padding="14dp"
android:maxLines="1"
android:hint="@string/password"
android:textColorHint="?attr/colorSecondary"
@ -108,7 +117,7 @@
android:id="@+id/next"
app:cardElevation="8dp"
android:layout_width="match_parent"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="@string/continue_"
android:padding="12dp"

View File

@ -1,12 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/scan_fragment"
android:id="@+id/nav_scan"
android:icon="@drawable/qr_code_scan"
android:title="@string/scan" />
<item
android:id="@+id/nav_profile"
android:icon="@drawable/_user_"
android:title="@string/title_profile" />
<item
android:id="@+id/nav_admin"
android:icon="@drawable/_user_"
android:title="@string/admin" />
</menu>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/logout"
android:title="logout"
android:icon="@drawable/ic_photo"
app:showAsAction="ifRoom" />
</menu>

View File

@ -2,51 +2,63 @@
<navigation 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"
app:startDestination="@id/authFragment">
app:startDestination="@id/nav_auth">
<fragment
android:id="@+id/profileFragment"
android:id="@+id/nav_profile"
android:name="com.displaynone.acss.ui.profile.ProfileFragment"
android:label="ProfileFragment"
tools:layout="@layout/fragment_profile">
<action
android:id="@+id/action_profileFragment_to_authFragment"
app:destination="@id/authFragment" />
app:destination="@id/nav_auth" />
<action
android:id="@+id/action_profileFragment_to_qrScanFragment"
app:destination="@id/qrScanFragment" />
app:destination="@id/nav_scan" />
<action
android:id="@+id/action_profileFragment_to_qrResultFragment"
app:destination="@id/qrResultFragment" />
<action
android:id="@+id/action_profileFragment_to_adminFragment"
app:destination="@id/adminFragment" />
app:destination="@id/nav_admin" />
</fragment>
<action
android:id="@+id/action_nav_main_to_nav_profile"
app:destination="@id/nav_profile" />
<action
android:id="@+id/action_nav_main_to_nav_auth"
app:destination="@id/nav_auth" />
<fragment
android:id="@+id/authFragment"
android:id="@+id/nav_auth"
android:name="com.displaynone.acss.ui.auth.AuthFragment"
android:label="AuthFragment" >
<action
android:id="@+id/action_authFragment_to_profileFragment"
app:destination="@id/profileFragment" />
app:destination="@id/nav_profile" />
</fragment>
<fragment
android:id="@+id/qrScanFragment"
android:id="@+id/nav_scan"
android:name="com.displaynone.acss.ui.scan.QrScanFragment"
android:label="QrScanFragment" />
android:label="QrScanFragment" >
<action
android:id="@+id/action_nav_scan_to_nav_profile"
app:destination="@id/nav_profile" />
</fragment>
<fragment
android:id="@+id/qrResultFragment"
android:name="com.displaynone.acss.ui.result.QrResultFragment"
android:label="QrResultFragment" >
<action
android:id="@+id/action_qrResultFragment_to_profileFragment"
app:destination="@id/profileFragment" />
app:destination="@id/nav_profile" />
</fragment>
<fragment
android:id="@+id/adminFragment"
android:id="@+id/nav_admin"
android:name="com.displaynone.acss.ui.admin.AdminFragment"
android:label="AdminFragment" >
<action
android:id="@+id/action_adminFragment_to_profileFragment"
app:destination="@id/profileFragment" />
app:destination="@id/nav_profile" />
</fragment>
</navigation>

View File

@ -18,6 +18,7 @@
<string name="administrator_searc_button_search"> Search </string>
<string name="title_profile">Your profile</string>
<string name="сhange_rights">Change rights using smartphone</string>
<string name="admin">Admin panel</string>
</resources>