Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
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
Administrator
Magisk
Commits
c79b79b3
Commit
c79b79b3
authored
Dec 06, 2019
by
Viktor De Pasquale
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleaned up extensions and utilities in redesign
parent
8a03c366
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
148 additions
and
150 deletions
+148
-150
CompatHelpers.kt
...ava/com/topjohnwu/magisk/redesign/compat/CompatHelpers.kt
+43
-0
HideFragment.kt
...n/java/com/topjohnwu/magisk/redesign/hide/HideFragment.kt
+2
-80
HideViewModel.kt
.../java/com/topjohnwu/magisk/redesign/hide/HideViewModel.kt
+2
-10
HomeViewModel.kt
.../java/com/topjohnwu/magisk/redesign/home/HomeViewModel.kt
+7
-16
LogFragment.kt
...ain/java/com/topjohnwu/magisk/redesign/log/LogFragment.kt
+1
-1
LogViewModel.kt
...in/java/com/topjohnwu/magisk/redesign/log/LogViewModel.kt
+2
-2
ModuleFragment.kt
...va/com/topjohnwu/magisk/redesign/module/ModuleFragment.kt
+1
-1
ModuleViewModel.kt
...a/com/topjohnwu/magisk/redesign/module/ModuleViewModel.kt
+1
-19
SettingsViewModel.kt
...m/topjohnwu/magisk/redesign/settings/SettingsViewModel.kt
+3
-3
SuperuserViewModel.kt
...topjohnwu/magisk/redesign/superuser/SuperuserViewModel.kt
+3
-10
ThemeViewModel.kt
...ava/com/topjohnwu/magisk/redesign/theme/ThemeViewModel.kt
+0
-7
MotionRevealHelper.kt
...ain/java/com/topjohnwu/magisk/utils/MotionRevealHelper.kt
+82
-0
MagiskDialog.kt
app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt
+1
-1
No files found.
app/src/main/java/com/topjohnwu/magisk/redesign/compat/CompatHelpers.kt
0 → 100644
View file @
c79b79b3
package
com.topjohnwu.magisk.redesign.compat
import
androidx.databinding.ViewDataBinding
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.utils.DiffObservableList
import
com.topjohnwu.magisk.utils.FilterableDiffObservableList
import
me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter
import
me.tatarka.bindingcollectionadapter2.ItemBinding
import
me.tatarka.bindingcollectionadapter2.OnItemBind
inline
fun
<
T
:
ComparableRvItem
<*
>
>
diffListOf
(
vararg
newItems
:
T
)
=
DiffObservableList
(
object
:
DiffObservableList
.
Callback
<
T
>
{
override
fun
areItemsTheSame
(
oldItem
:
T
,
newItem
:
T
)
=
oldItem
.
genericItemSameAs
(
newItem
)
override
fun
areContentsTheSame
(
oldItem
:
T
,
newItem
:
T
)
=
oldItem
.
genericContentSameAs
(
newItem
)
}).
also
{
it
.
update
(
newItems
.
toList
())
}
inline
fun
<
T
:
ComparableRvItem
<*
>
>
filterableListOf
(
vararg
newItems
:
T
)
=
FilterableDiffObservableList
(
object
:
DiffObservableList
.
Callback
<
T
>
{
override
fun
areItemsTheSame
(
oldItem
:
T
,
newItem
:
T
)
=
oldItem
.
genericItemSameAs
(
newItem
)
override
fun
areContentsTheSame
(
oldItem
:
T
,
newItem
:
T
)
=
oldItem
.
genericContentSameAs
(
newItem
)
}).
also
{
it
.
update
(
newItems
.
toList
())
}
fun
<
T
:
ComparableRvItem
<*
>
>
adapterOf
()
=
object
:
BindingRecyclerViewAdapter
<
T
>()
{
override
fun
onBindBinding
(
binding
:
ViewDataBinding
,
variableId
:
Int
,
layoutRes
:
Int
,
position
:
Int
,
item
:
T
)
{
super
.
onBindBinding
(
binding
,
variableId
,
layoutRes
,
position
,
item
)
item
.
onBindingBound
(
binding
)
}
}
inline
fun
<
T
:
ComparableRvItem
<*
>
>
itemBindingOf
(
crossinline
body
:
(
ItemBinding
<*>)
->
Unit
=
{}
)
=
OnItemBind
<
T
>
{
itemBinding
,
_
,
item
->
item
.
bind
(
itemBinding
)
body
(
itemBinding
)
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/redesign/hide/HideFragment.kt
View file @
c79b79b3
package
com.topjohnwu.magisk.redesign.hide
import
android.animation.Animator
import
android.animation.AnimatorSet
import
android.animation.ObjectAnimator
import
android.content.Context
import
android.graphics.Insets
import
android.os.Bundle
...
...
@@ -10,23 +7,15 @@ import android.view.Menu
import
android.view.MenuInflater
import
android.view.MenuItem
import
android.view.View
import
androidx.core.animation.addListener
import
androidx.core.view.isInvisible
import
androidx.core.view.isVisible
import
androidx.core.view.marginBottom
import
androidx.core.view.marginEnd
import
androidx.interpolator.view.animation.FastOutSlowInInterpolator
import
androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.RecyclerView
import
com.google.android.material.circularreveal.CircularRevealCompat
import
com.google.android.material.circularreveal.CircularRevealWidget
import
com.google.android.material.floatingactionbutton.FloatingActionButton
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentHideMd2Binding
import
com.topjohnwu.magisk.redesign.compat.CompatFragment
import
com.topjohnwu.magisk.redesign.compat.hideKeyboard
import
com.topjohnwu.magisk.utils.MotionRevealHelper
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
kotlin.math.hypot
class
HideFragment
:
CompatFragment
<
HideViewModel
,
FragmentHideMd2Binding
>()
{
...
...
@@ -95,70 +84,3 @@ class HideFragment : CompatFragment<HideViewModel, FragmentHideMd2Binding>() {
}
}
\ No newline at end of file
object
MotionRevealHelper
{
fun
<
CV
>
withViews
(
revealable
:
CV
,
fab
:
FloatingActionButton
,
expanded
:
Boolean
)
where
CV
:
CircularRevealWidget
,
CV
:
View
{
revealable
.
revealInfo
=
revealable
.
createRevealInfo
(!
expanded
)
val
revealInfo
=
revealable
.
createRevealInfo
(
expanded
)
val
revealAnim
=
revealable
.
createRevealAnim
(
revealInfo
)
val
moveAnim
=
fab
.
createMoveAnim
(
revealInfo
)
AnimatorSet
().
also
{
if
(
expanded
)
{
it
.
play
(
revealAnim
).
after
(
moveAnim
)
}
else
{
it
.
play
(
moveAnim
).
after
(
revealAnim
)
}
}.
start
()
}
private
fun
<
CV
>
CV
.
createRevealAnim
(
revealInfo
:
CircularRevealWidget
.
RevealInfo
):
Animator
where
CV
:
CircularRevealWidget
,
CV
:
View
=
CircularRevealCompat
.
createCircularReveal
(
this
,
revealInfo
.
centerX
,
revealInfo
.
centerY
,
revealInfo
.
radius
).
apply
{
addListener
(
onStart
=
{
isVisible
=
true
},
onEnd
=
{
if
(
revealInfo
.
radius
==
0f
)
{
isInvisible
=
true
}
})
}
private
fun
FloatingActionButton
.
createMoveAnim
(
revealInfo
:
CircularRevealWidget
.
RevealInfo
):
Animator
=
AnimatorSet
().
also
{
it
.
interpolator
=
FastOutSlowInInterpolator
()
it
.
addListener
(
onStart
=
{
show
()
},
onEnd
=
{
if
(
revealInfo
.
radius
!=
0f
)
hide
()
})
val
maxX
=
revealInfo
.
centerX
-
marginEnd
-
measuredWidth
/
2f
val
targetX
=
if
(
revealInfo
.
radius
==
0f
)
0f
else
-
maxX
val
moveX
=
ObjectAnimator
.
ofFloat
(
this
,
View
.
TRANSLATION_X
,
targetX
)
val
maxY
=
revealInfo
.
centerY
-
marginBottom
-
measuredHeight
/
2f
val
targetY
=
if
(
revealInfo
.
radius
==
0f
)
0f
else
-
maxY
val
moveY
=
ObjectAnimator
.
ofFloat
(
this
,
View
.
TRANSLATION_Y
,
targetY
)
it
.
playTogether
(
moveX
,
moveY
)
}
private
fun
View
.
createRevealInfo
(
expanded
:
Boolean
):
CircularRevealWidget
.
RevealInfo
{
val
cX
=
measuredWidth
/
2f
val
cY
=
measuredHeight
/
2f
-
paddingBottom
return
CircularRevealWidget
.
RevealInfo
(
cX
,
cY
,
if
(
expanded
)
hypot
(
cX
,
cY
)
else
0f
)
}
}
app/src/main/java/com/topjohnwu/magisk/redesign/hide/HideViewModel.kt
View file @
c79b79b3
...
...
@@ -4,7 +4,6 @@ import android.content.pm.ApplicationInfo
import
androidx.databinding.Bindable
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.toggle
import
com.topjohnwu.magisk.model.entity.HideAppInfo
...
...
@@ -15,9 +14,8 @@ import com.topjohnwu.magisk.model.entity.recycler.HideItem
import
com.topjohnwu.magisk.model.entity.recycler.HideProcessItem
import
com.topjohnwu.magisk.redesign.compat.CompatViewModel
import
com.topjohnwu.magisk.redesign.compat.Queryable
import
com.topjohnwu.magisk.redesign.home.itemBindingOf
import
com.topjohnwu.magisk.utils.DiffObservableList
import
com.topjohnwu.magisk.utils.FilterableDiffObservableList
import
com.topjohnwu.magisk.redesign.compat.filterableListOf
import
com.topjohnwu.magisk.redesign.compat.itemBindingOf
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.currentLocale
...
...
@@ -127,9 +125,3 @@ class HideViewModel(
}
inline
fun
<
T
:
ComparableRvItem
<*
>
>
filterableListOf
(
vararg
newItems
:
T
)
=
FilterableDiffObservableList
(
object
:
DiffObservableList
.
Callback
<
T
>
{
override
fun
areItemsTheSame
(
oldItem
:
T
,
newItem
:
T
)
=
oldItem
.
genericItemSameAs
(
newItem
)
override
fun
areContentsTheSame
(
oldItem
:
T
,
newItem
:
T
)
=
oldItem
.
genericContentSameAs
(
newItem
)
}).
also
{
it
.
update
(
newItems
.
toList
())
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/redesign/home/HomeViewModel.kt
View file @
c79b79b3
...
...
@@ -7,7 +7,6 @@ import com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.extensions.*
import
com.topjohnwu.magisk.model.download.RemoteFileService
import
com.topjohnwu.magisk.model.entity.MagiskJson
...
...
@@ -24,12 +23,11 @@ import com.topjohnwu.magisk.model.events.dialog.UninstallDialog
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.model.observer.Observer
import
com.topjohnwu.magisk.redesign.compat.CompatViewModel
import
com.topjohnwu.magisk.redesign.compat.itemBindingOf
import
com.topjohnwu.magisk.ui.home.MagiskState
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.superuser.Shell
import
me.tatarka.bindingcollectionadapter2.BR
import
me.tatarka.bindingcollectionadapter2.ItemBinding
import
me.tatarka.bindingcollectionadapter2.OnItemBind
import
kotlin.math.roundToInt
class
HomeViewModel
(
...
...
@@ -179,6 +177,12 @@ class HomeViewModel(
}
}
private
fun
String
.
clipVersion
(
other
:
String
=
""
):
String
{
val
thisVersion
=
substringBefore
(
'-'
)
val
otherVersion
=
other
.
substringBefore
(
'-'
)
return
if
(
thisVersion
!=
otherVersion
)
thisVersion
else
substringAfter
(
'-'
)
}
}
@Suppress
(
"unused"
)
...
...
@@ -190,16 +194,3 @@ val ManagerJson.isUpdateChannelCorrect
get
()
=
versionCode
>
0
val
ManagerJson
.
isObsolete
get
()
=
BuildConfig
.
VERSION_CODE
<
versionCode
fun
String
.
clipVersion
(
other
:
String
=
""
):
String
{
val
thisVersion
=
substringBefore
(
'-'
)
val
otherVersion
=
other
.
substringBefore
(
'-'
)
return
if
(
thisVersion
!=
otherVersion
)
thisVersion
else
substringAfter
(
'-'
)
}
inline
fun
<
T
:
ComparableRvItem
<*
>
>
itemBindingOf
(
crossinline
body
:
(
ItemBinding
<*>)
->
Unit
=
{}
)
=
OnItemBind
<
T
>
{
itemBinding
,
_
,
item
->
item
.
bind
(
itemBinding
)
body
(
itemBinding
)
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/redesign/log/LogFragment.kt
View file @
c79b79b3
...
...
@@ -11,7 +11,7 @@ import com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentLogMd2Binding
import
com.topjohnwu.magisk.redesign.MainActivity
import
com.topjohnwu.magisk.redesign.compat.CompatFragment
import
com.topjohnwu.magisk.
redesign.hide
.MotionRevealHelper
import
com.topjohnwu.magisk.
utils
.MotionRevealHelper
import
org.koin.androidx.viewmodel.ext.android.viewModel
class
LogFragment
:
CompatFragment
<
LogViewModel
,
FragmentLogMd2Binding
>()
{
...
...
app/src/main/java/com/topjohnwu/magisk/redesign/log/LogViewModel.kt
View file @
c79b79b3
...
...
@@ -12,8 +12,8 @@ import com.topjohnwu.magisk.model.entity.recycler.ConsoleItem
import
com.topjohnwu.magisk.model.entity.recycler.LogItem
import
com.topjohnwu.magisk.model.events.SnackbarEvent
import
com.topjohnwu.magisk.redesign.compat.CompatViewModel
import
com.topjohnwu.magisk.redesign.
home.itemBinding
Of
import
com.topjohnwu.magisk.redesign.
superuser.diffList
Of
import
com.topjohnwu.magisk.redesign.
compat.diffList
Of
import
com.topjohnwu.magisk.redesign.
compat.itemBinding
Of
import
com.topjohnwu.superuser.Shell
import
io.reactivex.Completable
import
io.reactivex.android.schedulers.AndroidSchedulers
...
...
app/src/main/java/com/topjohnwu/magisk/redesign/module/ModuleFragment.kt
View file @
c79b79b3
...
...
@@ -17,8 +17,8 @@ import com.topjohnwu.magisk.redesign.MainActivity
import
com.topjohnwu.magisk.redesign.ReselectionTarget
import
com.topjohnwu.magisk.redesign.compat.CompatFragment
import
com.topjohnwu.magisk.redesign.compat.hideKeyboard
import
com.topjohnwu.magisk.redesign.hide.MotionRevealHelper
import
com.topjohnwu.magisk.utils.EndlessRecyclerScrollListener
import
com.topjohnwu.magisk.utils.MotionRevealHelper
import
org.koin.androidx.viewmodel.ext.android.viewModel
class
ModuleFragment
:
CompatFragment
<
ModuleViewModel
,
FragmentModuleMd2Binding
>(),
...
...
app/src/main/java/com/topjohnwu/magisk/redesign/module/ModuleViewModel.kt
View file @
c79b79b3
...
...
@@ -2,7 +2,6 @@ package com.topjohnwu.magisk.redesign.module
import
androidx.annotation.WorkerThread
import
androidx.databinding.Bindable
import
androidx.databinding.ViewDataBinding
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.R
...
...
@@ -19,17 +18,13 @@ import com.topjohnwu.magisk.model.entity.recycler.*
import
com.topjohnwu.magisk.model.events.InstallExternalModuleEvent
import
com.topjohnwu.magisk.model.events.OpenChangelogEvent
import
com.topjohnwu.magisk.model.events.dialog.ModuleInstallDialog
import
com.topjohnwu.magisk.redesign.compat.CompatViewModel
import
com.topjohnwu.magisk.redesign.compat.Queryable
import
com.topjohnwu.magisk.redesign.home.itemBindingOf
import
com.topjohnwu.magisk.redesign.superuser.diffListOf
import
com.topjohnwu.magisk.redesign.compat.*
import
com.topjohnwu.magisk.tasks.RepoUpdater
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.currentLocale
import
io.reactivex.Single
import
io.reactivex.android.schedulers.AndroidSchedulers
import
io.reactivex.disposables.Disposable
import
me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter
import
timber.log.Timber
import
kotlin.math.roundToInt
...
...
@@ -294,16 +289,3 @@ class ModuleViewModel(
prependIf
(
isNotEmpty
(),
item
)
}
\ No newline at end of file
fun
<
T
:
ComparableRvItem
<*
>
>
adapterOf
()
=
object
:
BindingRecyclerViewAdapter
<
T
>()
{
override
fun
onBindBinding
(
binding
:
ViewDataBinding
,
variableId
:
Int
,
layoutRes
:
Int
,
position
:
Int
,
item
:
T
)
{
super
.
onBindBinding
(
binding
,
variableId
,
layoutRes
,
position
,
item
)
item
.
onBindingBound
(
binding
)
}
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/redesign/settings/SettingsViewModel.kt
View file @
c79b79b3
...
...
@@ -17,9 +17,9 @@ import com.topjohnwu.magisk.model.events.RecreateEvent
import
com.topjohnwu.magisk.model.events.dialog.BiometricDialog
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.redesign.compat.CompatViewModel
import
com.topjohnwu.magisk.redesign.
home.itemBinding
Of
import
com.topjohnwu.magisk.redesign.
module.adapter
Of
import
com.topjohnwu.magisk.redesign.
superuser.diffList
Of
import
com.topjohnwu.magisk.redesign.
compat.adapter
Of
import
com.topjohnwu.magisk.redesign.
compat.diffList
Of
import
com.topjohnwu.magisk.redesign.
compat.itemBinding
Of
import
com.topjohnwu.magisk.utils.PatchAPK
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.superuser.Shell
...
...
app/src/main/java/com/topjohnwu/magisk/redesign/superuser/SuperuserViewModel.kt
View file @
c79b79b3
...
...
@@ -18,9 +18,9 @@ import com.topjohnwu.magisk.model.events.dialog.BiometricDialog
import
com.topjohnwu.magisk.model.events.dialog.SuperuserRevokeDialog
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.redesign.compat.CompatViewModel
import
com.topjohnwu.magisk.redesign.home.itemBindingOf
import
com.topjohnwu.magisk.redesign.compat.diffListOf
import
com.topjohnwu.magisk.redesign.compat.itemBindingOf
import
com.topjohnwu.magisk.utils.BiometricHelper
import
com.topjohnwu.magisk.utils.DiffObservableList
import
com.topjohnwu.magisk.utils.currentLocale
import
io.reactivex.Single
...
...
@@ -143,10 +143,3 @@ class SuperuserViewModel(
db
.
delete
(
policy
.
uid
).
andThen
(
Single
.
just
(
policy
))
}
\ No newline at end of file
inline
fun
<
T
:
ComparableRvItem
<*
>
>
diffListOf
(
vararg
newItems
:
T
)
=
DiffObservableList
(
object
:
DiffObservableList
.
Callback
<
T
>
{
override
fun
areItemsTheSame
(
oldItem
:
T
,
newItem
:
T
)
=
oldItem
.
genericItemSameAs
(
newItem
)
override
fun
areContentsTheSame
(
oldItem
:
T
,
newItem
:
T
)
=
oldItem
.
genericContentSameAs
(
newItem
)
}).
also
{
it
.
update
(
newItems
.
toList
())
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/redesign/theme/ThemeViewModel.kt
View file @
c79b79b3
package
com.topjohnwu.magisk.redesign.theme
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.model.entity.recycler.TappableHeadlineItem
import
com.topjohnwu.magisk.model.entity.recycler.ThemeItem
import
com.topjohnwu.magisk.model.events.RecreateEvent
import
com.topjohnwu.magisk.model.events.dialog.DarkThemeDialog
import
com.topjohnwu.magisk.redesign.compat.CompatViewModel
import
com.topjohnwu.magisk.redesign.home.itemBindingOf
import
com.topjohnwu.magisk.redesign.superuser.diffListOf
class
ThemeViewModel
:
CompatViewModel
(),
TappableHeadlineItem
.
Listener
{
val
items
=
diffListOf
(*
Theme
.
values
().
map
{
ThemeItem
(
it
)
}.
toTypedArray
())
val
itemBinding
=
itemBindingOf
<
ThemeItem
>
{
it
.
bindExtra
(
BR
.
viewModel
,
this
)
}
val
themeHeadline
=
TappableHeadlineItem
.
ThemeMode
override
fun
onItemPressed
(
item
:
TappableHeadlineItem
)
=
when
(
item
)
{
...
...
app/src/main/java/com/topjohnwu/magisk/utils/MotionRevealHelper.kt
0 → 100644
View file @
c79b79b3
package
com.topjohnwu.magisk.utils
import
android.animation.Animator
import
android.animation.AnimatorSet
import
android.animation.ObjectAnimator
import
android.view.View
import
androidx.core.animation.addListener
import
androidx.core.view.isInvisible
import
androidx.core.view.isVisible
import
androidx.core.view.marginBottom
import
androidx.core.view.marginEnd
import
androidx.interpolator.view.animation.FastOutSlowInInterpolator
import
com.google.android.material.circularreveal.CircularRevealCompat
import
com.google.android.material.circularreveal.CircularRevealWidget
import
com.google.android.material.floatingactionbutton.FloatingActionButton
import
kotlin.math.hypot
object
MotionRevealHelper
{
fun
<
CV
>
withViews
(
revealable
:
CV
,
fab
:
FloatingActionButton
,
expanded
:
Boolean
)
where
CV
:
CircularRevealWidget
,
CV
:
View
{
revealable
.
revealInfo
=
revealable
.
createRevealInfo
(!
expanded
)
val
revealInfo
=
revealable
.
createRevealInfo
(
expanded
)
val
revealAnim
=
revealable
.
createRevealAnim
(
revealInfo
)
val
moveAnim
=
fab
.
createMoveAnim
(
revealInfo
)
AnimatorSet
().
also
{
if
(
expanded
)
{
it
.
play
(
revealAnim
).
after
(
moveAnim
)
}
else
{
it
.
play
(
moveAnim
).
after
(
revealAnim
)
}
}.
start
()
}
private
fun
<
CV
>
CV
.
createRevealAnim
(
revealInfo
:
CircularRevealWidget
.
RevealInfo
):
Animator
where
CV
:
CircularRevealWidget
,
CV
:
View
=
CircularRevealCompat
.
createCircularReveal
(
this
,
revealInfo
.
centerX
,
revealInfo
.
centerY
,
revealInfo
.
radius
).
apply
{
addListener
(
onStart
=
{
isVisible
=
true
},
onEnd
=
{
if
(
revealInfo
.
radius
==
0f
)
{
isInvisible
=
true
}
})
}
private
fun
FloatingActionButton
.
createMoveAnim
(
revealInfo
:
CircularRevealWidget
.
RevealInfo
):
Animator
=
AnimatorSet
().
also
{
it
.
interpolator
=
FastOutSlowInInterpolator
()
it
.
addListener
(
onStart
=
{
show
()
},
onEnd
=
{
if
(
revealInfo
.
radius
!=
0f
)
hide
()
})
// fixme rtl
val
maxX
=
revealInfo
.
centerX
-
marginEnd
-
measuredWidth
/
2f
val
targetX
=
if
(
revealInfo
.
radius
==
0f
)
0f
else
-
maxX
val
moveX
=
ObjectAnimator
.
ofFloat
(
this
,
View
.
TRANSLATION_X
,
targetX
)
val
maxY
=
revealInfo
.
centerY
-
marginBottom
-
measuredHeight
/
2f
val
targetY
=
if
(
revealInfo
.
radius
==
0f
)
0f
else
-
maxY
val
moveY
=
ObjectAnimator
.
ofFloat
(
this
,
View
.
TRANSLATION_Y
,
targetY
)
it
.
playTogether
(
moveX
,
moveY
)
}
private
fun
View
.
createRevealInfo
(
expanded
:
Boolean
):
CircularRevealWidget
.
RevealInfo
{
val
cX
=
measuredWidth
/
2f
val
cY
=
measuredHeight
/
2f
-
paddingBottom
return
CircularRevealWidget
.
RevealInfo
(
cX
,
cY
,
if
(
expanded
)
hypot
(
cX
,
cY
)
else
0f
)
}
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt
View file @
c79b79b3
...
...
@@ -19,7 +19,7 @@ import com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.DialogMagiskBaseBinding
import
com.topjohnwu.magisk.redesign.
home
.itemBindingOf
import
com.topjohnwu.magisk.redesign.
compat
.itemBindingOf
import
com.topjohnwu.magisk.utils.KObservableField
import
me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapters
import
me.tatarka.bindingcollectionadapter2.ItemBinding
...
...
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