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
6305159c
Commit
6305159c
authored
Jun 03, 2022
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove usage of BindingCollectionAdapter (part 1)
parent
2ed092c9
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
166 additions
and
167 deletions
+166
-167
build.gradle.kts
app/build.gradle.kts
+0
-1
BindingBoundAdapter.kt
...a/com/topjohnwu/magisk/databinding/BindingBoundAdapter.kt
+0
-13
Helpers.kt
...src/main/java/com/topjohnwu/magisk/databinding/Helpers.kt
+0
-28
RecyclerViewItems.kt
...ava/com/topjohnwu/magisk/databinding/RecyclerViewItems.kt
+4
-26
RvBindingAdapter.kt
...java/com/topjohnwu/magisk/databinding/RvBindingAdapter.kt
+0
-35
RvItemAdapter.kt
...in/java/com/topjohnwu/magisk/databinding/RvItemAdapter.kt
+118
-0
DenyListViewModel.kt
...in/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt
+3
-6
ConsoleItem.kt
...rc/main/java/com/topjohnwu/magisk/ui/flash/ConsoleItem.kt
+3
-4
FlashViewModel.kt
...main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt
+0
-4
HomeViewModel.kt
...c/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt
+3
-3
LogViewModel.kt
...src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt
+3
-3
ModuleFragment.kt
...ain/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt
+0
-3
ModuleViewModel.kt
...in/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt
+3
-3
SettingsViewModel.kt
...ava/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt
+4
-4
SuperuserFragment.kt
...va/com/topjohnwu/magisk/ui/superuser/SuperuserFragment.kt
+0
-3
SuperuserViewModel.kt
...a/com/topjohnwu/magisk/ui/superuser/SuperuserViewModel.kt
+4
-4
MagiskDialog.kt
app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt
+4
-7
fragment_deny_md2.xml
app/src/main/res/layout/fragment_deny_md2.xml
+3
-3
fragment_flash_md2.xml
app/src/main/res/layout/fragment_flash_md2.xml
+1
-3
fragment_module_md2.xml
app/src/main/res/layout/fragment_module_md2.xml
+2
-2
fragment_settings_md2.xml
app/src/main/res/layout/fragment_settings_md2.xml
+2
-3
fragment_superuser_md2.xml
app/src/main/res/layout/fragment_superuser_md2.xml
+2
-2
include_log_superuser.xml
app/src/main/res/layout/include_log_superuser.xml
+2
-2
item_developer.xml
app/src/main/res/layout/item_developer.xml
+3
-3
item_hide_md2.xml
app/src/main/res/layout/item_hide_md2.xml
+2
-2
No files found.
app/build.gradle.kts
View file @
6305159c
...
...
@@ -81,7 +81,6 @@ dependencies {
val
vBAdapt
=
"4.0.0"
val
bindingAdapter
=
"me.tatarka.bindingcollectionadapter2:bindingcollectionadapter"
implementation
(
"${bindingAdapter}:${vBAdapt}"
)
implementation
(
"${bindingAdapter}-recyclerview:${vBAdapt}"
)
val
vLibsu
=
"5.0.2"
implementation
(
"com.github.topjohnwu.libsu:core:${vLibsu}"
)
...
...
app/src/main/java/com/topjohnwu/magisk/databinding/BindingBoundAdapter.kt
deleted
100644 → 0
View file @
2ed092c9
package
com.topjohnwu.magisk.databinding
import
androidx.databinding.ViewDataBinding
import
me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter
open
class
BindingBoundAdapter
:
BindingRecyclerViewAdapter
<
RvItem
>()
{
override
fun
onBindBinding
(
binding
:
ViewDataBinding
,
variableId
:
Int
,
layoutRes
:
Int
,
position
:
Int
,
item
:
RvItem
)
{
super
.
onBindBinding
(
binding
,
variableId
,
layoutRes
,
position
,
item
)
item
.
onBindingBound
(
binding
)
}
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/databinding/Helpers.kt
View file @
6305159c
package
com.topjohnwu.magisk.databinding
import
androidx.databinding.ViewDataBinding
import
me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter
import
me.tatarka.bindingcollectionadapter2.ItemBinding
import
me.tatarka.bindingcollectionadapter2.OnItemBind
fun
<
T
:
AnyDiffRvItem
>
diffListOf
()
=
DiffObservableList
(
DiffRvItem
.
callback
<
T
>())
fun
<
T
:
AnyDiffRvItem
>
diffListOf
(
newItems
:
List
<
T
>)
=
DiffObservableList
(
DiffRvItem
.
callback
<
T
>()).
also
{
it
.
update
(
newItems
)
}
fun
<
T
:
AnyDiffRvItem
>
filterableListOf
()
=
FilterableDiffObservableList
(
DiffRvItem
.
callback
<
T
>())
fun
<
T
:
RvItem
>
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
:
RvItem
>
itemBindingOf
(
crossinline
body
:
(
ItemBinding
<*>)
->
Unit
=
{}
)
=
OnItemBind
<
T
>
{
itemBinding
,
_
,
item
->
item
.
bind
(
itemBinding
)
body
(
itemBinding
)
}
app/src/main/java/com/topjohnwu/magisk/databinding/RecyclerViewItems.kt
View file @
6305159c
package
com.topjohnwu.magisk.databinding
import
androidx.annotation.CallSuper
import
androidx.databinding.PropertyChangeRegistry
import
androidx.databinding.ViewDataBinding
import
androidx.recyclerview.widget.RecyclerView
import
com.topjohnwu.magisk.BR
import
me.tatarka.bindingcollectionadapter2.ItemBinding
abstract
class
RvItem
{
abstract
val
layoutRes
:
Int
@CallSuper
open
fun
bind
(
binding
:
ItemBinding
<
*
>)
{
binding
.
set
(
BR
.
item
,
layoutRes
)
}
/**
* This callback is useful if you want to manipulate your views directly.
* If you want to use this callback, you must set [me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter]
* on your RecyclerView and call it from there. You can use [BindingBoundAdapter] for your convenience.
*/
open
fun
onBindingBound
(
binding
:
ViewDataBinding
)
{}
}
interface
RvContainer
<
E
>
{
val
item
:
E
}
interface
ViewAwareRvItem
{
fun
onBind
(
binding
:
ViewDataBinding
,
recyclerView
:
RecyclerView
)
}
interface
ComparableRv
<
T
>
:
Comparable
<
T
>
{
@Suppress
(
"UNCHECKED_CAST"
)
fun
comparableEqual
(
o
:
Any
?)
=
...
...
@@ -77,13 +65,3 @@ abstract class ObservableDiffRvItem<T> : DiffRvItem<T>(), ObservableHost {
abstract
class
ObservableRvItem
:
RvItem
(),
ObservableHost
{
override
var
callbacks
:
PropertyChangeRegistry
?
=
null
}
/**
* This item addresses issues where enclosing recycler has to be invalidated or generally
* manipulated with. This shouldn't be however necessary for 99.9% of use-cases. Refrain from using
* this item as it provides virtually no additional functionality. Stick with ComparableRvItem.
* */
interface
LenientRvItem
{
fun
onBindingBound
(
binding
:
ViewDataBinding
,
recyclerView
:
RecyclerView
)
}
app/src/main/java/com/topjohnwu/magisk/databinding/RvBindingAdapter.kt
deleted
100644 → 0
View file @
2ed092c9
package
com.topjohnwu.magisk.databinding
import
androidx.databinding.ViewDataBinding
import
androidx.recyclerview.widget.RecyclerView
import
me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter
class
RvBindingAdapter
<
T
:
RvItem
>
:
BindingRecyclerViewAdapter
<
T
>()
{
private
var
recyclerView
:
RecyclerView
?
=
null
override
fun
onBindBinding
(
binding
:
ViewDataBinding
,
variableId
:
Int
,
layoutRes
:
Int
,
position
:
Int
,
item
:
T
)
{
super
.
onBindBinding
(
binding
,
variableId
,
layoutRes
,
position
,
item
)
when
(
item
)
{
is
LenientRvItem
->
{
val
recycler
=
recyclerView
?:
return
item
.
onBindingBound
(
binding
)
item
.
onBindingBound
(
binding
,
recycler
)
}
else
->
item
.
onBindingBound
(
binding
)
}
}
override
fun
onAttachedToRecyclerView
(
recyclerView
:
RecyclerView
)
{
super
.
onAttachedToRecyclerView
(
recyclerView
)
this
.
recyclerView
=
recyclerView
}
}
app/src/main/java/com/topjohnwu/magisk/databinding/RvItemAdapter.kt
0 → 100644
View file @
6305159c
package
com.topjohnwu.magisk.databinding
import
android.annotation.SuppressLint
import
android.util.SparseArray
import
android.view.LayoutInflater
import
android.view.ViewGroup
import
androidx.databinding.BindingAdapter
import
androidx.databinding.DataBindingUtil
import
androidx.databinding.ObservableList
import
androidx.databinding.ObservableList.OnListChangedCallback
import
androidx.databinding.ViewDataBinding
import
androidx.lifecycle.LifecycleOwner
import
androidx.lifecycle.findViewTreeLifecycleOwner
import
androidx.recyclerview.widget.RecyclerView
import
com.topjohnwu.magisk.BR
class
RvItemAdapter
<
T
:
RvItem
>(
private
val
items
:
List
<
T
>,
private
val
extraBindings
:
SparseArray
<*>?
)
:
RecyclerView
.
Adapter
<
RvItemAdapter
.
ViewHolder
>()
{
private
var
lifecycleOwner
:
LifecycleOwner
?
=
null
private
var
recyclerView
:
RecyclerView
?
=
null
private
val
observer
by
lazy
(
LazyThreadSafetyMode
.
NONE
)
{
ListObserver
<
T
>()
}
override
fun
onAttachedToRecyclerView
(
rv
:
RecyclerView
)
{
lifecycleOwner
=
rv
.
findViewTreeLifecycleOwner
()
recyclerView
=
rv
if
(
items
is
ObservableList
)
items
.
addOnListChangedCallback
(
observer
)
}
override
fun
onDetachedFromRecyclerView
(
rv
:
RecyclerView
)
{
lifecycleOwner
=
null
recyclerView
=
null
if
(
items
is
ObservableList
)
items
.
removeOnListChangedCallback
(
observer
)
}
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
layoutRes
:
Int
):
ViewHolder
{
val
inflator
=
LayoutInflater
.
from
(
parent
.
context
)
return
ViewHolder
(
DataBindingUtil
.
inflate
(
inflator
,
layoutRes
,
parent
,
false
))
}
override
fun
onBindViewHolder
(
holder
:
ViewHolder
,
position
:
Int
)
{
val
item
=
items
[
position
]
holder
.
binding
.
setVariable
(
BR
.
item
,
item
)
extraBindings
?.
let
{
for
(
i
in
0
until
it
.
size
())
{
holder
.
binding
.
setVariable
(
it
.
keyAt
(
i
),
it
.
valueAt
(
i
))
}
}
holder
.
binding
.
lifecycleOwner
=
lifecycleOwner
holder
.
binding
.
executePendingBindings
()
recyclerView
?.
let
{
if
(
item
is
ViewAwareRvItem
)
item
.
onBind
(
holder
.
binding
,
it
)
}
}
override
fun
getItemCount
()
=
items
.
size
override
fun
getItemViewType
(
position
:
Int
)
=
items
[
position
].
layoutRes
class
ViewHolder
(
val
binding
:
ViewDataBinding
)
:
RecyclerView
.
ViewHolder
(
binding
.
root
)
inner
class
ListObserver
<
T
:
RvItem
>
:
OnListChangedCallback
<
ObservableList
<
T
>>()
{
@SuppressLint
(
"NotifyDataSetChanged"
)
override
fun
onChanged
(
sender
:
ObservableList
<
T
>)
{
notifyDataSetChanged
()
}
override
fun
onItemRangeChanged
(
sender
:
ObservableList
<
T
>,
positionStart
:
Int
,
itemCount
:
Int
)
{
notifyItemRangeChanged
(
positionStart
,
itemCount
)
}
override
fun
onItemRangeInserted
(
sender
:
ObservableList
<
T
>?,
positionStart
:
Int
,
itemCount
:
Int
)
{
notifyItemRangeInserted
(
positionStart
,
itemCount
)
}
override
fun
onItemRangeMoved
(
sender
:
ObservableList
<
T
>?,
fromPosition
:
Int
,
toPosition
:
Int
,
itemCount
:
Int
)
{
for
(
i
in
0
until
itemCount
)
{
notifyItemMoved
(
fromPosition
+
i
,
toPosition
+
i
)
}
}
override
fun
onItemRangeRemoved
(
sender
:
ObservableList
<
T
>?,
positionStart
:
Int
,
itemCount
:
Int
)
{
notifyItemRangeRemoved
(
positionStart
,
itemCount
)
}
}
}
inline
fun
bindExtra
(
body
:
(
SparseArray
<
Any
?>)
->
Unit
)
=
SparseArray
<
Any
?>().
also
(
body
)
@BindingAdapter
(
"items"
,
"extraBindings"
,
requireAll
=
false
)
fun
<
T
:
RvItem
>
RecyclerView
.
setAdapter
(
items
:
List
<
T
>?,
extraBindings
:
SparseArray
<
*
>?)
{
if
(
items
!=
null
)
{
adapter
=
RvItemAdapter
(
items
,
extraBindings
)
}
}
app/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt
View file @
6305159c
...
...
@@ -6,8 +6,8 @@ import androidx.lifecycle.viewModelScope
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.arch.BaseViewModel
import
com.topjohnwu.magisk.core.di.AppContext
import
com.topjohnwu.magisk.databinding.bindExtra
import
com.topjohnwu.magisk.databinding.filterableListOf
import
com.topjohnwu.magisk.databinding.itemBindingOf
import
com.topjohnwu.magisk.ktx.concurrentMap
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.superuser.Shell
...
...
@@ -39,11 +39,8 @@ class DenyListViewModel : BaseViewModel() {
}
val
items
=
filterableListOf
<
DenyListRvItem
>()
val
itemBinding
=
itemBindingOf
<
DenyListRvItem
>
{
it
.
bindExtra
(
BR
.
viewModel
,
this
)
}
val
itemInternalBinding
=
itemBindingOf
<
ProcessRvItem
>
{
it
.
bindExtra
(
BR
.
viewModel
,
this
)
val
extraBindings
=
bindExtra
{
it
.
put
(
BR
.
viewModel
,
this
)
}
@SuppressLint
(
"InlinedApi"
)
...
...
app/src/main/java/com/topjohnwu/magisk/ui/flash/ConsoleItem.kt
View file @
6305159c
...
...
@@ -7,19 +7,18 @@ import androidx.databinding.ViewDataBinding
import
androidx.recyclerview.widget.RecyclerView
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.DiffRvItem
import
com.topjohnwu.magisk.databinding.LenientRvItem
import
com.topjohnwu.magisk.databinding.RvContainer
import
com.topjohnwu.magisk.databinding.ViewAwareRvItem
import
kotlin.math.max
class
ConsoleItem
(
override
val
item
:
String
)
:
DiffRvItem
<
ConsoleItem
>(),
LenientRvItem
,
RvContainer
<
String
>
{
)
:
DiffRvItem
<
ConsoleItem
>(),
ViewAwareRvItem
,
RvContainer
<
String
>
{
override
val
layoutRes
=
R
.
layout
.
item_console_md2
private
var
parentWidth
=
-
1
override
fun
onBind
ingBound
(
binding
:
ViewDataBinding
,
recyclerView
:
RecyclerView
)
{
override
fun
onBind
(
binding
:
ViewDataBinding
,
recyclerView
:
RecyclerView
)
{
if
(
parentWidth
<
0
)
parentWidth
=
(
recyclerView
.
parent
as
View
).
width
...
...
app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt
View file @
6305159c
...
...
@@ -14,9 +14,7 @@ import com.topjohnwu.magisk.core.tasks.FlashZip
import
com.topjohnwu.magisk.core.tasks.MagiskInstaller
import
com.topjohnwu.magisk.core.utils.MediaStoreUtils
import
com.topjohnwu.magisk.core.utils.MediaStoreUtils.outputStream
import
com.topjohnwu.magisk.databinding.RvBindingAdapter
import
com.topjohnwu.magisk.databinding.diffListOf
import
com.topjohnwu.magisk.databinding.itemBindingOf
import
com.topjohnwu.magisk.databinding.set
import
com.topjohnwu.magisk.events.SnackbarEvent
import
com.topjohnwu.magisk.ktx.reboot
...
...
@@ -36,9 +34,7 @@ class FlashViewModel : BaseViewModel() {
private
val
_subtitle
=
MutableLiveData
(
R
.
string
.
flashing
)
val
subtitle
get
()
=
_subtitle
as
LiveData
<
Int
>
val
adapter
=
RvBindingAdapter
<
ConsoleItem
>()
val
items
=
diffListOf
<
ConsoleItem
>()
val
itemBinding
=
itemBindingOf
<
ConsoleItem
>()
lateinit
var
args
:
FlashFragmentArgs
private
val
logItems
=
mutableListOf
<
String
>().
synchronized
()
...
...
app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt
View file @
6305159c
...
...
@@ -12,7 +12,7 @@ import com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.core.download.Subject
import
com.topjohnwu.magisk.core.download.Subject.App
import
com.topjohnwu.magisk.core.repository.NetworkService
import
com.topjohnwu.magisk.databinding.
itemBindingOf
import
com.topjohnwu.magisk.databinding.
bindExtra
import
com.topjohnwu.magisk.databinding.set
import
com.topjohnwu.magisk.events.SnackbarEvent
import
com.topjohnwu.magisk.events.dialog.EnvFixDialog
...
...
@@ -75,8 +75,8 @@ class HomeViewModel(
var
stateManagerProgress
=
0
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
stateManagerProgress
)
val
itemBinding
=
itemBindingOf
<
IconLink
>
{
it
.
bindExtra
(
BR
.
viewModel
,
this
)
val
extraBindings
=
bindExtra
{
it
.
put
(
BR
.
viewModel
,
this
)
}
companion
object
{
...
...
app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt
View file @
6305159c
...
...
@@ -10,8 +10,8 @@ import com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.core.repository.LogRepository
import
com.topjohnwu.magisk.core.utils.MediaStoreUtils
import
com.topjohnwu.magisk.core.utils.MediaStoreUtils.outputStream
import
com.topjohnwu.magisk.databinding.bindExtra
import
com.topjohnwu.magisk.databinding.diffListOf
import
com.topjohnwu.magisk.databinding.itemBindingOf
import
com.topjohnwu.magisk.databinding.set
import
com.topjohnwu.magisk.events.SnackbarEvent
import
com.topjohnwu.magisk.ktx.timeFormatStandard
...
...
@@ -34,8 +34,8 @@ class LogViewModel(
// --- su log
val
items
=
diffListOf
<
LogRvItem
>()
val
itemBinding
=
itemBindingOf
<
LogRvItem
>
{
it
.
bindExtra
(
BR
.
viewModel
,
this
)
val
extraBindings
=
bindExtra
{
it
.
put
(
BR
.
viewModel
,
this
)
}
// --- magisk log
...
...
app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt
View file @
6305159c
...
...
@@ -8,8 +8,6 @@ import com.topjohnwu.magisk.arch.BaseFragment
import
com.topjohnwu.magisk.arch.viewModel
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.databinding.FragmentModuleMd2Binding
import
com.topjohnwu.magisk.databinding.RvItem
import
com.topjohnwu.magisk.databinding.adapterOf
import
rikka.recyclerview.addEdgeSpacing
import
rikka.recyclerview.addInvalidateItemDecorationsObserver
import
rikka.recyclerview.addItemSpacing
...
...
@@ -34,7 +32,6 @@ class ModuleFragment : BaseFragment<FragmentModuleMd2Binding>() {
super
.
onViewCreated
(
view
,
savedInstanceState
)
binding
.
moduleList
.
apply
{
adapter
=
adapterOf
<
RvItem
>()
addEdgeSpacing
(
top
=
R
.
dimen
.
l_50
,
bottom
=
R
.
dimen
.
l1
)
addItemSpacing
(
R
.
dimen
.
l1
,
R
.
dimen
.
l_50
,
R
.
dimen
.
l1
)
fixEdgeEffect
()
...
...
app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt
View file @
6305159c
...
...
@@ -11,8 +11,8 @@ import com.topjohnwu.magisk.core.base.ContentResultCallback
import
com.topjohnwu.magisk.core.model.module.LocalModule
import
com.topjohnwu.magisk.core.model.module.OnlineModule
import
com.topjohnwu.magisk.databinding.RvItem
import
com.topjohnwu.magisk.databinding.bindExtra
import
com.topjohnwu.magisk.databinding.diffListOf
import
com.topjohnwu.magisk.databinding.itemBindingOf
import
com.topjohnwu.magisk.events.GetContentEvent
import
com.topjohnwu.magisk.events.SnackbarEvent
import
com.topjohnwu.magisk.events.dialog.ModuleInstallDialog
...
...
@@ -30,8 +30,8 @@ class ModuleViewModel : BaseViewModel() {
private
val
itemsInstalled
=
diffListOf
<
LocalModuleRvItem
>()
val
items
=
MergeObservableList
<
RvItem
>()
val
itemBinding
=
itemBindingOf
<
RvItem
>
{
it
.
bindExtra
(
BR
.
viewModel
,
this
)
val
extraBindings
=
bindExtra
{
it
.
put
(
BR
.
viewModel
,
this
)
}
val
data
get
()
=
uri
...
...
app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt
View file @
6305159c
...
...
@@ -14,8 +14,7 @@ import com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.core.di.AppContext
import
com.topjohnwu.magisk.core.isRunningAsStub
import
com.topjohnwu.magisk.core.tasks.HideAPK
import
com.topjohnwu.magisk.databinding.adapterOf
import
com.topjohnwu.magisk.databinding.itemBindingOf
import
com.topjohnwu.magisk.databinding.bindExtra
import
com.topjohnwu.magisk.events.AddHomeIconEvent
import
com.topjohnwu.magisk.events.SnackbarEvent
import
com.topjohnwu.magisk.events.dialog.BiometricEvent
...
...
@@ -26,9 +25,10 @@ import kotlinx.coroutines.launch
class
SettingsViewModel
:
BaseViewModel
(),
BaseSettingsItem
.
Handler
{
val
adapter
=
adapterOf
<
BaseSettingsItem
>()
val
itemBinding
=
itemBindingOf
<
BaseSettingsItem
>
{
it
.
bindExtra
(
BR
.
handler
,
this
)
}
val
items
=
createItems
()
val
extraBindings
=
bindExtra
{
it
.
put
(
BR
.
handler
,
this
)
}
init
{
viewModelScope
.
launch
{
...
...
app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserFragment.kt
View file @
6305159c
...
...
@@ -5,9 +5,7 @@ import android.view.View
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.arch.BaseFragment
import
com.topjohnwu.magisk.arch.viewModel
import
com.topjohnwu.magisk.databinding.AnyDiffRvItem
import
com.topjohnwu.magisk.databinding.FragmentSuperuserMd2Binding
import
com.topjohnwu.magisk.databinding.adapterOf
import
rikka.recyclerview.addEdgeSpacing
import
rikka.recyclerview.addItemSpacing
import
rikka.recyclerview.fixEdgeEffect
...
...
@@ -26,7 +24,6 @@ class SuperuserFragment : BaseFragment<FragmentSuperuserMd2Binding>() {
super
.
onViewCreated
(
view
,
savedInstanceState
)
binding
.
superuserList
.
apply
{
adapter
=
adapterOf
<
AnyDiffRvItem
>()
addEdgeSpacing
(
top
=
R
.
dimen
.
l_50
,
bottom
=
R
.
dimen
.
l1
)
addItemSpacing
(
R
.
dimen
.
l1
,
R
.
dimen
.
l_50
,
R
.
dimen
.
l1
)
fixEdgeEffect
()
...
...
app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserViewModel.kt
View file @
6305159c
...
...
@@ -15,8 +15,8 @@ import com.topjohnwu.magisk.core.model.su.SuPolicy
import
com.topjohnwu.magisk.core.utils.BiometricHelper
import
com.topjohnwu.magisk.core.utils.currentLocale
import
com.topjohnwu.magisk.databinding.AnyDiffRvItem
import
com.topjohnwu.magisk.databinding.bindExtra
import
com.topjohnwu.magisk.databinding.diffListOf
import
com.topjohnwu.magisk.databinding.itemBindingOf
import
com.topjohnwu.magisk.events.SnackbarEvent
import
com.topjohnwu.magisk.events.dialog.BiometricEvent
import
com.topjohnwu.magisk.events.dialog.SuperuserRevokeDialog
...
...
@@ -35,14 +35,14 @@ class SuperuserViewModel(
private
val
itemNoData
=
TextItem
(
R
.
string
.
superuser_policy_none
)
private
val
itemsPolicies
=
diffListOf
<
PolicyRvItem
>()
private
val
itemsHelpers
=
ObservableArrayList
<
TextItem
>()
private
val
itemsPolicies
=
diffListOf
<
PolicyRvItem
>()
val
items
=
MergeObservableList
<
AnyDiffRvItem
>()
.
insertList
(
itemsHelpers
)
.
insertList
(
itemsPolicies
)
val
itemBinding
=
itemBindingOf
<
AnyDiffRvItem
>
{
it
.
bindExtra
(
BR
.
listener
,
this
)
val
extraBindings
=
bindExtra
{
it
.
put
(
BR
.
listener
,
this
)
}
// ---
...
...
app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt
View file @
6305159c
...
...
@@ -23,8 +23,6 @@ import com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.*
import
com.topjohnwu.magisk.view.MagiskDialog.DialogClickListener
import
me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapters
import
me.tatarka.bindingcollectionadapter2.ItemBinding
typealias
DialogButtonClickListener
=
(
DialogInterface
)
->
Unit
...
...
@@ -181,14 +179,13 @@ class MagiskDialog(
it
.
layoutManager
=
LinearLayoutManager
(
context
)
val
items
=
list
.
mapIndexed
{
i
,
cs
->
DialogItem
(
cs
,
i
)
}
val
binding
=
itemBindingOf
<
DialogItem
>
{
item
->
item
.
bindExtra
(
BR
.
listener
,
DialogClickListener
{
pos
->
val
extraBindings
=
bindExtra
{
sa
->
sa
.
put
(
BR
.
listener
,
DialogClickListener
{
pos
->
listener
.
onClick
(
pos
)
dismiss
()
})
}.
let
{
b
->
ItemBinding
.
of
(
b
)
}
BindingRecyclerViewAdapters
.
setAdapter
(
it
,
binding
,
items
,
null
,
null
,
null
,
null
)
}
it
.
setAdapter
(
items
,
extraBindings
)
}
)
...
...
app/src/main/res/layout/fragment_deny_md2.xml
View file @
6305159c
...
...
@@ -17,9 +17,6 @@
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/app_list"
invisibleUnless=
"@{viewModel.loaded}"
itemBinding=
"@{viewModel.itemBinding}"
items=
"@{viewModel.items}"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:clipToPadding=
"false"
...
...
@@ -27,6 +24,9 @@
android:paddingTop=
"@dimen/internal_action_bar_size"
app:fitsSystemWindowsInsets=
"top|bottom"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
app:invisibleUnless=
"@{viewModel.loaded}"
app:items=
"@{viewModel.items}"
app:extraBindings=
"@{viewModel.extraBindings}"
tools:listitem=
"@layout/item_hide_md2"
tools:paddingTop=
"40dp"
/>
...
...
app/src/main/res/layout/fragment_flash_md2.xml
View file @
6305159c
...
...
@@ -24,9 +24,7 @@
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/flash_content"
adapter=
"@{viewModel.adapter}"
itemBinding=
"@{viewModel.itemBinding}"
items=
"@{viewModel.items}"
app:items=
"@{viewModel.items}"
scrollToLast=
"@{true}"
android:layout_width=
"wrap_content"
android:layout_height=
"match_parent"
...
...
app/src/main/res/layout/fragment_module_md2.xml
View file @
6305159c
...
...
@@ -20,8 +20,8 @@
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/module_list"
gone=
"@{viewModel.loading}"
itemBinding=
"@{viewModel.itemBinding
}"
items=
"@{viewModel.item
s}"
app:items=
"@{viewModel.items
}"
app:extraBindings=
"@{viewModel.extraBinding
s}"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:clipToPadding=
"false"
...
...
app/src/main/res/layout/fragment_settings_md2.xml
View file @
6305159c
...
...
@@ -14,9 +14,8 @@
</data>
<androidx.recyclerview.widget.RecyclerView
adapter=
"@{viewModel.adapter}"
itemBinding=
"@{viewModel.itemBinding}"
items=
"@{viewModel.items}"
app:items=
"@{viewModel.items}"
app:extraBindings=
"@{viewModel.extraBindings}"
android:id=
"@+id/settings_list"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
...
...
app/src/main/res/layout/fragment_superuser_md2.xml
View file @
6305159c
...
...
@@ -20,8 +20,8 @@
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/superuser_list"
goneUnless=
"@{viewModel.loaded || !viewModel.items.empty}"
itemBinding=
"@{viewModel.itemBinding
}"
items=
"@{viewModel.item
s}"
app:items=
"@{viewModel.items
}"
app:extraBindings=
"@{viewModel.extraBinding
s}"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:clipToPadding=
"false"
...
...
app/src/main/res/layout/include_log_superuser.xml
View file @
6305159c
...
...
@@ -17,8 +17,8 @@
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/log_superuser"
itemBinding=
"@{viewModel.itemBinding
}"
items=
"@{viewModel.item
s}"
app:items=
"@{viewModel.items
}"
app:extraBindings=
"@{viewModel.extraBinding
s}"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:clipToPadding=
"false"
...
...
app/src/main/res/layout/item_developer.xml
View file @
6305159c
...
...
@@ -32,9 +32,9 @@
tools:text=
"\@topjohnwu"
/>
<androidx.recyclerview.widget.RecyclerView
itemBinding=
"@{viewModel.itemBinding
}"
items=
"@{item.item
s}"
nestedScrollingEnabled=
"@{false}"
app:items=
"@{item.items
}"
app:extraBindings=
"@{viewModel.extraBinding
s}"
app:
nestedScrollingEnabled=
"@{false}"
android:overScrollMode=
"never"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
...
...
app/src/main/res/layout/item_hide_md2.xml
View file @
6305159c
...
...
@@ -95,8 +95,8 @@
<androidx.recyclerview.widget.RecyclerView
goneUnless=
"@{item.isExpanded}"
itemBinding=
"@{viewModel.itemInternalBinding
}"
items=
"@{item.processe
s}"
app:items=
"@{item.processes
}"
app:extraBindings=
"@{viewModel.extraBinding
s}"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"?colorSurfaceVariant"
...
...
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