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
0ce41d2e
Commit
0ce41d2e
authored
Dec 07, 2021
by
shohboz
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[ADD]
MUS-107
Feature, home page apis
parent
d1c07931
Changes
15
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
883 additions
and
236 deletions
+883
-236
MainActivity.kt
app/src/main/java/uz/ssd/mobiuz/MainActivity.kt
+19
-2
SplashActivity.kt
app/src/main/java/uz/ssd/mobiuz/SplashActivity.kt
+17
-4
ServerModule.kt
app/src/main/java/uz/ssd/mobiuz/di/ServerModule.kt
+4
-1
SharedPref.kt
app/src/main/java/uz/ssd/mobiuz/model/SharedPref.kt
+12
-8
ApiService.kt
app/src/main/java/uz/ssd/mobiuz/network/api/ApiService.kt
+5
-4
Customer.kt
app/src/main/java/uz/ssd/mobiuz/network/model/Customer.kt
+32
-0
UiStateList.kt
app/src/main/java/uz/ssd/mobiuz/network/model/UiStateList.kt
+1
-0
UiStateObject.kt
...rc/main/java/uz/ssd/mobiuz/network/model/UiStateObject.kt
+1
-0
FullScreenDialog.kt
app/src/main/java/uz/ssd/mobiuz/ui/auth/FullScreenDialog.kt
+100
-0
ExitDialog.kt
app/src/main/java/uz/ssd/mobiuz/ui/base/ExitDialog.kt
+55
-0
MoneyExt.kt
app/src/main/java/uz/ssd/mobiuz/utils/extensions/MoneyExt.kt
+32
-0
fragment_home.xml
app/src/main/res/layout/fragment_home.xml
+245
-217
home_home.xml
app/src/main/res/layout/home_home.xml
+318
-0
home_motion.xml
app/src/main/res/layout/home_motion.xml
+20
-0
home_motion_scene.xml
app/src/main/res/xml/home_motion_scene.xml
+22
-0
No files found.
app/src/main/java/uz/ssd/mobiuz/MainActivity.kt
View file @
0ce41d2e
...
@@ -2,17 +2,26 @@ package uz.ssd.mobiuz
...
@@ -2,17 +2,26 @@ package uz.ssd.mobiuz
import
android.graphics.Color
import
android.graphics.Color
import
android.os.Bundle
import
android.os.Bundle
import
android.view.View
import
androidx.appcompat.app.AppCompatActivity
import
androidx.appcompat.app.AppCompatActivity
import
androidx.lifecycle.LiveData
import
androidx.lifecycle.LiveData
import
androidx.navigation.NavController
import
androidx.navigation.NavController
import
com.google.android.material.bottomnavigation.BottomNavigationView
import
com.google.android.material.bottomnavigation.BottomNavigationView
import
dagger.hilt.android.AndroidEntryPoint
import
dagger.hilt.android.AndroidEntryPoint
import
uz.ssd.mobiuz.databinding.ActivityMainBinding
import
uz.ssd.mobiuz.databinding.ActivityMainBinding
import
uz.ssd.mobiuz.model.SharedPref
import
uz.ssd.mobiuz.ui.auth.FullScreenDialog
import
uz.ssd.mobiuz.utils.CONSTANTS
import
uz.ssd.mobiuz.utils.extensions.customLog
import
uz.ssd.mobiuz.utils.extensions.setupWithNavController
import
uz.ssd.mobiuz.utils.extensions.setupWithNavController
import
javax.inject.Inject
@AndroidEntryPoint
@AndroidEntryPoint
class
MainActivity
:
AppCompatActivity
()
{
class
MainActivity
:
AppCompatActivity
()
{
@Inject
lateinit
var
pref
:
SharedPref
private
var
_bn
:
ActivityMainBinding
?
=
null
private
var
_bn
:
ActivityMainBinding
?
=
null
private
val
bn
get
()
=
_bn
?:
throw
NullPointerException
(
"cannot inflate"
)
private
val
bn
get
()
=
_bn
?:
throw
NullPointerException
(
"cannot inflate"
)
...
@@ -30,8 +39,16 @@ class MainActivity : AppCompatActivity() {
...
@@ -30,8 +39,16 @@ class MainActivity : AppCompatActivity() {
setupBottomNavigationBar
()
setupBottomNavigationBar
()
}
}
intent
?.
let
{
val
arg
=
it
.
getStringExtra
(
CONSTANTS
.
FIRST
)
?:
""
if
(
arg
.
isEmpty
())
{
val
dialog
=
FullScreenDialog
()
dialog
.
setOnPinDoneListener
{
}
dialog
.
show
(
supportFragmentManager
,
"tag"
)
}
}
customLog
(
"token: ${pref.getUserToken()}"
)
}
}
private
fun
setupBottomNavigationBar
()
{
private
fun
setupBottomNavigationBar
()
{
try
{
try
{
...
...
app/src/main/java/uz/ssd/mobiuz/SplashActivity.kt
View file @
0ce41d2e
...
@@ -8,6 +8,7 @@ import dagger.hilt.android.AndroidEntryPoint
...
@@ -8,6 +8,7 @@ import dagger.hilt.android.AndroidEntryPoint
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.delay
import
uz.ssd.mobiuz.databinding.ActivitySplashBinding
import
uz.ssd.mobiuz.databinding.ActivitySplashBinding
import
uz.ssd.mobiuz.model.SharedPref
import
uz.ssd.mobiuz.model.SharedPref
import
uz.ssd.mobiuz.utils.CONSTANTS
import
javax.inject.Inject
import
javax.inject.Inject
@AndroidEntryPoint
@AndroidEntryPoint
...
@@ -26,11 +27,23 @@ class SplashActivity : AppCompatActivity() {
...
@@ -26,11 +27,23 @@ class SplashActivity : AppCompatActivity() {
lifecycleScope
.
launchWhenCreated
{
lifecycleScope
.
launchWhenCreated
{
delay
(
1000
)
delay
(
1000
)
if
(
pref
.
language
.
isEmpty
())
{
when
{
pref
.
language
.
isEmpty
()
->
{
startActivity
(
Intent
(
this
@SplashActivity
,
LanguageActivity
::
class
.
java
))
startActivity
(
Intent
(
this
@SplashActivity
,
LanguageActivity
::
class
.
java
))
}
else
{
}
!
pref
.
isRegistered
->
{
startActivity
(
Intent
(
this
@SplashActivity
,
AuthActivity
::
class
.
java
))
startActivity
(
Intent
(
this
@SplashActivity
,
AuthActivity
::
class
.
java
))
}
}
pref
.
pin_code
.
isEmpty
()
->
{
startActivity
(
Intent
(
this
@SplashActivity
,
AuthActivity
::
class
.
java
).
putExtra
(
CONSTANTS
.
TYPE_AUTH
,
CONSTANTS
.
PIN_CODE
))
}
else
->
{
startActivity
(
Intent
(
this
@SplashActivity
,
MainActivity
::
class
.
java
))
}
}
finish
()
finish
()
}
}
}
}
...
...
app/src/main/java/uz/ssd/mobiuz/di/ServerModule.kt
View file @
0ce41d2e
...
@@ -14,9 +14,12 @@ import okhttp3.logging.HttpLoggingInterceptor
...
@@ -14,9 +14,12 @@ import okhttp3.logging.HttpLoggingInterceptor
import
retrofit2.Retrofit
import
retrofit2.Retrofit
import
retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import
retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory
import
retrofit2.converter.gson.GsonConverterFactory
import
retrofit2.converter.gson.GsonConverterFactory
import
uz.ssd.mobiuz.BuildConfig
import
uz.ssd.mobiuz.model.SharedPref
import
uz.ssd.mobiuz.model.SharedPref
import
uz.ssd.mobiuz.network.api.ApiService
import
uz.ssd.mobiuz.network.api.ApiService
import
uz.ssd.mobiuz.utils.CONSTANTS
import
uz.ssd.mobiuz.utils.CONSTANTS
import
uz.ssd.mobiuz.utils.Utils
import
java.util.*
import
javax.inject.Singleton
import
javax.inject.Singleton
@Module
@Module
...
@@ -52,7 +55,7 @@ class ServerModule {
...
@@ -52,7 +55,7 @@ class ServerModule {
val
builder
=
chain
.
request
().
newBuilder
()
val
builder
=
chain
.
request
().
newBuilder
()
builder
.
header
(
"Content-Type"
,
"application/x-www-form-urlencoded"
)
builder
.
header
(
"Content-Type"
,
"application/x-www-form-urlencoded"
)
builder
.
header
(
"Lang"
,
sharedPref
.
language
)
builder
.
header
(
"Lang"
,
sharedPref
.
language
)
builder
.
header
(
"device-id"
,
Build
.
DEVICE
)
builder
.
header
(
"device-id"
,
Utils
.
getDeviceName
()
)
builder
.
header
(
"Accept"
,
"application/json"
)
builder
.
header
(
"Accept"
,
"application/json"
)
builder
.
header
(
"Authorization"
,
"Bearer ${sharedPref.getUserToken()}"
)
builder
.
header
(
"Authorization"
,
"Bearer ${sharedPref.getUserToken()}"
)
chain
.
proceed
(
builder
.
build
())
chain
.
proceed
(
builder
.
build
())
...
...
app/src/main/java/uz/ssd/mobiuz/model/SharedPref.kt
View file @
0ce41d2e
...
@@ -17,14 +17,6 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
...
@@ -17,14 +17,6 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
return
mySharedPref
.
getString
(
"device_token"
,
null
)
return
mySharedPref
.
getString
(
"device_token"
,
null
)
}
}
fun
setUserId
(
id
:
Int
)
{
mySharedPref
.
edit
().
putInt
(
"user_id"
,
id
).
apply
()
}
fun
getUserId
():
Int
{
return
mySharedPref
.
getInt
(
"user_id"
,
0
)
}
fun
setUserToken
(
token
:
String
?)
{
fun
setUserToken
(
token
:
String
?)
{
mySharedPref
.
edit
().
putString
(
"user_token"
,
token
).
apply
()
mySharedPref
.
edit
().
putString
(
"user_token"
,
token
).
apply
()
}
}
...
@@ -45,4 +37,16 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
...
@@ -45,4 +37,16 @@ class SharedPref @Inject constructor(@ApplicationContext context: Context) {
mySharedPref
.
edit
().
putString
(
::
pin_code
.
name
,
value
).
apply
()
mySharedPref
.
edit
().
putString
(
::
pin_code
.
name
,
value
).
apply
()
}
}
var
isRegistered
:
Boolean
get
()
=
mySharedPref
.
getBoolean
(
"isRegistered"
,
false
)
set
(
value
)
{
mySharedPref
.
edit
().
putBoolean
(
"isRegistered"
,
value
).
apply
()
}
var
userPhone
:
String
get
()
=
mySharedPref
.
getString
(
::
userPhone
.
name
,
""
)
?:
""
set
(
value
)
{
mySharedPref
.
edit
().
putString
(
::
userPhone
.
name
,
value
).
apply
()
}
}
}
\ No newline at end of file
app/src/main/java/uz/ssd/mobiuz/network/api/ApiService.kt
View file @
0ce41d2e
...
@@ -3,10 +3,8 @@ package uz.ssd.mobiuz.network.api
...
@@ -3,10 +3,8 @@ package uz.ssd.mobiuz.network.api
import
retrofit2.http.Body
import
retrofit2.http.Body
import
retrofit2.http.POST
import
retrofit2.http.POST
import
uz.ssd.mobiuz.model.UserAuth
import
uz.ssd.mobiuz.model.UserAuth
import
uz.ssd.mobiuz.network.model.Action
import
uz.ssd.mobiuz.network.model.*
import
uz.ssd.mobiuz.network.model.GenerateToken
import
uz.ssd.mobiuz.network.model.ResponseList
import
uz.ssd.mobiuz.network.model.ResponseObject
interface
ApiService
{
interface
ApiService
{
...
@@ -29,4 +27,7 @@ interface ApiService {
...
@@ -29,4 +27,7 @@ interface ApiService {
suspend
fun
checkSMSCode
(
suspend
fun
checkSMSCode
(
@Body
req
:
UserAuth
@Body
req
:
UserAuth
):
ResponseObject
<
GenerateToken
>
):
ResponseObject
<
GenerateToken
>
@POST
(
"main/index"
)
suspend
fun
mainIndex
():
ResponseObject
<
Customer
>
}
}
\ No newline at end of file
app/src/main/java/uz/ssd/mobiuz/network/model/Customer.kt
0 → 100644
View file @
0ce41d2e
package
uz.ssd.mobiuz.network.model
data class
Customer
(
var
customer
:
CustomerData
)
data class
CustomerData
(
var
info
:
CustomerInfo
,
var
name
:
String
)
data class
CustomerInfo
(
var
balance
:
CustomerInfoBalance
,
var
counters
:
CustomerInfoCounters
)
data class
CustomerInfoBalance
(
var
amount
:
String
,
var
currency
:
String
)
data class
CustomerInfoCounters
(
var
BYTE
:
CodeValueUnit
,
var
ITEM
:
CodeValueUnit
,
var
SECOND
:
CodeValueUnit
)
data class
CodeValueUnit
(
var
code
:
String
,
var
value
:
Int
,
var
unit
:
String
,
)
\ No newline at end of file
app/src/main/java/uz/ssd/mobiuz/network/model/UiStateList.kt
View file @
0ce41d2e
...
@@ -4,6 +4,7 @@ package uz.ssd.mobiuz.network.model
...
@@ -4,6 +4,7 @@ package uz.ssd.mobiuz.network.model
sealed
class
UiStateList
<
out
T
>
{
sealed
class
UiStateList
<
out
T
>
{
data class
SUCCESS
<
out
T
>(
val
data
:
List
<
T
>)
:
UiStateList
<
T
>()
data class
SUCCESS
<
out
T
>(
val
data
:
List
<
T
>)
:
UiStateList
<
T
>()
data class
ERROR
(
val
message
:
String
,
var
fromServer
:
Boolean
=
false
)
:
UiStateList
<
Nothing
>()
data class
ERROR
(
val
message
:
String
,
var
fromServer
:
Boolean
=
false
)
:
UiStateList
<
Nothing
>()
data class
ERRORS
(
val
errors
:
List
<
Errors
>)
:
UiStateObject
<
Nothing
>()
object
LOADING
:
UiStateList
<
Nothing
>()
object
LOADING
:
UiStateList
<
Nothing
>()
object
EMPTY
:
UiStateList
<
Nothing
>()
object
EMPTY
:
UiStateList
<
Nothing
>()
}
}
\ No newline at end of file
app/src/main/java/uz/ssd/mobiuz/network/model/UiStateObject.kt
View file @
0ce41d2e
...
@@ -3,6 +3,7 @@ package uz.ssd.mobiuz.network.model
...
@@ -3,6 +3,7 @@ package uz.ssd.mobiuz.network.model
sealed
class
UiStateObject
<
out
T
>
{
sealed
class
UiStateObject
<
out
T
>
{
data class
SUCCESS
<
out
T
>(
val
data
:
T
)
:
UiStateObject
<
T
>()
data class
SUCCESS
<
out
T
>(
val
data
:
T
)
:
UiStateObject
<
T
>()
data class
ERROR
(
val
message
:
String
,
var
fromServer
:
Boolean
=
false
)
:
UiStateObject
<
Nothing
>()
data class
ERROR
(
val
message
:
String
,
var
fromServer
:
Boolean
=
false
)
:
UiStateObject
<
Nothing
>()
data class
ERRORS
(
val
errors
:
List
<
Errors
>)
:
UiStateObject
<
Nothing
>()
object
LOADING
:
UiStateObject
<
Nothing
>()
object
LOADING
:
UiStateObject
<
Nothing
>()
object
EMPTY
:
UiStateObject
<
Nothing
>()
object
EMPTY
:
UiStateObject
<
Nothing
>()
}
}
\ No newline at end of file
app/src/main/java/uz/ssd/mobiuz/ui/auth/FullScreenDialog.kt
0 → 100644
View file @
0ce41d2e
package
uz.ssd.mobiuz.ui.auth
import
android.os.Bundle
import
android.view.View
import
android.view.animation.AnimationUtils
import
android.widget.TextView
import
androidx.core.view.isVisible
import
androidx.fragment.app.DialogFragment
import
androidx.lifecycle.lifecycleScope
import
androidx.recyclerview.widget.LinearLayoutManager
import
dagger.hilt.android.AndroidEntryPoint
import
kotlinx.coroutines.delay
import
uz.ssd.mobiuz.R
import
uz.ssd.mobiuz.databinding.FragmentPinDialogBinding
import
uz.ssd.mobiuz.model.PinData
import
uz.ssd.mobiuz.model.SharedPref
import
uz.ssd.mobiuz.utils.extensions.SingleBlock
import
javax.inject.Inject
@AndroidEntryPoint
class
FullScreenDialog
:
DialogFragment
(
R
.
layout
.
fragment_pin_dialog
)
{
@Inject
lateinit
var
pref
:
SharedPref
private
var
_bn
:
FragmentPinDialogBinding
?
=
null
private
val
bn
get
()
=
_bn
?:
throw
NullPointerException
(
"cannot inflate"
)
private
val
data
=
ArrayList
<
PinData
>()
private
val
pinAdapter
=
PinAdapter
()
private
var
listener
:
SingleBlock
<
Unit
>?
=
null
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
setStyle
(
STYLE_NO_TITLE
,
R
.
style
.
FullScreenDialog
)
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
_bn
=
FragmentPinDialogBinding
.
bind
(
view
)
setUpUI
()
}
fun
setUpUI
()
{
bn
.
apply
{
loadData
()
rvPin
.
layoutManager
=
LinearLayoutManager
(
requireContext
(),
LinearLayoutManager
.
HORIZONTAL
,
false
)
rvPin
.
adapter
=
pinAdapter
txtNotPin
.
isVisible
=
false
pinAdapter
.
setOnDoneListener
{
lifecycleScope
.
launchWhenCreated
{
delay
(
200
)
if
(
pref
.
pin_code
==
it
)
{
listener
?.
invoke
(
Unit
)
txtNotPin
.
isVisible
=
false
dismiss
()
}
else
{
cardPin
.
startAnimation
(
AnimationUtils
.
loadAnimation
(
context
,
R
.
anim
.
shake
))
txtNotPin
.
isVisible
=
true
}
}
}
for
(
i
in
0
until
btnViewGroup
.
childCount
)
{
btnViewGroup
.
getChildAt
(
i
).
setOnClickListener
{
if
(
it
.
id
==
R
.
id
.
btn_remove
)
{
pinAdapter
.
removeItem
()
txtNotPin
.
isVisible
=
false
}
else
{
val
text
=
it
as
TextView
pinAdapter
.
addItem
(
text
.
text
.
toString
().
toInt
())
}
}
}
}
}
private
fun
loadData
()
{
data
.
clear
()
for
(
i
in
0
..
3
)
{
data
.
add
(
PinData
(-
1
))
}
pinAdapter
.
submitList
(
data
)
}
fun
setOnPinDoneListener
(
block
:
SingleBlock
<
Unit
>)
{
listener
=
block
}
override
fun
onDestroy
()
{
_bn
=
null
super
.
onDestroy
()
}
}
app/src/main/java/uz/ssd/mobiuz/ui/base/ExitDialog.kt
0 → 100644
View file @
0ce41d2e
package
uz.ssd.mobiuz.ui.base
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.View
import
android.view.ViewGroup
import
androidx.fragment.app.DialogFragment
import
uz.ssd.mobiuz.R
import
uz.ssd.mobiuz.databinding.LayoutExitBinding
import
uz.ssd.mobiuz.utils.extensions.SingleBlock
class
ExitDialog
:
DialogFragment
()
{
private
var
doneListener
:
SingleBlock
<
Boolean
>?
=
null
private
var
_bn
:
LayoutExitBinding
?
=
null
private
val
bn
get
()
=
_bn
!!
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
setStyle
(
STYLE_NO_TITLE
,
R
.
style
.
CustomDialog
)
}
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
{
_bn
=
LayoutExitBinding
.
inflate
(
inflater
,
container
,
false
)
return
bn
.
root
}
override
fun
onViewCreated
(
view
:
View
,
savedInstanceState
:
Bundle
?)
{
super
.
onViewCreated
(
view
,
savedInstanceState
)
isCancelable
=
false
bn
.
apply
{
btnCancel
.
setOnClickListener
{
dismiss
()
}
btnDone
.
setOnClickListener
{
doneListener
?.
invoke
(
true
)
dismiss
()
}
}
}
fun
setOnDoneListener
(
block
:
SingleBlock
<
Boolean
>)
{
doneListener
=
block
}
override
fun
onDestroy
()
{
super
.
onDestroy
()
_bn
=
null
}
}
\ No newline at end of file
app/src/main/java/uz/ssd/mobiuz/utils/extensions/MoneyExt.kt
0 → 100644
View file @
0ce41d2e
package
uz.ssd.mobiuz.utils.extensions
import
java.text.DecimalFormat
import
java.text.DecimalFormatSymbols
import
java.util.*
fun
Number
.
toMoneyFormat
():
String
{
return
String
.
format
(
DecimalFormat
(
"#,###.##"
,
DecimalFormatSymbols
(
Locale
(
"ru"
,
"RU"
))
).
format
(
this
)
)
}
fun
String
.
toMoneyFormat
():
String
{
return
try
{
val
number
=
this
.
toFloat
()
number
.
toMoneyFormat
()
}
catch
(
e
:
Exception
)
{
this
}
}
fun
String
.
currencyFormat
():
String
{
val
format
=
this
.
replace
(
","
,
""
)
return
DecimalFormat
(
"###,###,###"
).
format
(
format
.
toDouble
())
}
app/src/main/res/layout/fragment_home.xml
View file @
0ce41d2e
This diff is collapsed.
Click to expand it.
app/src/main/res/layout/home_home.xml
0 → 100644
View file @
0ce41d2e
This diff is collapsed.
Click to expand it.
app/src/main/res/layout/home_motion.xml
0 → 100644
View file @
0ce41d2e
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:id=
"@+id/motionLayout"
android:orientation=
"vertical"
android:scrollbars=
"vertical"
android:fitsSystemWindows=
"false"
app:layoutDescription=
"@xml/home_motion_scene"
>
<ImageView
android:id=
"@+id/image"
android:layout_width=
"match_parent"
android:layout_height=
"@dimen/_240sdp"
android:src=
"@drawable/bgn_home"
app:layout_constraintTop_toTopOf=
"parent"
/>
</androidx.constraintlayout.motion.widget.MotionLayout>
\ No newline at end of file
app/src/main/res/xml/home_motion_scene.xml
0 → 100644
View file @
0ce41d2e
<?xml version="1.0" encoding="utf-8"?>
<MotionScene
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:motion=
"http://schemas.android.com/apk/res-auto"
>
<Transition
motion:constraintSetEnd=
"@+id/end"
motion:constraintSetStart=
"@id/start"
motion:motionInterpolator=
"linear"
motion:duration=
"1000"
>
<KeyFrameSet>
</KeyFrameSet>
</Transition>
<ConstraintSet
android:id=
"@+id/start"
>
</ConstraintSet>
<ConstraintSet
android:id=
"@+id/end"
>
</ConstraintSet>
</MotionScene>
\ 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