Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
shunchaki
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Shohboz Qoraboev
shunchaki
Commits
ae54b133
Commit
ae54b133
authored
Dec 27, 2021
by
shohboz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[UPD]
MUS-266
Feature, updated clickable urls and other changes
parent
0cad9a91
Changes
43
Hide whitespace changes
Inline
Side-by-side
Showing
43 changed files
with
1761 additions
and
201 deletions
+1761
-201
misc.xml
.idea/misc.xml
+1
-0
agr-sdk-mobi-uz-release-1.0.0.aar
app/aars/agr-sdk-mobi-uz-release-1.0.0.aar
+0
-0
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+4
-7
MainFragment.kt
app/src/main/java/com/mobiuz/app/dev/MainFragment.kt
+332
-0
OfflineActivity.kt
app/src/main/java/com/mobiuz/app/dev/OfflineActivity.kt
+3
-5
TestActivity.kt
app/src/main/java/com/mobiuz/app/dev/TestActivity.kt
+15
-0
AuthRepository.kt
...a/com/mobiuz/app/dev/network/repository/AuthRepository.kt
+104
-70
MainRepository.kt
...a/com/mobiuz/app/dev/network/repository/MainRepository.kt
+41
-33
AuthActivity.kt
app/src/main/java/com/mobiuz/app/dev/ui/auth/AuthActivity.kt
+1
-1
CheckPhoneFragment.kt
...va/com/mobiuz/app/dev/ui/auth/check/CheckPhoneFragment.kt
+3
-3
LoginFragment.kt
...in/java/com/mobiuz/app/dev/ui/auth/login/LoginFragment.kt
+8
-11
InstallPinFragment.kt
...java/com/mobiuz/app/dev/ui/auth/pin/InstallPinFragment.kt
+11
-8
RegisterFragment.kt
...a/com/mobiuz/app/dev/ui/auth/register/RegisterFragment.kt
+3
-3
VerificationFragment.kt
...biuz/app/dev/ui/auth/verification/VerificationFragment.kt
+9
-9
CONSTANTS.kt
app/src/main/java/com/mobiuz/app/dev/ui/global/CONSTANTS.kt
+2
-0
OfflineBottomSheet.kt
...n/java/com/mobiuz/app/dev/ui/global/OfflineBottomSheet.kt
+3
-3
BillingFragment.kt
...c/main/java/com/mobiuz/app/dev/ui/home/BillingFragment.kt
+95
-0
HomeFragment.kt
app/src/main/java/com/mobiuz/app/dev/ui/home/HomeFragment.kt
+11
-15
SliderAdapter.kt
...src/main/java/com/mobiuz/app/dev/ui/home/SliderAdapter.kt
+14
-6
SendUssdFragment.kt
...in/java/com/mobiuz/app/dev/ui/service/SendUssdFragment.kt
+70
-0
ServicesAdapter.kt
...ain/java/com/mobiuz/app/dev/ui/service/ServicesAdapter.kt
+55
-0
ServicesFragment.kt
...in/java/com/mobiuz/app/dev/ui/service/ServicesFragment.kt
+112
-0
ServicesPagerAdapter.kt
...ava/com/mobiuz/app/dev/ui/service/ServicesPagerAdapter.kt
+18
-0
UssdAdapter.kt
...rc/main/java/com/mobiuz/app/dev/ui/service/UssdAdapter.kt
+55
-0
UssdBottomSheetDialog.kt
...va/com/mobiuz/app/dev/ui/service/UssdBottomSheetDialog.kt
+4
-10
UssdFragment.kt
...c/main/java/com/mobiuz/app/dev/ui/service/UssdFragment.kt
+2
-2
BottomNavExtensions.kt
...om/mobiuz/app/dev/utils/extensions/BottomNavExtensions.kt
+285
-0
activity_test.xml
app/src/main/res/layout/activity_test.xml
+20
-0
bottom_sheet_ussd.xml
app/src/main/res/layout/bottom_sheet_ussd.xml
+1
-1
fragment_billing.xml
app/src/main/res/layout/fragment_billing.xml
+1
-1
fragment_check_phone.xml
app/src/main/res/layout/fragment_check_phone.xml
+1
-1
fragment_main.xml
app/src/main/res/layout/fragment_main.xml
+276
-0
fragment_register.xml
app/src/main/res/layout/fragment_register.xml
+2
-2
fragment_send_ussd.xml
app/src/main/res/layout/fragment_send_ussd.xml
+19
-0
fragment_services.xml
app/src/main/res/layout/fragment_services.xml
+102
-0
fragment_verification.xml
app/src/main/res/layout/fragment_verification.xml
+2
-2
item_home.xml
app/src/main/res/layout/item_home.xml
+1
-0
layout_offline_bottom_sheet.xml
app/src/main/res/layout/layout_offline_bottom_sheet.xml
+2
-2
nav_graph_auth.xml
app/src/main/res/navigation/nav_graph_auth.xml
+13
-1
nav_graph_home.xml
app/src/main/res/navigation/nav_graph_home.xml
+1
-1
nav_graph_offline.xml
app/src/main/res/navigation/nav_graph_offline.xml
+2
-2
nav_graph_services.xml
app/src/main/res/navigation/nav_graph_services.xml
+2
-2
nav_graph_test.xml
app/src/main/res/navigation/nav_graph_test.xml
+55
-0
No files found.
.idea/misc.xml
View file @
ae54b133
...
...
@@ -54,6 +54,7 @@
<entry
key=
"app/src/main/res/layout/activity_settings.xml"
value=
"0.25625"
/>
<entry
key=
"app/src/main/res/layout/activity_splash.xml"
value=
"0.29936594202898553"
/>
<entry
key=
"app/src/main/res/layout/activity_splash2.xml"
value=
"0.25625"
/>
<entry
key=
"app/src/main/res/layout/activity_test.xml"
value=
"0.25625"
/>
<entry
key=
"app/src/main/res/layout/bottom_sheet_ussd.xml"
value=
"0.266796875"
/>
<entry
key=
"app/src/main/res/layout/button_selector.xml"
value=
"0.33242753623188404"
/>
<entry
key=
"app/src/main/res/layout/fragment_action.xml"
value=
"0.25625"
/>
...
...
app/aars/agr-sdk-mobi-uz-release-1.0.0.aar
View file @
ae54b133
No preview for this file type
app/src/main/AndroidManifest.xml
View file @
ae54b133
...
...
@@ -24,7 +24,11 @@
android:theme=
"@style/Theme.MobiUzAndroid"
android:usesCleartextTraffic=
"true"
tools:targetApi=
"m"
>
<activity
android:name=
".dev.TestActivity"
android:exported=
"true"
>
</activity>
<activity
android:name=
".dev.SplashActivity"
android:configChanges=
"orientation"
...
...
@@ -37,7 +41,6 @@
<category
android:name=
"android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
<activity
android:name=
".dev.LanguageActivity"
android:configChanges=
"orientation"
...
...
@@ -63,12 +66,6 @@
android:screenOrientation=
"portrait"
android:windowSoftInputMode=
"adjustResize"
/>
<activity
android:name=
".dev.BillingFragment"
android:configChanges=
"orientation"
android:exported=
"false"
android:screenOrientation=
"portrait"
android:windowSoftInputMode=
"adjustResize"
/>
</application>
</manifest>
\ No newline at end of file
app/src/main/java/com/mobiuz/app/dev/MainFragment.kt
0 → 100644
View file @
ae54b133
package
com.mobiuz.app.dev
import
android.content.BroadcastReceiver
import
android.content.Context
import
android.content.Intent
import
android.content.IntentFilter
import
android.net.Uri
import
android.os.Bundle
import
android.view.View
import
androidx.annotation.IdRes
import
androidx.core.os.bundleOf
import
androidx.core.view.GravityCompat
import
androidx.core.view.isVisible
import
androidx.drawerlayout.widget.DrawerLayout
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.viewModels
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.lifecycleScope
import
androidx.navigation.NavController
import
androidx.navigation.fragment.NavHostFragment
import
com.google.android.material.bottomnavigation.BottomNavigationView
import
com.mobiuz.app.BuildConfig
import
com.mobiuz.app.R
import
com.mobiuz.app.databinding.FragmentMainBinding
import
com.mobiuz.app.dev.model.SharedPref
import
com.mobiuz.app.dev.network.model.UiStateObject
import
com.mobiuz.app.dev.ui.auth.AuthActivity
import
com.mobiuz.app.dev.ui.global.ButtonClick
import
com.mobiuz.app.dev.ui.global.CONSTANTS
import
com.mobiuz.app.dev.utils.NetworkUtil
import
com.mobiuz.app.dev.utils.Utils
import
com.mobiuz.app.dev.utils.extensions.*
import
dagger.hilt.android.AndroidEntryPoint
import
kotlinx.coroutines.GlobalScope
import
kotlinx.coroutines.flow.collect
import
kotlinx.coroutines.launch
import
javax.inject.Inject
@AndroidEntryPoint
class
MainFragment
:
Fragment
(
R
.
layout
.
fragment_main
)
{
@Inject
lateinit
var
pref
:
SharedPref
private
var
_bn
:
FragmentMainBinding
?
=
null
private
val
bn
get
()
=
_bn
?:
throw
NullPointerException
(
"cannot inflate"
)
private
lateinit
var
bottomNavigationView
:
BottomNavigationView
private
var
currentNavController
:
LiveData
<
NavController
>?
=
null
private
val
viewModel
:
MainViewModel
by
viewModels
()
private
lateinit
var
receiver
:
BroadcastReceiver
private
val
intentFilter
=
IntentFilter
()
private
val
bottomNavSelectedItemIdKey
=
"BOTTOM_NAV_SELECTED_ITEM_ID_KEY"
private
var
bottomNavSelectedItemId
=
R
.
id
.
nav_graph_home
// Must be your starting destination
private
val
navController
:
NavController
by
lazy
(
LazyThreadSafetyMode
.
NONE
){
NavHostFragment
.
findNavController
(
this
)
}
// if offline type == 0
private
var
type
=
0
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
// LocaleHelper.setLocale(this)
super
.
onCreate
(
savedInstanceState
)
// _bn = ActivityMainBinding.inflate(layoutInflater)
// setContentView(bn.root)
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
_bn
=
FragmentMainBinding
.
bind
(
view
)
pref
.
isShowPin
=
false
savedInstanceState
?.
let
{
bottomNavSelectedItemId
=
savedInstanceState
.
getInt
(
bottomNavSelectedItemIdKey
,
bottomNavSelectedItemId
)
}
setupBottomNavigationBar
(
view
)
// val data = intent?.getStringExtra(CONSTANTS.FIRST)
// if (data != null && data == CONSTANTS.FIRST) {
// currentNavController?.value?.popBackStack()
// currentNavController?.value?.navigate(R.id.homeFragment)
// }
setUpUI
()
collects
()
receiver
=
object
:
BroadcastReceiver
()
{
override
fun
onReceive
(
context
:
Context
?,
intent
:
Intent
?)
{
if
(
intent
?.
action
==
CONSTANTS
.
INTENT_ACTION_NAVIGATE
){
val
id
=
intent
.
getIntExtra
(
CONSTANTS
.
FRAGMENT_ID
,
0
)
customLog
(
"INTENT_ACTION_NAVIGATE: id: $id"
)
navController
.
navigate
(
id
)
}
}
}
intentFilter
.
addAction
(
CONSTANTS
.
INTENT_ACTION_NAVIGATE
)
requireActivity
().
registerReceiver
(
receiver
,
intentFilter
)
}
private
fun
setUpUI
()
{
bn
.
apply
{
bn
.
btnTryAgain
.
setOnClickListener
{
if
(
type
==
0
)
{
navigateToOffline
()
}
}
txtVersion
.
text
=
"v ${BuildConfig.VERSION_NAME}"
header
.
txtUserPhone
.
text
=
pref
.
userPhone
.
customMasketHome
()
when
(
pref
.
language
)
{
CONSTANTS
.
UZ
->
txtLanguage
.
text
=
getString
(
R
.
string
.
uzbek
)
CONSTANTS
.
RU
->
txtLanguage
.
text
=
getString
(
R
.
string
.
russian
)
CONSTANTS
.
EN
->
txtLanguage
.
text
=
getString
(
R
.
string
.
english
)
}
btnExit
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
showCustomExitDialog
{
GlobalScope
.
launch
{
viewModel
.
logOut
()
}
val
intent
=
Intent
(
requireContext
(),
AuthActivity
::
class
.
java
)
intent
.
flags
=
Intent
.
FLAG_ACTIVITY_NEW_TASK
or
Intent
.
FLAG_ACTIVITY_TASK_ON_HOME
startActivity
(
intent
)
pref
.
clearUserData
()
requireActivity
().
finish
()
}
}
})
btnLanguage
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
navigateToSettingsScreen
(
R
.
id
.
languageFragment
)
}
})
btnSupport
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
navigateToSettingsScreen
(
R
.
id
.
supportFragment
)
}
})
btnSafety
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
navigateToSettingsScreen
(
R
.
id
.
securityFragment
)
}
})
header
.
headerLayout
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
navigateToSettingsScreen
(
R
.
id
.
profileFragment
)
}
})
txtRedactData
.
setOnClickListener
{
navigateUri
(
when
(
pref
.
language
)
{
CONSTANTS
.
UZ
->
CONSTANTS
.
LICENSE_UZ
CONSTANTS
.
RU
->
CONSTANTS
.
LICENSE_RU
else
->
CONSTANTS
.
LICENSE_EN
}
)
}
txtPublicOferta
.
setOnClickListener
{
navigateUri
(
when
(
pref
.
language
)
{
CONSTANTS
.
UZ
->
CONSTANTS
.
PRIVACY_POLICY_UZ
CONSTANTS
.
RU
->
CONSTANTS
.
PRIVACY_POLICY_RU
else
->
CONSTANTS
.
PRIVACY_POLICY_EN
}
)
}
}
}
private
fun
navigateToOffline
()
{
val
intent
=
Intent
(
requireContext
(),
OfflineActivity
::
class
.
java
)
intent
.
putExtra
(
CONSTANTS
.
TYPE_SERVICE
,
CONSTANTS
.
FROM_ONLINE
)
intent
.
flags
=
Intent
.
FLAG_ACTIVITY_NEW_TASK
or
Intent
.
FLAG_ACTIVITY_TASK_ON_HOME
startActivity
(
intent
)
requireActivity
().
finish
()
}
private
fun
navigateUri
(
link
:
String
)
{
val
uri
=
Uri
.
parse
(
link
)
val
intent
=
Intent
(
Intent
.
ACTION_VIEW
)
intent
.
data
=
uri
startActivity
(
intent
)
pref
.
isShowPin
=
false
}
override
fun
onStop
()
{
super
.
onStop
()
pref
.
blockedTime
=
System
.
currentTimeMillis
()
bn
.
drawerLayout
.
closeDrawer
(
GravityCompat
.
START
)
}
override
fun
onResume
()
{
super
.
onResume
()
if
(
pref
.
isShowPin
)
{
showPinCode
()
}
else
{
pref
.
blockedTime
=
System
.
currentTimeMillis
()
pref
.
isShowPin
=
true
}
}
private
fun
showPinCode
()
{
if
(
pref
.
blockedTime
<
System
.
currentTimeMillis
()
-
CONSTANTS
.
BLOCKED_TIME
)
{
if
(
currentNavController
?.
value
?.
currentDestination
?.
id
!=
R
.
id
.
pinFragment
&&
currentNavController
?.
value
?.
currentDestination
?.
id
!=
R
.
id
.
ussdFragment
)
{
bn
.
btnTryAgain
.
isVisible
=
false
currentNavController
?.
value
?.
navigate
(
R
.
id
.
pinFragment
,
bundleOf
(
CONSTANTS
.
TYPE_PIN
to
CONSTANTS
.
TYPE_AFTER
))
}
}
}
private
fun
navigateToSettingsScreen
(
@IdRes
resId
:
Int
)
{
val
window
=
requireActivity
().
window
.
decorView
window
.
systemUiVisibility
=
window
.
systemUiVisibility
or
View
.
SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
currentNavController
?.
value
?.
navigate
(
resId
)
viewModel
.
bottomSheet
(
false
)
bn
.
drawerLayout
.
closeDrawer
(
GravityCompat
.
START
)
}
private
fun
collects
()
{
lifecycleScope
.
launchWhenStarted
{
viewModel
.
mainIndexUiState
.
collect
{
when
(
it
)
{
is
UiStateObject
.
SUCCESS
->
{
bn
.
drawerLayout
.
openDrawer
(
GravityCompat
.
START
)
}
else
->
Unit
}
}
}
lifecycleScope
.
launchWhenStarted
{
viewModel
.
bottomSheetUiState
.
collect
{
when
(
it
)
{
is
UiStateObject
.
SUCCESS
->
{
bn
.
bottomNavView
.
isVisible
=
it
.
data
}
else
->
Unit
}
}
}
lifecycleScope
.
launchWhenStarted
{
viewModel
.
userNameUiState
.
collect
{
when
(
it
)
{
is
UiStateObject
.
SUCCESS
->
{
pref
.
userName
=
it
.
data
bn
.
header
.
txtUserName
.
text
=
it
.
data
bn
.
header
.
txtAvatar
.
text
=
it
.
data
[
0
].
toString
()
}
else
->
Unit
}
}
}
lifecycleScope
.
launchWhenStarted
{
viewModel
.
swipeDrawerUiState
.
collect
{
when
(
it
)
{
is
UiStateObject
.
SUCCESS
->
{
if
(
it
.
data
)
{
bn
.
drawerLayout
.
setDrawerLockMode
(
DrawerLayout
.
LOCK_MODE_UNLOCKED
)
}
else
{
bn
.
drawerLayout
.
setDrawerLockMode
(
DrawerLayout
.
LOCK_MODE_LOCKED_CLOSED
)
}
}
else
->
Unit
}
}
}
}
// Needed to maintain correct state over rotations
override
fun
onSaveInstanceState
(
outState
:
Bundle
)
{
outState
.
putInt
(
bottomNavSelectedItemIdKey
,
bottomNavSelectedItemId
)
super
.
onSaveInstanceState
(
outState
)
}
private
fun
setupBottomNavigationBar
(
view
:
View
)
{
try
{
bottomNavigationView
=
view
.
findViewById
(
R
.
id
.
bottom_nav_view
)
val
navGraphIds
=
listOf
(
R
.
navigation
.
nav_graph_home
,
R
.
navigation
.
nav_graph_services
)
val
controller
=
bottomNavigationView
.
setupWithNavController
(
fragmentManager
=
childFragmentManager
,
backButtonBehaviour
=
BackButtonBehaviour
.
POP_HOST_FRAGMENT
,
navGraphIds
=
navGraphIds
,
containerId
=
R
.
id
.
nav_host_fragment
,
firstItemId
=
R
.
id
.
nav_graph_home
,
intent
=
requireActivity
().
intent
)
controller
.
observe
(
viewLifecycleOwner
,
{
navController
->
// NavigationUI.setupWithNavController(bottomNavigationView,navController)
bottomNavSelectedItemId
=
navController
.
graph
.
id
// Needed to maintain correct state on return
})
currentNavController
=
controller
}
catch
(
e
:
Exception
)
{
e
.
printStackTrace
()
}
}
override
fun
onDestroy
()
{
requireActivity
().
unregisterReceiver
(
receiver
)
_bn
=
null
super
.
onDestroy
()
}
}
\ No newline at end of file
app/src/main/java/com/mobiuz/app/dev/OfflineActivity.kt
View file @
ae54b133
...
...
@@ -5,7 +5,6 @@ import android.content.Context
import
android.content.Intent
import
android.content.IntentFilter
import
android.os.Bundle
import
android.view.View
import
androidx.appcompat.app.AppCompatActivity
import
androidx.core.os.bundleOf
import
androidx.core.view.isVisible
...
...
@@ -16,10 +15,9 @@ import com.mobiuz.app.databinding.ActivityOfflineBinding
import
com.mobiuz.app.dev.model.SharedPref
import
com.mobiuz.app.dev.ui.auth.AuthActivity
import
com.mobiuz.app.dev.ui.global.CONSTANTS
import
com.mobiuz.app.dev.ui.service.ServiceAdapter
import
com.mobiuz.app.dev.ui.service.Service
s
Adapter
import
com.mobiuz.app.dev.utils.LocaleHelper
import
com.mobiuz.app.dev.utils.NetworkUtil
import
com.mobiuz.app.dev.utils.extensions.customLog
import
com.mobiuz.app.dev.utils.extensions.showMessage
import
dagger.hilt.android.AndroidEntryPoint
import
javax.inject.Inject
...
...
@@ -30,7 +28,7 @@ class OfflineActivity : AppCompatActivity() {
private
var
_bn
:
ActivityOfflineBinding
?
=
null
private
val
bn
get
()
=
_bn
?:
throw
NullPointerException
(
"cannot inflate"
)
private
lateinit
var
adapter
:
ServiceAdapter
private
lateinit
var
adapter
:
Service
s
Adapter
private
lateinit
var
navController
:
NavController
private
lateinit
var
receiver
:
BroadcastReceiver
private
val
intentFilter
=
IntentFilter
()
...
...
@@ -47,7 +45,7 @@ class OfflineActivity : AppCompatActivity() {
_bn
=
ActivityOfflineBinding
.
inflate
(
layoutInflater
)
setContentView
(
bn
.
root
)
adapter
=
ServiceAdapter
(
pref
.
language
)
adapter
=
Service
s
Adapter
(
pref
.
language
)
pref
.
isShowPin
=
false
...
...
app/src/main/java/com/mobiuz/app/dev/TestActivity.kt
0 → 100644
View file @
ae54b133
package
com.mobiuz.app.dev
import
androidx.appcompat.app.AppCompatActivity
import
android.os.Bundle
import
com.mobiuz.app.R
import
dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class
TestActivity
:
AppCompatActivity
()
{
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
setContentView
(
R
.
layout
.
activity_test
)
}
}
\ No newline at end of file
app/src/main/java/com/mobiuz/app/dev/network/repository/AuthRepository.kt
View file @
ae54b133
...
...
@@ -11,6 +11,8 @@ import com.mobiuz.app.dev.network.model.UiStateObject
import
com.mobiuz.app.dev.utils.extensions.getMessage
import
com.mobiuz.app.dev.utils.extensions.userMessage
import
dagger.hilt.android.qualifiers.ApplicationContext
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.withContext
import
javax.inject.Inject
import
javax.inject.Singleton
...
...
@@ -23,13 +25,16 @@ class AuthRepository @Inject constructor(
suspend
fun
checkPhone
(
data
:
UserAuth
):
UiStateObject
<
Action
>
{
return
try
{
val
res
=
apiService
.
checkPhone
(
data
)
when
{
res
.
status
->
UiStateObject
.
SUCCESS
(
res
.
data
?:
Action
())
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
checkPhone
(
data
)
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
UiStateObject
.
SUCCESS
(
res
.
data
?:
Action
())
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
}
...
...
@@ -37,11 +42,15 @@ class AuthRepository @Inject constructor(
suspend
fun
registerUser
(
data
:
UserAuth
):
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
register
(
data
)
when
{
res
.
status
&&
res
.
data
!=
null
->
UiStateObject
.
SUCCESS
(
res
.
data
!!
)
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
register
(
data
)
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
&&
res
.
data
!=
null
->
UiStateObject
.
SUCCESS
(
res
.
data
!!
)
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
}
}
catch
(
e
:
Exception
)
{
...
...
@@ -51,16 +60,19 @@ class AuthRepository @Inject constructor(
suspend
fun
checkSMSCode
(
data
:
UserAuth
):
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
checkSMSCode
(
data
)
when
{
res
.
status
->
{
pref
.
userToken
=
res
.
data
?.
token
pref
.
isRegistered
=
true
UiStateObject
.
SUCCESS
(
res
.
message
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
checkSMSCode
(
data
)
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
{
pref
.
userToken
=
res
.
data
?.
token
pref
.
isRegistered
=
true
UiStateObject
.
SUCCESS
(
res
.
message
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
...
...
@@ -69,14 +81,17 @@ class AuthRepository @Inject constructor(
suspend
fun
loginUser
(
data
:
UserAuth
):
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
login
(
data
)
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
data
!!
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
login
(
data
)
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
data
!!
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
...
...
@@ -85,14 +100,17 @@ class AuthRepository @Inject constructor(
suspend
fun
checkResetCode
(
data
:
UserAuth
):
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
checkResetCode
(
data
)
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
message
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
checkResetCode
(
data
)
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
message
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
...
...
@@ -101,16 +119,19 @@ class AuthRepository @Inject constructor(
suspend
fun
resetPassword
(
data
:
UserAuth
):
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
resetPassword
(
data
)
when
{
res
.
status
->
{
pref
.
isRegistered
=
true
pref
.
userToken
=
res
.
data
?.
token
UiStateObject
.
SUCCESS
(
res
.
message
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
resetPassword
(
data
)
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
{
pref
.
isRegistered
=
true
pref
.
userToken
=
res
.
data
?.
token
UiStateObject
.
SUCCESS
(
res
.
message
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
...
...
@@ -119,14 +140,17 @@ class AuthRepository @Inject constructor(
suspend
fun
forgetPassword
(
data
:
UserAuth
):
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
forgetPassword
(
data
)
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
data
?:
""
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
forgetPassword
(
data
)
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
data
?:
""
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
...
...
@@ -135,13 +159,17 @@ class AuthRepository @Inject constructor(
suspend
fun
resetSmsCode
(
data
:
UserAuth
):
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
reSendSms
(
data
)
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
data
?:
""
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
reSendSms
(
data
)
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
data
?:
""
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
...
...
@@ -150,14 +178,17 @@ class AuthRepository @Inject constructor(
suspend
fun
checkPassword
(
data
:
UserAuth
):
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
checkPassword
(
data
)
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
message
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
checkPassword
(
data
)
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
message
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
(),
true
)
else
->
UiStateObject
.
ERROR
(
res
.
message
,
true
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
(),
true
)
else
->
UiStateObject
.
ERROR
(
res
.
message
,
true
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
...
...
@@ -166,14 +197,17 @@ class AuthRepository @Inject constructor(
suspend
fun
installPassword
(
data
:
ChangePassword
):
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
installPassword
(
data
)
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
message
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
installPassword
(
data
)
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
message
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
...
...
app/src/main/java/com/mobiuz/app/dev/network/repository/MainRepository.kt
View file @
ae54b133
...
...
@@ -12,6 +12,9 @@ import com.mobiuz.app.dev.network.model.UiStateObject
import
com.mobiuz.app.dev.utils.extensions.getMessage
import
com.mobiuz.app.dev.utils.extensions.userMessage
import
dagger.hilt.android.qualifiers.ApplicationContext
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.withContext
import
uz.agr.mobiuz.AGRBilling
import
javax.inject.Inject
import
javax.inject.Singleton
...
...
@@ -23,47 +26,49 @@ class MainRepository @Inject constructor(
){
suspend
fun
mainIndex
():
UiStateObject
<
Customer
>
{
return
try
{
val
res
=
apiService
.
mainIndex
()
when
{
res
.
status
&&
res
.
data
!=
null
->
{
UiStateObject
.
SUCCESS
(
res
.
data
!!
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
mainIndex
()
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
&&
res
.
data
!=
null
->
{
UiStateObject
.
SUCCESS
(
res
.
data
!!
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
}
}
suspend
fun
logOut
():
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
logOut
()
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
message
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
suspend
fun
logOut
()
{
try
{
withContext
(
Dispatchers
.
IO
){
AGRBilling
.
deleteAllCards
()
AGRBilling
.
deleteAllMonitoring
()
apiService
.
logOut
()
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
)
)
e
.
printStackTrace
(
)
}
}
suspend
fun
services
():
UiStateObject
<
String
>
{
return
try
{
val
res
=
apiService
.
getServices
()
when
{
res
.
status
->
{
pref
.
services
=
Gson
().
toJson
(
res
.
data
)
UiStateObject
.
SUCCESS
(
res
.
message
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
getServices
()
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
{
pref
.
services
=
Gson
().
toJson
(
res
.
data
)
UiStateObject
.
SUCCESS
(
res
.
message
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
...
...
@@ -71,14 +76,17 @@ class MainRepository @Inject constructor(
}
suspend
fun
mainRoaming
():
UiStateObject
<
Roaming
>
{
return
try
{
val
res
=
apiService
.
mainRoaming
()
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
data
!!
)
withContext
(
Dispatchers
.
IO
){
val
res
=
apiService
.
mainRoaming
()
withContext
(
Dispatchers
.
Main
){
when
{
res
.
status
->
{
UiStateObject
.
SUCCESS
(
res
.
data
!!
)
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
res
.
errors
.
isNotEmpty
()
->
UiStateObject
.
ERROR
(
res
.
errors
.
getMessage
())
else
->
UiStateObject
.
ERROR
(
res
.
message
)
}
}
catch
(
e
:
Exception
)
{
UiStateObject
.
ERROR
(
e
.
userMessage
(
context
))
...
...
app/src/main/java/com/mobiuz/app/dev/ui/auth/AuthActivity.kt
View file @
ae54b133
...
...
@@ -79,7 +79,7 @@ class AuthActivity : AppCompatActivity() {
}
CONSTANTS
.
TYPE_VERIFICATION
->
{
navController
.
popBackStack
()
navController
.
navigate
(
R
.
id
.
myV
erificationFragment
,
bundleOf
(
CONSTANTS
.
PHONE
to
phone
,
CONSTANTS
.
PIN_CODE
to
verificationCode
),
Utils
.
navOptions
())
navController
.
navigate
(
R
.
id
.
v
erificationFragment
,
bundleOf
(
CONSTANTS
.
PHONE
to
phone
,
CONSTANTS
.
PIN_CODE
to
verificationCode
),
Utils
.
navOptions
())
}
}
}
...
...
app/src/main/java/com/mobiuz/app/dev/ui/auth/check/CheckPhoneFragment.kt
View file @
ae54b133
...
...
@@ -54,7 +54,7 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
toolbar
.
setNavigationOnClickListener
{
requireActivity
().
finish
()
requireActivity
().
onBackPressed
()
}
viewGroup
.
setOnClickListener
(
object
:
ButtonClick
()
{
...
...
@@ -78,7 +78,7 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
inputPhone
.
setText
(
newText
)
inputPhone
.
setSelection
(
oldText
.
checkChangedPosition
(
newText
))
inputPhone
.
addTextChangedListener
(
this
)
btn
Login
.
isEnabled
=
inputPhone
.
text
.
toString
().
trim
().
length
==
12
btn
CheckPhone
.
isEnabled
=
inputPhone
.
text
.
toString
().
trim
().
length
==
12
}
catch
(
e
:
Exception
){
inputPhone
.
text
.
clear
()
}
...
...
@@ -86,7 +86,7 @@ class CheckPhoneFragment : BaseFragment(R.layout.fragment_check_phone) {
}
})
btn
Login
.
setOnClickListener
(
object
:
ButtonClick
()
{
btn
CheckPhone
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
phone
=
"+998"
+
inputPhone
.
text
.
toString
().
trim
().
replace
(
" "
,
""
)
phoneRaw
=
"+998 "
+
inputPhone
.
text
.
toString
().
trim
()
...
...
app/src/main/java/com/mobiuz/app/dev/ui/auth/login/LoginFragment.kt
View file @
ae54b133
package
com.mobiuz.app.dev.ui.auth.login
import
android.content.Intent
import
android.graphics.Color
import
android.net.Uri
import
android.os.Bundle
import
android.text.Spannable
import
android.text.SpannableString
import
android.text.style.ForegroundColorSpan
import
android.view.View
import
androidx.core.os.bundleOf
import
androidx.core.view.isVisible
import
androidx.fragment.app.viewModels
import
androidx.lifecycle.lifecycleScope
import
androidx.navigation.NavController
...
...
@@ -26,7 +21,6 @@ import com.mobiuz.app.dev.ui.global.TextWatcherWrapper
import
com.mobiuz.app.dev.utils.Utils
import
com.mobiuz.app.dev.utils.extensions.checkInternet
import
com.mobiuz.app.dev.utils.extensions.makeLinks
import
com.mobiuz.app.dev.utils.extensions.showCustomDialog
import
com.mobiuz.app.dev.utils.hideKeyboard
import
dagger.hilt.android.AndroidEntryPoint
import
kotlinx.coroutines.flow.collect
...
...
@@ -58,8 +52,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
override
fun
setUpUI
()
{
bn
.
apply
{
viewGroup
.
setOnClickListener
(
object
:
ButtonClick
(){
viewGroup
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
bn
.
viewGroup
.
hideKeyboard
()
}
...
...
@@ -100,7 +93,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
)
}
else
->
{
if
(
checkInternet
())
{
if
(
checkInternet
())
{
viewModel
.
login
(
UserAuth
(
phone
.
filter
{
it
.
isDigit
()
},
password
))
}
...
...
@@ -122,7 +115,11 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
when
(
it
)
{
is
UiStateObject
.
SUCCESS
->
{
showProgressDialog
(
false
)
navController
.
navigate
(
R
.
id
.
myVerificationFragment
,
bundleOf
(
CONSTANTS
.
PHONE
to
phone
,
CONSTANTS
.
PIN_CODE
to
it
.
data
),
Utils
.
navOptions
())
navController
.
navigate
(
R
.
id
.
verificationFragment
,
bundleOf
(
CONSTANTS
.
PHONE
to
phone
,
CONSTANTS
.
PIN_CODE
to
it
.
data
),
Utils
.
navOptions
()
)
}
is
UiStateObject
.
ERROR
->
{
showProgressDialog
(
false
)
...
...
@@ -142,7 +139,7 @@ class LoginFragment : BaseFragment(R.layout.fragment_login) {
is
UiStateObject
.
SUCCESS
->
{
showProgressDialog
(
false
)
navController
.
navigate
(
R
.
id
.
myV
erificationFragment
,
R
.
id
.
v
erificationFragment
,
bundleOf
(
CONSTANTS
.
PHONE
to
phone
,
CONSTANTS
.
TYPE_VERIFICATION
to
CONSTANTS
.
TYPE_FORGET
,
...
...
app/src/main/java/com/mobiuz/app/dev/ui/auth/pin/InstallPinFragment.kt
View file @
ae54b133
...
...
@@ -34,13 +34,13 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
private
var
_bn
:
FragmentInstallPinBinding
?
=
null
private
val
bn
get
()
=
_bn
?:
throw
NullPointerException
(
"cannot inflate"
)
private
val
navController
:
NavController
by
lazy
(
LazyThreadSafetyMode
.
NONE
)
{
NavHostFragment
.
findNavController
(
this
)
}
private
val
data
=
ArrayList
<
PinData
>()
private
lateinit
var
biometricManager
:
BiometricManager
private
val
pinAdapter
=
InstallPinAdapter
()
private
va
r
type
=
""
private
va
l
data
=
ArrayList
<
PinData
>()
private
var
titleText
=
""
private
var
pinCode
=
""
private
var
type
=
""
private
var
count
=
3
private
lateinit
var
biometricManager
:
BiometricManager
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
...
...
@@ -49,12 +49,12 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
type
=
it
.
getString
(
CONSTANTS
.
TYPE_PIN
,
""
)
?:
""
pinCode
=
it
.
getString
(
CONSTANTS
.
PIN_CODE
,
""
)
?:
""
}
biometricManager
=
BiometricManager
.
from
(
requireContext
())
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
_bn
=
FragmentInstallPinBinding
.
bind
(
view
)
biometricManager
=
BiometricManager
.
from
(
requireContext
())
setUpUI
()
collects
()
...
...
@@ -106,7 +106,8 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
pinAdapter
.
setOnDoneListener
{
when
(
type
)
{
CONSTANTS
.
NEW_PIN
->
{
navController
.
navigate
(
R
.
id
.
installPinFragment
,
bundleOf
(
CONSTANTS
.
TYPE_PIN
to
CONSTANTS
.
CONFIRM_NEW_PIN
,
CONSTANTS
.
PIN_CODE
to
it
),
navController
.
navigate
(
R
.
id
.
installPinFragment
,
bundleOf
(
CONSTANTS
.
TYPE_PIN
to
CONSTANTS
.
CONFIRM_NEW_PIN
,
CONSTANTS
.
PIN_CODE
to
it
),
Utils
.
navOptions
())
}
CONSTANTS
.
CONFIRM_NEW_PIN
->
{
...
...
@@ -121,7 +122,8 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
}
CONSTANTS
.
CURRENT_PIN
->
{
if
(
pref
.
pinCode
==
it
){
navController
.
navigate
(
R
.
id
.
installPinFragment
,
bundleOf
(
CONSTANTS
.
TYPE_PIN
to
CONSTANTS
.
CHANGE_NEW_PIN
),
Utils
.
navOptions
())
navController
.
navigate
(
R
.
id
.
installPinFragment
,
bundleOf
(
CONSTANTS
.
TYPE_PIN
to
CONSTANTS
.
CHANGE_NEW_PIN
),
Utils
.
navOptions
())
}
else
{
loadError
()
}
...
...
@@ -130,8 +132,9 @@ class InstallPinFragment : BaseFragment(R.layout.fragment_install_pin) {
if
(
pref
.
pinCode
==
it
){
showMessage
(
getString
(
R
.
string
.
cannot_change_pin
))
}
else
{
navController
.
navigate
(
R
.
id
.
installPinFragment
,
bundleOf
(
CONSTANTS
.
TYPE_PIN
to
CONSTANTS
.
CONFIRM_CHANGE_NEW_PIN
,
CONSTANTS
.
PIN_CODE
to
it
),
Utils
.
navOptions
())
navController
.
navigate
(
R
.
id
.
installPinFragment
,
bundleOf
(
CONSTANTS
.
TYPE_PIN
to
CONSTANTS
.
CONFIRM_CHANGE_NEW_PIN
,
CONSTANTS
.
PIN_CODE
to
it
),
Utils
.
navOptions
())
}
}
CONSTANTS
.
CONFIRM_CHANGE_NEW_PIN
->
{
...
...
app/src/main/java/com/mobiuz/app/dev/ui/auth/register/RegisterFragment.kt
View file @
ae54b133
...
...
@@ -131,7 +131,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
})
btn
Login
.
setOnClickListener
(
object
:
ButtonClick
()
{
btn
Register
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
password
=
inputPassword
.
text
.
toString
().
trim
()
confirmPassword
=
inputConfirm
.
text
.
toString
().
trim
()
...
...
@@ -157,7 +157,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
bn
.
apply
{
password
=
inputPassword
.
text
.
toString
().
trim
()
confirmPassword
=
inputConfirm
.
text
.
toString
().
trim
()
btn
Login
.
isEnabled
=
(
password
.
length
>
3
)
&&
(
password
==
confirmPassword
)
btn
Register
.
isEnabled
=
(
password
.
length
>
3
)
&&
(
password
==
confirmPassword
)
txtCheckPassword
.
isVisible
=
password
.
length
<
4
if
(
password
.
isNotEmpty
()
&&
confirmPassword
.
isNotEmpty
()){
if
(
password
==
confirmPassword
){
...
...
@@ -184,7 +184,7 @@ class RegisterFragment : BaseFragment(R.layout.fragment_register) {
is
UiStateObject
.
SUCCESS
->
{
showProgressDialog
(
false
)
navController
.
navigate
(
R
.
id
.
myV
erificationFragment
,
R
.
id
.
v
erificationFragment
,
bundleOf
(
CONSTANTS
.
PHONE
to
phone
,
CONSTANTS
.
PIN_CODE
to
it
.
data
),
Utils
.
navOptions
()
)
...
...
app/src/main/java/com/mobiuz/app/dev/ui/auth/verification/VerificationFragment.kt
View file @
ae54b133
...
...
@@ -44,8 +44,8 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
private
val
bn
get
()
=
_bn
?:
throw
NullPointerException
(
"cannot inflate"
)
private
val
viewModel
:
AuthViewModel
by
viewModels
()
private
val
navController
:
NavController
by
lazy
(
LazyThreadSafetyMode
.
NONE
)
{
NavHostFragment
.
findNavController
(
this
)
}
private
var
code
=
""
private
var
verificationCode
=
""
private
var
code
=
""
private
var
phone
=
""
...
...
@@ -88,7 +88,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
setColorPins
(
getColorCompat
(
R
.
color
.
black100
))
}
})
btn
Logi
n
.
setOnClickListener
(
object
:
ButtonClick
()
{
btn
Verificatio
n
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
getLinePinCodes
()
val
auth
=
UserAuth
(
phone
.
replace
(
"+"
,
""
).
replace
(
" "
,
""
),
null
,
code
)
...
...
@@ -107,7 +107,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
coutdownView
.
setOnCountdownEndListener
{
count
(
false
)
}
setVerificationCode
()
//
setVerificationCode()
}
}
...
...
@@ -121,7 +121,7 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
pin5
.
setText
(
verificationCode
[
4
].
toString
())
pin6
.
setText
(
verificationCode
[
5
].
toString
())
pin6
.
requestFocus
()
btn
Logi
n
.
isEnabled
=
true
btn
Verificatio
n
.
isEnabled
=
true
}
}
}
...
...
@@ -186,12 +186,12 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
if
(
s
.
toString
().
isNotEmpty
())
{
if
(
i
==
pinView
.
childCount
-
1
)
{
pin6
.
hideKeyboard
()
btn
Logi
n
.
isEnabled
=
true
btn
Verificatio
n
.
isEnabled
=
true
}
else
pinView
.
getChildAt
(
i
+
1
).
requestFocus
()
this
@apply
.
setBackgroundResource
(
R
.
drawable
.
bgn_ver_checked
)
}
else
{
if
(
i
==
pinView
.
childCount
-
1
)
{
btn
Logi
n
.
isEnabled
=
false
btn
Verificatio
n
.
isEnabled
=
false
}
this
@apply
.
setBackgroundResource
(
R
.
drawable
.
bgn_ver_unchecked
)
}
...
...
@@ -239,9 +239,9 @@ class VerificationFragment : BaseFragment(R.layout.fragment_verification) {
viewModel
.
resetSmsCodeUiState
.
collect
{
when
(
it
)
{
is
UiStateObject
.
SUCCESS
->
{
showToastMessage
(
it
.
data
)
verificationCode
=
it
.
data
setVerificationCode
()
//
showToastMessage(it.data)
//
verificationCode = it.data
//
setVerificationCode()
count
(
true
)
showProgressDialog
(
false
)
}
...
...
app/src/main/java/com/mobiuz/app/dev/ui/global/CONSTANTS.kt
View file @
ae54b133
...
...
@@ -50,7 +50,9 @@ object CONSTANTS {
const
val
FROM_ONLINE
=
"FROM_ONLINE"
const
val
FULL_SCREEN_DIALOG
=
"full_screen_dialog"
const
val
CONNECTIVITY_CHANGE
=
"android.net.conn.CONNECTIVITY_CHANGE"
const
val
INTENT_ACTION_NAVIGATE
=
"INTENT_ACTION_NAVIGATE"
const
val
MY_CONNECTIVITY_CHANGE
=
"MY_CONNECTIVITY_CHANGE"
const
val
FRAGMENT_ID
=
"FRAGMENT_ID"
//password types
...
...
app/src/main/java/com/mobiuz/app/dev/ui/global/OfflineBottomSheet.kt
View file @
ae54b133
...
...
@@ -13,7 +13,7 @@ import dagger.hilt.android.AndroidEntryPoint
import
javax.inject.Inject
@AndroidEntryPoint
class
OfflineBottomSheet
()
:
BottomSheetDialogFragment
()
{
class
OfflineBottomSheet
:
BottomSheetDialogFragment
()
{
@Inject
lateinit
var
pref
:
SharedPref
...
...
@@ -34,14 +34,14 @@ class OfflineBottomSheet() : BottomSheetDialogFragment() {
private
fun
setUpUI
()
{
bn
.
apply
{
lng
=
pref
.
language
btn
Zapros
.
setOnClickListener
(
object
:
ButtonClick
()
{
btn
ToOfflineActivity
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
pref
.
isShowPin
=
false
navigate
()
}
})
btn
Otmena
.
setOnClickListener
(
object
:
ButtonClick
()
{
btn
Cancel
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
dismiss
()
}
...
...
app/src/main/java/com/mobiuz/app/dev/BillingFragment.kt
→
app/src/main/java/com/mobiuz/app/dev/
ui/home/
BillingFragment.kt
View file @
ae54b133
package
com.mobiuz.app.dev
package
com.mobiuz.app.dev
.ui.home
import
android.os.Bundle
import
android.view.View
import
androidx.appcompat.app.AppCompatActivity
import
androidx.navigation.fragment.NavHostFragment
import
com.mobiuz.app.R
import
com.mobiuz.app.databinding.FragmentBillingBinding
import
com.mobiuz.app.dev.model.SharedPref
import
com.mobiuz.app.dev.ui.base.BaseFragment
import
com.mobiuz.app.dev.utils.LocaleHelper
import
com.mobiuz.app.dev.utils.extensions.showMessage
import
dagger.hilt.android.AndroidEntryPoint
import
uz.agr.mobiuz.AGRBilling
import
uz.agr.sdk.coreui.extension.showMessage
import
javax.inject.Inject
@AndroidEntryPoint
...
...
app/src/main/java/com/mobiuz/app/dev/ui/home/HomeFragment.kt
View file @
ae54b133
...
...
@@ -3,6 +3,7 @@ package com.mobiuz.app.dev.ui.home
import
android.annotation.SuppressLint
import
android.content.Intent
import
android.graphics.Color
import
android.net.Uri
import
android.os.Bundle
import
android.view.View
import
android.widget.FrameLayout
...
...
@@ -17,16 +18,15 @@ import androidx.recyclerview.widget.RecyclerView
import
com.google.android.material.tabs.TabLayoutMediator
import
com.mobiuz.app.R
import
com.mobiuz.app.databinding.FragmentHomeBinding
import
com.mobiuz.app.dev.BillingFragment
import
com.mobiuz.app.dev.MainViewModel
import
com.mobiuz.app.dev.model.SharedPref
import
com.mobiuz.app.dev.network.model.Customer
import
com.mobiuz.app.dev.network.model.UiStateObject
import
com.mobiuz.app.dev.ui.base.BaseFragment
import
com.mobiuz.app.dev.ui.global.CONSTANTS
import
com.mobiuz.app.dev.utils.extensions.*
import
dagger.hilt.android.AndroidEntryPoint
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.flow.collect
import
javax.inject.Inject
...
...
@@ -77,6 +77,13 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
bn
.
apply
{
slider
.
adapter
=
sliderAdapter
sliderAdapter
.
setOnClickListener
{
val
uri
=
Uri
.
parse
(
it
)
val
intent
=
Intent
(
Intent
.
ACTION_VIEW
)
intent
.
data
=
uri
startActivity
(
intent
)
}
TabLayoutMediator
(
tabIndicator
,
slider
)
{
_
,
_
->
}.
attach
()
// lifecycleScope.launchWhenCreated {
...
...
@@ -102,6 +109,7 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
btnAddSum
.
setOnClickListener
{
pref
.
isShowPin
=
false
if
(
checkInternet
()){
// requireActivity().sendBroadcast(Intent(CONSTANTS.INTENT_ACTION_NAVIGATE).putExtra(CONSTANTS.FRAGMENT_ID,R.id.billingFragment))
navController
.
navigate
(
R
.
id
.
billingFragment
)
}
...
...
@@ -212,10 +220,10 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
@SuppressLint
(
"SetTextI18n"
)
private
fun
loadData
()
{
try
{
// sliderAdapter.submitList(customer?.events ?: emptyList())
customer
?.
customer
?.
info
?.
let
{
bn
.
apply
{
// loadSum(it.balance?.amount?.toDouble(),it.balance?.currency)
txtBalance
.
text
=
"${it.balance?.amount?.toMoneyFormat()} ${it.balance?.currency}"
pref
.
userBirthday
=
customer
?.
customer
?.
date_of_birth
?:
""
it
.
counters
?.
let
{
...
...
@@ -246,18 +254,6 @@ class HomeFragment : BaseFragment(R.layout.fragment_home) {
}
}
private
fun
loadSum
(
amount
:
Double
?,
currency
:
String
?){
lifecycleScope
.
launchWhenCreated
{
var
i
=
0.0
while
(
i
<
amount
?:
0.0
){
delay
(
50
)
i
+=
10000
bn
.
txtBalance
.
text
=
"${i.toMoneyFormat()} $currency"
}
}
}
override
fun
onResume
()
{
super
.
onResume
()
mainViewModel
.
bottomSheet
(
true
)
...
...
app/src/main/java/com/mobiuz/app/dev/ui/home/SliderAdapter.kt
View file @
ae54b133
...
...
@@ -4,21 +4,23 @@ import android.graphics.Color
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
androidx.core.content.ContextCompat
import
androidx.recyclerview.widget.RecyclerView
import
coil.load
import
com.mobiuz.app.R
import
com.mobiuz.app.databinding.ItemHomeBinding
import
com.mobiuz.app.dev.network.model.Events
import
com.mobiuz.app.dev.ui.global.ButtonClick
import
com.mobiuz.app.dev.ui.global.CONSTANTS
import
com.mobiuz.app.dev.utils.extensions.SingleBlock
class
SliderAdapter
:
RecyclerView
.
Adapter
<
SliderAdapter
.
SliderViewHolder
>()
{
private
var
listener
:
SingleBlock
<
Events
>?
=
null
private
val
sliderItems
:
ArrayList
<
Events
>
=
ArrayList
()
private
var
listener
:
SingleBlock
<
String
>?
=
null
private
val
sliderItems
:
ArrayList
<
String
>
=
ArrayList
()
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
SliderViewHolder
{
return
SliderViewHolder
(
ItemHomeBinding
.
inflate
(
LayoutInflater
.
from
(
parent
.
context
),
parent
,
false
)
ItemHomeBinding
.
inflate
(
LayoutInflater
.
from
(
parent
.
context
),
parent
,
false
)
)
}
...
...
@@ -35,16 +37,22 @@ class SliderAdapter : RecyclerView.Adapter<SliderAdapter.SliderViewHolder>() {
txtDescription
.
setTextColor
(
Color
.
WHITE
)
txtDescription
.
text
=
itemView
.
context
.
getString
(
R
.
string
.
misic_all_with_you
)
}
btnSeeMore
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
listener
?.
invoke
(
CONSTANTS
.
HTTP_MOBI_UZ
)
}
})
}
}
}
fun
setOnClickListener
(
block
:
SingleBlock
<
Events
>)
{
fun
setOnClickListener
(
block
:
SingleBlock
<
String
>)
{
listener
=
block
}
fun
submitList
(
ls
:
List
<
Events
>)
{
fun
submitList
(
ls
:
List
<
String
>)
{
sliderItems
.
clear
()
sliderItems
.
addAll
(
ls
)
notifyDataSetChanged
()
...
...
app/src/main/java/com/mobiuz/app/dev/ui/service/
Action
Fragment.kt
→
app/src/main/java/com/mobiuz/app/dev/ui/service/
SendUssd
Fragment.kt
View file @
ae54b133
...
...
@@ -5,30 +5,29 @@ import android.view.View
import
androidx.lifecycle.ViewModelProvider
import
com.google.gson.Gson
import
com.mobiuz.app.R
import
com.mobiuz.app.databinding.Fragment
Action
Binding
import
com.mobiuz.app.databinding.Fragment
SendUssd
Binding
import
com.mobiuz.app.dev.MainViewModel
import
com.mobiuz.app.dev.model.InnerData
import
com.mobiuz.app.dev.model.SharedPref
import
com.mobiuz.app.dev.ui.base.BaseFragment
import
com.mobiuz.app.dev.ui.global.CONSTANTS
import
dagger.hilt.android.AndroidEntryPoint
import
me.everything.android.ui.overscroll.OverScrollDecoratorHelper
import
javax.inject.Inject
@AndroidEntryPoint
class
ActionFragment
:
BaseFragment
(
R
.
layout
.
fragment_action
)
{
class
SendUssdFragment
:
BaseFragment
(
R
.
layout
.
fragment_send_ussd
)
{
@Inject
lateinit
var
pref
:
SharedPref
private
lateinit
var
mainViewModel
:
MainViewModel
private
var
_bn
:
Fragment
Action
Binding
?
=
null
private
var
_bn
:
Fragment
SendUssd
Binding
?
=
null
private
val
bn
get
()
=
_bn
?:
throw
NullPointerException
(
"cannot inflate"
)
private
lateinit
var
adapter
:
Action
Adapter
private
lateinit
var
adapter
:
Ussd
Adapter
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
adapter
=
Action
Adapter
(
pref
.
language
)
adapter
=
Ussd
Adapter
(
pref
.
language
)
mainViewModel
=
ViewModelProvider
(
requireActivity
())[
MainViewModel
::
class
.
java
]
arguments
?.
let
{
val
arg
=
it
.
getString
(
CONSTANTS
.
SERVICE
)
?:
""
...
...
@@ -40,7 +39,7 @@ class ActionFragment : BaseFragment(R.layout.fragment_action) {
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
_bn
=
Fragment
Action
Binding
.
bind
(
view
)
_bn
=
Fragment
SendUssd
Binding
.
bind
(
view
)
setUpUI
()
collects
()
...
...
app/src/main/java/com/mobiuz/app/dev/ui/service/ServiceAdapter.kt
→
app/src/main/java/com/mobiuz/app/dev/ui/service/Service
s
Adapter.kt
View file @
ae54b133
...
...
@@ -11,7 +11,7 @@ import com.mobiuz.app.dev.ui.global.ButtonClick
import
com.mobiuz.app.dev.utils.extensions.SingleBlock
import
com.mobiuz.app.dev.utils.extensions.getCurrentName
class
Service
Adapter
(
val
lang
:
String
)
:
RecyclerView
.
Adapter
<
Service
Adapter
.
VHolder
>()
{
class
Service
sAdapter
(
val
lang
:
String
)
:
RecyclerView
.
Adapter
<
Services
Adapter
.
VHolder
>()
{
private
val
list
:
ArrayList
<
ServiceData
>
by
lazy
{
ArrayList
()
}
private
var
listener
:
SingleBlock
<
ServiceData
>?
=
null
...
...
app/src/main/java/com/mobiuz/app/dev/ui/service/ServiceFragment.kt
→
app/src/main/java/com/mobiuz/app/dev/ui/service/Service
s
Fragment.kt
View file @
ae54b133
...
...
@@ -10,32 +10,31 @@ import androidx.navigation.fragment.NavHostFragment
import
com.google.gson.Gson
import
com.google.gson.reflect.TypeToken
import
com.mobiuz.app.R
import
com.mobiuz.app.databinding.FragmentServiceBinding
import
com.mobiuz.app.databinding.FragmentService
s
Binding
import
com.mobiuz.app.dev.MainViewModel
import
com.mobiuz.app.dev.model.ServiceData
import
com.mobiuz.app.dev.model.SharedPref
import
com.mobiuz.app.dev.ui.base.BaseFragment
import
com.mobiuz.app.dev.ui.global.CONSTANTS
import
dagger.hilt.android.AndroidEntryPoint
import
me.everything.android.ui.overscroll.OverScrollDecoratorHelper
import
javax.inject.Inject
@AndroidEntryPoint
class
Service
Fragment
:
BaseFragment
(
R
.
layout
.
fragment_service
)
{
class
Service
sFragment
:
BaseFragment
(
R
.
layout
.
fragment_services
)
{
@Inject
lateinit
var
pref
:
SharedPref
private
lateinit
var
mainViewModel
:
MainViewModel
private
var
_bn
:
FragmentServiceBinding
?
=
null
private
var
_bn
:
FragmentService
s
Binding
?
=
null
private
val
bn
get
()
=
_bn
?:
throw
NullPointerException
(
"cannot inflate"
)
private
lateinit
var
adapter
:
ServiceAdapter
private
lateinit
var
adapter
:
Service
s
Adapter
private
val
navController
:
NavController
by
lazy
(
LazyThreadSafetyMode
.
NONE
)
{
NavHostFragment
.
findNavController
(
this
)
}
private
var
type
=
""
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
mainViewModel
=
ViewModelProvider
(
requireActivity
())[
MainViewModel
::
class
.
java
]
adapter
=
ServiceAdapter
(
pref
.
language
)
adapter
=
Service
s
Adapter
(
pref
.
language
)
arguments
?.
let
{
type
=
it
.
getString
(
CONSTANTS
.
TYPE_SERVICE
)
?:
""
...
...
@@ -43,7 +42,7 @@ class ServiceFragment : BaseFragment(R.layout.fragment_service) {
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
_bn
=
FragmentServiceBinding
.
bind
(
view
)
_bn
=
FragmentService
s
Binding
.
bind
(
view
)
setUpUI
()
collects
()
...
...
app/src/main/java/com/mobiuz/app/dev/ui/service/
Fragment
PagerAdapter.kt
→
app/src/main/java/com/mobiuz/app/dev/ui/service/
Services
PagerAdapter.kt
View file @
ae54b133
...
...
@@ -2,17 +2,16 @@ package com.mobiuz.app.dev.ui.service
import
androidx.core.os.bundleOf
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.FragmentActivity
import
androidx.viewpager2.adapter.FragmentStateAdapter
import
com.google.gson.Gson
import
com.mobiuz.app.dev.model.ServiceData
import
com.mobiuz.app.dev.ui.global.CONSTANTS
class
Fragment
PagerAdapter
(
fragment
:
Fragment
,
private
val
service
:
ServiceData
):
FragmentStateAdapter
(
fragment
)
{
class
Services
PagerAdapter
(
fragment
:
Fragment
,
private
val
service
:
ServiceData
):
FragmentStateAdapter
(
fragment
)
{
override
fun
getItemCount
()
=
service
.
data
.
size
override
fun
createFragment
(
position
:
Int
):
Fragment
{
return
Action
Fragment
().
apply
{
return
SendUssd
Fragment
().
apply
{
this
.
arguments
=
bundleOf
(
CONSTANTS
.
SERVICE
to
Gson
().
toJson
(
service
.
data
[
position
]))
}
}
...
...
app/src/main/java/com/mobiuz/app/dev/ui/service/
Action
Adapter.kt
→
app/src/main/java/com/mobiuz/app/dev/ui/service/
Ussd
Adapter.kt
View file @
ae54b133
...
...
@@ -11,7 +11,7 @@ import com.mobiuz.app.dev.ui.global.ButtonClick
import
com.mobiuz.app.dev.utils.extensions.SingleBlock
import
com.mobiuz.app.dev.utils.extensions.getCurrentName
class
ActionAdapter
(
val
lang
:
String
)
:
RecyclerView
.
Adapter
<
Action
Adapter
.
VHolder
>()
{
class
UssdAdapter
(
val
lang
:
String
)
:
RecyclerView
.
Adapter
<
Ussd
Adapter
.
VHolder
>()
{
private
val
list
:
ArrayList
<
UssdData
>
by
lazy
{
ArrayList
()
}
private
var
listener
:
SingleBlock
<
UssdData
>?
=
null
...
...
app/src/main/java/com/mobiuz/app/dev/ui/service/UssdBottomSheetDialog.kt
View file @
ae54b133
package
com.mobiuz.app.dev.ui.service
import
android.Manifest
import
android.content.Context
import
android.content.Intent
import
android.net.Uri
import
android.os.Bundle
import
android.telephony.PhoneStateListener
import
android.telephony.TelephonyManager
import
android.util.Log
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
...
...
@@ -17,11 +13,9 @@ import com.mobiuz.app.databinding.BottomSheetUssdBinding
import
com.mobiuz.app.dev.model.SharedPref
import
com.mobiuz.app.dev.model.UssdData
import
com.mobiuz.app.dev.ui.global.ButtonClick
import
com.mobiuz.app.dev.utils.extensions.getCurrentName
import
com.mobiuz.app.dev.utils.extensions.checkPermission
import
com.mobiuz.app.dev.utils.extensions.
customLog
import
com.mobiuz.app.dev.utils.extensions.
getCurrentName
import
dagger.hilt.android.AndroidEntryPoint
import
dagger.hilt.android.qualifiers.ApplicationContext
import
javax.inject.Inject
@AndroidEntryPoint
...
...
@@ -53,7 +47,7 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
txtDescription
.
text
=
dec
txtCode
.
text
=
this
.
code
}
btn
Zapros
.
setOnClickListener
(
object
:
ButtonClick
()
{
btn
Sent
.
setOnClickListener
(
object
:
ButtonClick
()
{
override
fun
onSingleClick
(
v
:
View
?)
{
pref
.
isShowPin
=
false
checkPermission
(
Manifest
.
permission
.
CALL_PHONE
)
{
...
...
@@ -62,8 +56,8 @@ class UssdBottomSheetDialog(val data: UssdData) : BottomSheetDialogFragment() {
pref
.
isShowPin
=
false
var
ussd
=
""
data
.
code
.
forEach
{
if
(
it
==
'#'
)
ussd
+=
Uri
.
encode
(
"#"
)
else
ussd
+=
it
if
(
it
==
'#'
)
ussd
+=
Uri
.
encode
(
"#"
)
else
ussd
+=
it
}
val
intent
=
Intent
(
Intent
.
ACTION_CALL
,
Uri
.
parse
(
"tel:$ussd"
))
startActivity
(
intent
)
...
...
app/src/main/java/com/mobiuz/app/dev/ui/service/UssdFragment.kt
View file @
ae54b133
...
...
@@ -27,7 +27,7 @@ class UssdFragment : BaseFragment(R.layout.fragment_ussd) {
@Inject
lateinit
var
pref
:
SharedPref
private
var
service
:
ServiceData
?
=
null
private
lateinit
var
adapter
:
Fragment
PagerAdapter
private
lateinit
var
adapter
:
Services
PagerAdapter
private
val
navController
:
NavController
by
lazy
(
LazyThreadSafetyMode
.
NONE
)
{
NavHostFragment
.
findNavController
(
this
)
}
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
...
...
@@ -63,7 +63,7 @@ class UssdFragment : BaseFragment(R.layout.fragment_ussd) {
tabLayout
.
tabMode
=
MODE_SCROLLABLE
}
adapter
=
Fragment
PagerAdapter
(
this
@UssdFragment
,
it
)
adapter
=
Services
PagerAdapter
(
this
@UssdFragment
,
it
)
viewPager
.
adapter
=
adapter
TabLayoutMediator
(
bn
.
tabLayout
,
bn
.
viewPager
)
{
tab
,
pos
->
...
...
app/src/main/java/com/mobiuz/app/dev/utils/extensions/BottomNavExtensions.kt
0 → 100644
View file @
ae54b133
/*
* Copyright 2020, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
com.mobiuz.app.dev.utils.extensions
import
android.annotation.SuppressLint
import
android.content.Intent
import
android.util.SparseArray
import
androidx.fragment.app.FragmentManager
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.MutableLiveData
import
androidx.navigation.NavController
import
androidx.navigation.fragment.NavHostFragment
import
com.google.android.material.bottomnavigation.BottomNavigationView
import
com.mobiuz.app.R
import
com.mobiuz.app.dev.utils.extensions.BackButtonBehaviour.SHOW_STARTING_FRAGMENT
/**
* Manages the various graphs needed for a [BottomNavigationView].
*
* This sample is a workaround until the Navigation Component supports multiple back stacks.
*
* Your navGraphIds must have the same ids as your menuItem ids
*/
fun
BottomNavigationView
.
setupWithNavController
(
fragmentManager
:
FragmentManager
,
navGraphIds
:
List
<
Int
>,
backButtonBehaviour
:
BackButtonBehaviour
,
containerId
:
Int
,
firstItemId
:
Int
,
intent
:
Intent
):
LiveData
<
NavController
>
{
// Map of tags
val
graphIdToTagMap
=
SparseArray
<
String
>()
// Result. Mutable live data with the selected controlled
val
selectedNavController
=
MutableLiveData
<
NavController
>()
// First create a NavHostFragment for each NavGraph ID
navGraphIds
.
forEachIndexed
{
index
,
navGraphId
->
val
fragmentTag
=
getFragmentTag
(
index
)
// Find or create the Navigation host fragment
val
navHostFragment
=
obtainNavHostFragment
(
fragmentManager
,
fragmentTag
,
navGraphId
,
containerId
)
// Obtain its id
val
graphId
=
navHostFragment
.
navController
.
graph
.
id
// Save to the map
graphIdToTagMap
[
graphId
]
=
fragmentTag
// Attach or detach nav host fragment depending on whether it's the selected item.
if
(
this
.
selectedItemId
==
graphId
)
{
// Update livedata with the selected graph
selectedNavController
.
value
=
navHostFragment
.
navController
attachNavHostFragment
(
fragmentManager
,
navHostFragment
,
graphId
==
firstItemId
)
}
else
{
detachNavHostFragment
(
fragmentManager
,
navHostFragment
)
}
}
// Now connect selecting an item with swapping Fragments
var
selectedItemTag
=
graphIdToTagMap
[
this
.
selectedItemId
]
val
firstFragmentTag
=
graphIdToTagMap
[
firstItemId
]
var
isOnFirstFragment
=
selectedItemTag
==
firstFragmentTag
// When a navigation item is selected
setOnNavigationItemSelectedListener
{
item
->
// Don't do anything if the state is state has already been saved.
if
(
fragmentManager
.
isStateSaved
)
{
false
}
else
{
val
newlySelectedItemTag
=
graphIdToTagMap
[
item
.
itemId
]
if
(
selectedItemTag
!=
newlySelectedItemTag
)
{
// Pop everything above the first fragment (the "fixed start destination")
fragmentManager
.
popBackStack
(
firstFragmentTag
,
FragmentManager
.
POP_BACK_STACK_INCLUSIVE
)
val
selectedFragment
=
fragmentManager
.
findFragmentByTag
(
newlySelectedItemTag
)
as
NavHostFragment
if
(
backButtonBehaviour
==
SHOW_STARTING_FRAGMENT
)
{
// Back button goes to first
// Exclude the first fragment tag because it's always in the back stack.
if
(
firstFragmentTag
!=
newlySelectedItemTag
)
{
// Commit a transaction that cleans the back stack and adds the first fragment
// to it, creating the fixed started destination.
commitTransactionWithFixedStart
(
fragmentManager
,
selectedFragment
,
firstFragmentTag
)
}
}
else
{
// Back button goes to previous 'main' graph destination
commitTransaction
(
fragmentManager
,
selectedFragment
,
selectedItemTag
)
}
selectedItemTag
=
newlySelectedItemTag
isOnFirstFragment
=
selectedItemTag
==
firstFragmentTag
selectedNavController
.
value
=
selectedFragment
.
navController
true
}
else
{
false
}
}
}
// Optional: on item reselected, pop back stack to the destination of the graph
setupItemReselected
(
graphIdToTagMap
,
fragmentManager
)
// Optional: handle deep links
setupDeepLinks
(
navGraphIds
,
fragmentManager
,
containerId
,
intent
)
// Finally, ensure that we update our BottomNavigationView when the back stack changes
fragmentManager
.
addOnBackStackChangedListener
{
if
(!
isOnFirstFragment
&&
!
fragmentManager
.
isOnBackStack
(
firstFragmentTag
))
{
this
.
selectedItemId
=
firstItemId
}
// Reset the graph if the currentDestination is not valid (happens when the back
// stack is popped after using the back button).
selectedNavController
.
value
?.
let
{
controller
->
if
(
controller
.
currentDestination
==
null
)
{
controller
.
navigate
(
controller
.
graph
.
id
)
}
}
}
return
selectedNavController
}
private
fun
commitTransaction
(
fragmentManager
:
FragmentManager
,
selectedFragment
:
NavHostFragment
,
selectedItemTag
:
String
)
{
fragmentManager
.
beginTransaction
()
.
setCustomAnimations
(
R
.
anim
.
nav_default_enter_anim
,
R
.
anim
.
nav_default_exit_anim
,
R
.
anim
.
nav_default_pop_enter_anim
,
R
.
anim
.
nav_default_pop_exit_anim
)
.
attach
(
selectedFragment
)
.
setPrimaryNavigationFragment
(
selectedFragment
)
.
detach
(
fragmentManager
.
findFragmentByTag
(
selectedItemTag
)
!!
)
.
setReorderingAllowed
(
true
)
.
commit
()
}
private
fun
commitTransactionWithFixedStart
(
fragmentManager
:
FragmentManager
,
selectedFragment
:
NavHostFragment
,
firstFragmentTag
:
String
)
{
fragmentManager
.
beginTransaction
()
.
setCustomAnimations
(
R
.
anim
.
nav_default_enter_anim
,
R
.
anim
.
nav_default_exit_anim
,
R
.
anim
.
nav_default_pop_enter_anim
,
R
.
anim
.
nav_default_pop_exit_anim
)
.
attach
(
selectedFragment
)
.
setPrimaryNavigationFragment
(
selectedFragment
)
.
detach
(
fragmentManager
.
findFragmentByTag
(
firstFragmentTag
)
!!
)
.
addToBackStack
(
firstFragmentTag
)
.
setReorderingAllowed
(
true
)
.
commit
()
}
private
fun
BottomNavigationView
.
setupDeepLinks
(
navGraphIds
:
List
<
Int
>,
fragmentManager
:
FragmentManager
,
containerId
:
Int
,
intent
:
Intent
)
{
navGraphIds
.
forEachIndexed
{
index
,
navGraphId
->
val
fragmentTag
=
getFragmentTag
(
index
)
// Find or create the Navigation host fragment
val
navHostFragment
=
obtainNavHostFragment
(
fragmentManager
,
fragmentTag
,
navGraphId
,
containerId
)
// Handle Intent
if
(
navHostFragment
.
navController
.
handleDeepLink
(
intent
)
&&
selectedItemId
!=
navHostFragment
.
navController
.
graph
.
id
)
{
this
.
selectedItemId
=
navHostFragment
.
navController
.
graph
.
id
}
}
}
private
fun
BottomNavigationView
.
setupItemReselected
(
graphIdToTagMap
:
SparseArray
<
String
>,
fragmentManager
:
FragmentManager
)
{
setOnNavigationItemReselectedListener
{
item
->
val
newlySelectedItemTag
=
graphIdToTagMap
[
item
.
itemId
]
val
selectedFragment
=
fragmentManager
.
findFragmentByTag
(
newlySelectedItemTag
)
as
NavHostFragment
val
navController
=
selectedFragment
.
navController
// Pop the back stack to the start destination of the current navController graph
navController
.
popBackStack
(
navController
.
graph
.
startDestination
,
false
)
}
}
private
fun
detachNavHostFragment
(
fragmentManager
:
FragmentManager
,
navHostFragment
:
NavHostFragment
)
{
fragmentManager
.
beginTransaction
()
.
detach
(
navHostFragment
)
.
commitNow
()
}
private
fun
attachNavHostFragment
(
fragmentManager
:
FragmentManager
,
navHostFragment
:
NavHostFragment
,
isPrimaryNavFragment
:
Boolean
)
{
fragmentManager
.
beginTransaction
()
.
attach
(
navHostFragment
)
.
apply
{
if
(
isPrimaryNavFragment
)
{
setPrimaryNavigationFragment
(
navHostFragment
)
}
}
.
commitNow
()
}
private
fun
obtainNavHostFragment
(
fragmentManager
:
FragmentManager
,
fragmentTag
:
String
,
navGraphId
:
Int
,
containerId
:
Int
):
NavHostFragment
{
// If the Nav Host fragment exists, return it
val
existingFragment
=
fragmentManager
.
findFragmentByTag
(
fragmentTag
)
as
NavHostFragment
?
existingFragment
?.
let
{
return
it
}
// Otherwise, create it and return it.
val
navHostFragment
=
NavHostFragment
.
create
(
navGraphId
)
fragmentManager
.
beginTransaction
()
.
add
(
containerId
,
navHostFragment
,
fragmentTag
)
.
commitNow
()
return
navHostFragment
}
private
fun
FragmentManager
.
isOnBackStack
(
backStackName
:
String
):
Boolean
{
val
backStackCount
=
backStackEntryCount
for
(
index
in
0
until
backStackCount
)
{
if
(
getBackStackEntryAt
(
index
).
name
==
backStackName
)
{
return
true
}
}
return
false
}
private
fun
getFragmentTag
(
index
:
Int
)
=
"bottomNavigation#$index"
enum
class
BackButtonBehaviour
{
SHOW_STARTING_FRAGMENT
,
POP_HOST_FRAGMENT
}
app/src/main/res/layout/activity_test.xml
0 → 100644
View file @
ae54b133
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/white100"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:fitsSystemWindows=
"false"
>
<androidx.fragment.app.FragmentContainerView
android:id=
"@+id/test_container"
android:name=
"androidx.navigation.fragment.NavHostFragment"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
app:defaultNavHost=
"true"
app:navGraph=
"@navigation/nav_graph_test"
tools:context=
".dev.ui.auth.AuthActivity"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/bottom_sheet_ussd.xml
View file @
ae54b133
...
...
@@ -50,7 +50,7 @@
android:textSize=
"14sp"
/>
<Button
android:id=
"@+id/btn_
zapros
"
android:id=
"@+id/btn_
sent
"
style=
"@style/ButtonPrimary"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
...
...
app/src/main/res/layout/fragment_billing.xml
View file @
ae54b133
...
...
@@ -6,7 +6,7 @@
android:layout_height=
"match_parent"
android:fitsSystemWindows=
"true"
android:orientation=
"vertical"
tools:context=
".dev.BillingFragment"
>
tools:context=
".dev.
ui.home.
BillingFragment"
>
<com.google.android.material.appbar.MaterialToolbar
...
...
app/src/main/res/layout/fragment_check_phone.xml
View file @
ae54b133
...
...
@@ -85,7 +85,7 @@
android:layout_weight=
"1.5"
>
<Button
android:id=
"@+id/btn_
login
"
android:id=
"@+id/btn_
check_phone
"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
...
...
app/src/main/res/layout/fragment_main.xml
0 → 100644
View file @
ae54b133
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
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/drawerLayout"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:fitsSystemWindows=
"false"
tools:openDrawer=
"start"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/white100"
android:orientation=
"vertical"
>
<androidx.fragment.app.FragmentContainerView
android:id=
"@+id/nav_host_fragment"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_weight=
"1"
/>
<Button
android:id=
"@+id/btn_try_again"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"16dp"
android:layout_marginVertical=
"4dp"
android:text=
"@string/to_offline"
android:visibility=
"gone"
/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id=
"@+id/bottom_nav_view"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"@color/white"
app:elevation=
"4dp"
app:itemIconSize=
"24dp"
app:itemIconTint=
"@color/nav_item_tint"
app:itemTextColor=
"@color/nav_item_tint"
app:labelVisibilityMode=
"labeled"
app:menu=
"@menu/bottom_nav_menu"
/>
</LinearLayout>
<com.google.android.material.navigation.NavigationView
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_gravity=
"start"
android:background=
"@color/white100"
android:fitsSystemWindows=
"false"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:orientation=
"vertical"
android:layout_weight=
"1"
>
<androidx.core.widget.NestedScrollView
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:overScrollMode=
"never"
android:layout_weight=
"1"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:orientation=
"vertical"
>
<include
android:id=
"@+id/header"
layout=
"@layout/layout_home_header"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
<View
android:layout_width=
"match_parent"
android:layout_height=
"1dp"
android:layout_marginTop=
"@dimen/_4sdp"
android:background=
"@color/grey20"
/>
<LinearLayout
android:id=
"@+id/btn_safety"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginTop=
"@dimen/_14sdp"
android:background=
"?android:selectableItemBackground"
android:orientation=
"horizontal"
android:paddingVertical=
"18dp"
android:paddingStart=
"30dp"
android:paddingEnd=
"13dp"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@drawable/ic_safety"
/>
<TextView
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_weight=
"1"
android:text=
"@string/bezopasnost"
android:textSize=
"16sp"
android:textStyle=
"bold"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:src=
"@drawable/ic_baseline_keyboard_arrow_right"
/>
</LinearLayout>
<LinearLayout
android:id=
"@+id/btn_language"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginTop=
"@dimen/_10sdp"
android:background=
"?android:selectableItemBackground"
android:orientation=
"horizontal"
android:paddingVertical=
"10dp"
android:paddingStart=
"30dp"
android:paddingEnd=
"13dp"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:src=
"@drawable/ic_image_language"
/>
<LinearLayout
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_weight=
"1"
android:orientation=
"vertical"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:text=
"@string/language_app"
android:textSize=
"16sp"
android:textStyle=
"bold"
/>
<TextView
android:id=
"@+id/txt_language"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:text=
"Русский"
android:textColor=
"@color/grey80"
android:textSize=
"12sp"
/>
</LinearLayout>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:src=
"@drawable/ic_baseline_keyboard_arrow_right"
/>
</LinearLayout>
<LinearLayout
android:id=
"@+id/btn_support"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_marginTop=
"@dimen/_10sdp"
android:background=
"?android:selectableItemBackground"
android:orientation=
"horizontal"
android:paddingVertical=
"20dp"
android:paddingStart=
"30dp"
android:paddingEnd=
"10dp"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@drawable/ic_image_support"
/>
<TextView
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_weight=
"1"
android:text=
"@string/support"
android:textSize=
"16sp"
android:textStyle=
"bold"
/>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:src=
"@drawable/ic_baseline_keyboard_arrow_right"
/>
</LinearLayout>
<View
android:layout_width=
"match_parent"
android:layout_height=
"1dp"
android:layout_marginTop=
"@dimen/_14sdp"
android:background=
"@color/grey20"
/>
<TextView
android:id=
"@+id/txt_redact_data"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"32dp"
android:layout_marginTop=
"20dp"
android:background=
"?android:selectableItemBackground"
android:text=
"@string/oferta_finans"
android:textColor=
"@color/link"
android:textSize=
"14sp"
/>
<TextView
android:id=
"@+id/txt_public_oferta"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"32dp"
android:layout_marginBottom=
"20dp"
android:layout_marginTop=
"12dp"
android:background=
"?android:selectableItemBackground"
android:text=
"@string/public_oferta"
android:textColor=
"@color/link"
android:textSize=
"14sp"
/>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
<LinearLayout
android:id=
"@+id/btn_exit"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginBottom=
"16dp"
android:background=
"?android:selectableItemBackground"
android:orientation=
"horizontal"
android:paddingVertical=
"16dp"
android:paddingStart=
"30dp"
android:paddingEnd=
"16dp"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:src=
"@drawable/ic_log_out"
/>
<TextView
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
android:layout_marginStart=
"12dp"
android:layout_weight=
"1"
android:text=
"@string/exit"
android:textSize=
"17sp"
android:textStyle=
"bold"
/>
<TextView
android:id=
"@+id/txt_version"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
tools:text=
"0.01.1"
android:textColor=
"@color/grey80"
android:textSize=
"14sp"
/>
</LinearLayout>
</LinearLayout>
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
app/src/main/res/layout/fragment_register.xml
View file @
ae54b133
...
...
@@ -144,7 +144,7 @@
app:layout_constraintTop_toBottomOf=
"@id/txt_check_confirm"
/>
<Button
android:id=
"@+id/btn_
login
"
android:id=
"@+id/btn_
register
"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"bottom"
...
...
@@ -168,6 +168,6 @@
android:textColor=
"@color/grey80"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/btn_
login
"
/>
app:layout_constraintTop_toBottomOf=
"@id/btn_
register
"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_
action
.xml
→
app/src/main/res/layout/fragment_
send_ussd
.xml
View file @
ae54b133
File moved
app/src/main/res/layout/fragment_service.xml
→
app/src/main/res/layout/fragment_service
s
.xml
View file @
ae54b133
File moved
app/src/main/res/layout/fragment_verification.xml
View file @
ae54b133
...
...
@@ -172,12 +172,12 @@
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintHorizontal_chainStyle=
"packed"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@+id/btn_
logi
n"
/>
app:layout_constraintTop_toBottomOf=
"@+id/btn_
verificatio
n"
/>
<Button
android:id=
"@+id/btn_
logi
n"
android:id=
"@+id/btn_
verificatio
n"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"bottom"
...
...
app/src/main/res/layout/item_home.xml
View file @
ae54b133
...
...
@@ -44,6 +44,7 @@
<com.google.android.material.card.MaterialCardView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:id=
"@+id/btn_see_more"
android:layout_marginTop=
"16dp"
app:cardCornerRadius=
"4dp"
>
...
...
app/src/main/res/layout/layout_offline_bottom_sheet.xml
View file @
ae54b133
...
...
@@ -26,7 +26,7 @@
<Button
android:id=
"@+id/btn_
zapros
"
android:id=
"@+id/btn_
to_offline_activity
"
style=
"@style/ButtonPrimary"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
...
...
@@ -37,7 +37,7 @@
android:textSize=
"14sp"
/>
<TextView
android:id=
"@+id/btn_
otmena
"
android:id=
"@+id/btn_
cancel
"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center"
...
...
app/src/main/res/navigation/nav_graph_auth.xml
View file @
ae54b133
...
...
@@ -34,8 +34,20 @@
tools:layout=
"@layout/fragment_biometric"
/>
<fragment
android:id=
"@+id/
myV
erificationFragment"
android:id=
"@+id/
v
erificationFragment"
android:name=
"com.mobiuz.app.dev.ui.auth.verification.VerificationFragment"
android:label=
"MyVerificationFragment"
/>
<fragment
android:id=
"@+id/mainFragment"
android:name=
"com.mobiuz.app.dev.MainFragment"
android:label=
"MainFragment"
>
<deepLink
android:id=
"@+id/deepLink"
android:autoVerify=
"true"
app:uri=
"www.example.com/user/{userName}"
/>
<argument
android:name=
"userName"
app:argType=
"string"
/>
</fragment>
</navigation>
\ No newline at end of file
app/src/main/res/navigation/nav_graph_home.xml
View file @
ae54b133
...
...
@@ -44,7 +44,7 @@
<fragment
android:id=
"@+id/billingFragment"
android:name=
"com.mobiuz.app.dev.BillingFragment"
android:name=
"com.mobiuz.app.dev.
ui.home.
BillingFragment"
android:label=
"fragment_billing"
tools:layout=
"@layout/fragment_billing"
/>
...
...
app/src/main/res/navigation/nav_graph_offline.xml
View file @
ae54b133
...
...
@@ -7,8 +7,8 @@
<fragment
android:id=
"@+id/serviceFragment"
tools:layout=
"@layout/fragment_service"
android:name=
"com.mobiuz.app.dev.ui.service.ServiceFragment"
tools:layout=
"@layout/fragment_service
s
"
android:name=
"com.mobiuz.app.dev.ui.service.Service
s
Fragment"
android:label=
"MotionFragment"
/>
<fragment
android:id=
"@+id/ussdFragment"
...
...
app/src/main/res/navigation/nav_graph_services.xml
View file @
ae54b133
...
...
@@ -13,8 +13,8 @@
<fragment
android:id=
"@+id/serviceFragment"
tools:layout=
"@layout/fragment_service"
android:name=
"com.mobiuz.app.dev.ui.service.ServiceFragment"
tools:layout=
"@layout/fragment_service
s
"
android:name=
"com.mobiuz.app.dev.ui.service.Service
s
Fragment"
android:label=
"MotionFragment"
/>
<fragment
android:id=
"@+id/ussdFragment"
...
...
app/src/main/res/navigation/nav_graph_test.xml
0 → 100644
View file @
ae54b133
<?xml version="1.0" encoding="utf-8"?>
<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"
android:id=
"@+id/nav_graph_test"
app:startDestination=
"@id/mainFragment2"
>
<fragment
android:id=
"@+id/mainFragment2"
android:name=
"com.mobiuz.app.dev.MainFragment"
android:label=
"MainFragment"
/>
<fragment
android:id=
"@+id/installPinFragment"
android:name=
"com.mobiuz.app.dev.ui.auth.pin.InstallPinFragment"
android:label=
"PinFragment"
tools:layout=
"@layout/fragment_install_pin"
/>
<fragment
android:id=
"@+id/languageFragment"
android:name=
"com.mobiuz.app.dev.ui.settings.LanguageFragment"
android:label=
"fragment_language"
tools:layout=
"@layout/fragment_language"
/>
<fragment
android:id=
"@+id/supportFragment"
tools:layout=
"@layout/fragment_support"
android:name=
"com.mobiuz.app.dev.ui.settings.SupportFragment"
android:label=
"SupportFragment"
/>
<fragment
android:id=
"@+id/securityFragment"
android:name=
"com.mobiuz.app.dev.ui.settings.security.SecurityFragment"
android:label=
"fragment_safety"
tools:layout=
"@layout/fragment_security"
/>
<fragment
android:id=
"@+id/profileFragment"
android:name=
"com.mobiuz.app.dev.ui.settings.ProfileFragment"
android:label=
"fragment_profile"
tools:layout=
"@layout/fragment_profile"
/>
<fragment
android:id=
"@+id/changePasswordFragment"
android:name=
"com.mobiuz.app.dev.ui.settings.security.ChangePasswordFragment"
android:label=
"CurrentPasswordFragment"
/>
<fragment
android:id=
"@+id/billingFragment"
android:name=
"com.mobiuz.app.dev.ui.home.BillingFragment"
android:label=
"fragment_billing"
tools:layout=
"@layout/fragment_billing"
/>
<fragment
android:id=
"@+id/pinFragment"
tools:layout=
"@layout/fragment_pin"
android:name=
"com.mobiuz.app.dev.ui.global.PinFragment"
android:label=
"FullScreenFragment"
/>
</navigation>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment