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
84f92bd6
Commit
84f92bd6
authored
Aug 26, 2020
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup hide fragment code
parent
b44dcc2d
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
162 additions
and
186 deletions
+162
-186
MagiskRepository.kt
.../com/topjohnwu/magisk/data/repository/MagiskRepository.kt
+1
-42
RecyclerViewItems.kt
...ava/com/topjohnwu/magisk/databinding/RecyclerViewItems.kt
+9
-2
RepositoryModule.kt
...src/main/java/com/topjohnwu/magisk/di/RepositoryModule.kt
+1
-1
ViewModelsModule.kt
...src/main/java/com/topjohnwu/magisk/di/ViewModelsModule.kt
+1
-1
XAndroid.kt
app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt
+14
-32
HideApp.kt
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideApp.kt
+47
-0
HideAppInfo.kt
...src/main/java/com/topjohnwu/magisk/ui/hide/HideAppInfo.kt
+0
-25
HideRvItems.kt
...src/main/java/com/topjohnwu/magisk/ui/hide/HideRvItems.kt
+27
-20
HideTarget.kt
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideTarget.kt
+0
-14
HideViewModel.kt
...c/main/java/com/topjohnwu/magisk/ui/hide/HideViewModel.kt
+54
-41
item_hide_md2.xml
app/src/main/res/layout/item_hide_md2.xml
+6
-7
item_hide_process_md2.xml
app/src/main/res/layout/item_hide_process_md2.xml
+2
-1
No files found.
app/src/main/java/com/topjohnwu/magisk/data/repository/MagiskRepository.kt
View file @
84f92bd6
package
com.topjohnwu.magisk.data.repository
import
android.content.pm.PackageManager
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.ktx.await
import
com.topjohnwu.magisk.ktx.getLabel
import
com.topjohnwu.magisk.ktx.packageName
import
com.topjohnwu.magisk.ui.hide.HideAppInfo
import
com.topjohnwu.magisk.ui.hide.HideTarget
import
com.topjohnwu.superuser.Shell
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.withContext
import
timber.log.Timber
import
java.io.IOException
class
MagiskRepository
(
private
val
apiRaw
:
GithubRawServices
,
private
val
packageManager
:
PackageManager
private
val
apiRaw
:
GithubRawServices
)
{
suspend
fun
fetchUpdate
()
=
try
{
...
...
@@ -40,35 +30,4 @@ class MagiskRepository(
null
}
suspend
fun
fetchApps
()
=
withContext
(
Dispatchers
.
Default
)
{
packageManager
.
getInstalledApplications
(
0
).
filter
{
it
.
enabled
&&
!
blacklist
.
contains
(
it
.
packageName
)
}.
map
{
val
label
=
it
.
getLabel
(
packageManager
)
val
icon
=
it
.
loadIcon
(
packageManager
)
HideAppInfo
(
it
,
label
,
icon
)
}.
filter
{
it
.
processes
.
isNotEmpty
()
}
}
suspend
fun
fetchHideTargets
()
=
Shell
.
su
(
"magiskhide --ls"
).
await
().
out
.
map
{
HideTarget
(
it
)
}
fun
toggleHide
(
isEnabled
:
Boolean
,
packageName
:
String
,
process
:
String
)
=
Shell
.
su
(
"magiskhide --${isEnabled.state} $packageName $process"
).
submit
()
private
val
Boolean
.
state
get
()
=
if
(
this
)
"add"
else
"rm"
companion
object
{
private
val
blacklist
by
lazy
{
listOf
(
packageName
,
"android"
,
"com.android.chrome"
,
"com.chrome.beta"
,
"com.chrome.dev"
,
"com.chrome.canary"
,
"com.android.webview"
,
"com.google.android.webview"
)
}
}
}
app/src/main/java/com/topjohnwu/magisk/databinding/RecyclerViewItems.kt
View file @
84f92bd6
...
...
@@ -28,10 +28,17 @@ abstract class RvItem {
abstract
class
ComparableRvItem
<
in
T
>
:
RvItem
()
{
abstract
fun
itemSameAs
(
other
:
T
):
Boolean
abstract
fun
contentSameAs
(
other
:
T
):
Boolean
// Use Any.equals by default
open
fun
itemSameAs
(
other
:
T
)
=
this
==
other
// Use compareTo if this is Comparable or assume not same
@Suppress
(
"UNCHECKED_CAST"
)
open
fun
contentSameAs
(
other
:
T
)
=
(
this
as
?
Comparable
<
T
>)
?.
run
{
compareTo
(
other
)
==
0
}
?:
false
@Suppress
(
"UNCHECKED_CAST"
)
open
fun
genericItemSameAs
(
other
:
Any
):
Boolean
=
other
::
class
==
this
::
class
&&
itemSameAs
(
other
as
T
)
@Suppress
(
"UNCHECKED_CAST"
)
open
fun
genericContentSameAs
(
other
:
Any
):
Boolean
=
other
::
class
==
this
::
class
&&
contentSameAs
(
other
as
T
)
...
...
app/src/main/java/com/topjohnwu/magisk/di/RepositoryModule.kt
View file @
84f92bd6
...
...
@@ -7,7 +7,7 @@ import org.koin.dsl.module
val
repositoryModule
=
module
{
single
{
MagiskRepository
(
get
()
,
get
()
)
}
single
{
MagiskRepository
(
get
())
}
single
{
LogRepository
(
get
())
}
single
{
StringRepository
(
get
())
}
}
app/src/main/java/com/topjohnwu/magisk/di/ViewModelsModule.kt
View file @
84f92bd6
...
...
@@ -17,7 +17,7 @@ import org.koin.androidx.viewmodel.dsl.viewModel
import
org.koin.dsl.module
val
viewModelModules
=
module
{
viewModel
{
HideViewModel
(
get
()
)
}
viewModel
{
HideViewModel
()
}
viewModel
{
HomeViewModel
(
get
())
}
viewModel
{
LogViewModel
(
get
())
}
viewModel
{
ModuleViewModel
(
get
(),
get
(),
get
())
}
...
...
app/src/main/java/com/topjohnwu/magisk/ktx/XAndroid.kt
View file @
84f92bd6
...
...
@@ -65,40 +65,22 @@ val PackageInfo.processes
val
Array
<
out
ComponentInfo
>.
processNames
get
()
=
mapNotNull
{
it
.
processName
}
val
ApplicationInfo
.
packageInfo
:
PackageInfo
?
get
()
{
val
pm
:
PackageManager
by
inject
()
return
try
{
val
request
=
GET_ACTIVITIES
or
GET_SERVICES
or
GET_RECEIVERS
or
GET_PROVIDERS
pm
.
getPackageInfo
(
packageName
,
request
)
}
catch
(
e1
:
Exception
)
{
try
{
pm
.
activities
(
packageName
).
apply
{
services
=
pm
.
services
(
packageName
)
receivers
=
pm
.
receivers
(
packageName
)
providers
=
pm
.
providers
(
packageName
)
}
}
catch
(
e2
:
Exception
)
{
null
}
val
ApplicationInfo
.
packageInfo
:
PackageInfo
get
()
{
val
pm
=
get
<
PackageManager
>()
return
try
{
val
request
=
GET_ACTIVITIES
or
GET_SERVICES
or
GET_RECEIVERS
or
GET_PROVIDERS
pm
.
getPackageInfo
(
packageName
,
request
)
}
catch
(
e
:
Exception
)
{
// Exceed binder data transfer limit, fetch each component type separately
pm
.
getPackageInfo
(
packageName
,
0
).
apply
{
runCatching
{
activities
=
pm
.
getPackageInfo
(
packageName
,
GET_ACTIVITIES
).
activities
}
runCatching
{
services
=
pm
.
getPackageInfo
(
packageName
,
GET_SERVICES
).
services
}
runCatching
{
receivers
=
pm
.
getPackageInfo
(
packageName
,
GET_RECEIVERS
).
receivers
}
runCatching
{
providers
=
pm
.
getPackageInfo
(
packageName
,
GET_PROVIDERS
).
providers
}
}
}
fun
PackageManager
.
activities
(
packageName
:
String
)
=
getPackageInfo
(
packageName
,
GET_ACTIVITIES
)
fun
PackageManager
.
services
(
packageName
:
String
)
=
getPackageInfo
(
packageName
,
GET_SERVICES
).
services
fun
PackageManager
.
receivers
(
packageName
:
String
)
=
getPackageInfo
(
packageName
,
GET_RECEIVERS
).
receivers
fun
PackageManager
.
providers
(
packageName
:
String
)
=
getPackageInfo
(
packageName
,
GET_PROVIDERS
).
providers
}
fun
Context
.
rawResource
(
id
:
Int
)
=
resources
.
openRawResource
(
id
)
...
...
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideApp.kt
0 → 100644
View file @
84f92bd6
package
com.topjohnwu.magisk.ui.hide
import
android.content.pm.ApplicationInfo
import
android.content.pm.PackageManager
import
android.graphics.drawable.Drawable
import
com.topjohnwu.magisk.core.utils.currentLocale
import
com.topjohnwu.magisk.ktx.getLabel
class
HideTarget
(
line
:
String
)
{
val
packageName
:
String
val
process
:
String
init
{
val
split
=
line
.
split
(
Regex
(
"\\|"
),
2
)
packageName
=
split
[
0
]
process
=
split
.
getOrElse
(
1
)
{
packageName
}
}
}
class
HideAppInfo
(
info
:
ApplicationInfo
,
pm
:
PackageManager
)
:
ApplicationInfo
(
info
),
Comparable
<
HideAppInfo
>
{
val
label
=
info
.
getLabel
(
pm
)
val
iconImage
:
Drawable
=
info
.
loadIcon
(
pm
)
override
fun
compareTo
(
other
:
HideAppInfo
)
=
comparator
.
compare
(
this
,
other
)
companion
object
{
private
val
comparator
=
compareBy
<
HideAppInfo
>(
{
it
.
label
.
toLowerCase
(
currentLocale
)
},
{
it
.
packageName
}
)
}
}
data class
HideProcessInfo
(
val
name
:
String
,
val
packageName
:
String
,
val
isHidden
:
Boolean
)
class
HideAppTarget
(
val
info
:
HideAppInfo
,
val
processes
:
List
<
HideProcessInfo
>
)
:
Comparable
<
HideAppTarget
>
{
override
fun
compareTo
(
other
:
HideAppTarget
)
=
compareValuesBy
(
this
,
other
)
{
it
.
info
}
}
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideAppInfo.kt
deleted
100644 → 0
View file @
b44dcc2d
package
com.topjohnwu.magisk.ui.hide
import
android.content.pm.ApplicationInfo
import
android.graphics.drawable.Drawable
import
com.topjohnwu.magisk.ktx.packageInfo
import
com.topjohnwu.magisk.ktx.processes
data class
HideAppInfo
(
val
info
:
ApplicationInfo
,
val
name
:
String
,
val
icon
:
Drawable
)
{
val
processes
=
info
.
packageInfo
?.
processes
?.
distinct
()
?:
listOf
(
info
.
packageName
)
}
data class
StatefulProcess
(
val
name
:
String
,
val
packageName
:
String
,
val
isHidden
:
Boolean
)
data class
HideAppTarget
(
val
info
:
HideAppInfo
,
val
processes
:
List
<
StatefulProcess
>
)
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideRvItem.kt
→
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideRvItem
s
.kt
View file @
84f92bd6
...
...
@@ -9,27 +9,27 @@ import com.topjohnwu.magisk.databinding.ObservableItem
import
com.topjohnwu.magisk.ktx.startAnimations
import
com.topjohnwu.magisk.utils.addOnPropertyChangedCallback
import
com.topjohnwu.magisk.utils.set
import
com.topjohnwu.superuser.Shell
import
kotlin.math.roundToInt
class
HideItem
(
val
item
:
HideAppTarget
,
viewModel
:
HideViewModel
)
:
ObservableItem
<
HideItem
>()
{
app
:
HideAppTarget
)
:
ObservableItem
<
HideItem
>(),
Comparable
<
HideItem
>
{
override
val
layoutRes
=
R
.
layout
.
item_hide_md2
val
packageName
=
item
.
info
.
info
.
packageName
.
orEmpty
()
val
items
=
item
.
processes
.
map
{
HideProcessItem
(
it
,
viewModel
)
}
val
info
=
app
.
info
val
processes
=
app
.
processes
.
map
{
HideProcessItem
(
it
)
}
@get
:
Bindable
var
isExpanded
=
false
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
expanded
)
var
itemsChecked
=
0
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
itemsC
heckedPercent
)
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
c
heckedPercent
)
@get
:
Bindable
val
itemsCheckedPercent
get
()
=
(
itemsChecked
.
toFloat
()
/
item
s
.
size
*
100
).
roundToInt
()
val
checkedPercent
get
()
=
(
itemsChecked
.
toFloat
()
/
processe
s
.
size
*
100
).
roundToInt
()
private
var
state
:
Boolean
?
=
false
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
hiddenState
)
...
...
@@ -39,14 +39,14 @@ class HideItem(
get
()
=
state
set
(
value
)
=
set
(
value
,
state
,
{
state
=
it
},
BR
.
hiddenState
)
{
if
(
value
==
true
)
{
item
s
.
filterNot
{
it
.
isHidden
}
processe
s
.
filterNot
{
it
.
isHidden
}
}
else
{
item
s
processe
s
}.
forEach
{
it
.
toggle
()
}
}
init
{
item
s
.
forEach
{
it
.
addOnPropertyChangedCallback
(
BR
.
hidden
)
{
recalculateChecked
()
}
}
processe
s
.
forEach
{
it
.
addOnPropertyChangedCallback
(
BR
.
hidden
)
{
recalculateChecked
()
}
}
recalculateChecked
()
}
...
...
@@ -56,37 +56,44 @@ class HideItem(
}
private
fun
recalculateChecked
()
{
itemsChecked
=
item
s
.
count
{
it
.
isHidden
}
itemsChecked
=
processe
s
.
count
{
it
.
isHidden
}
state
=
when
(
itemsChecked
)
{
0
->
false
item
s
.
size
->
true
processe
s
.
size
->
true
else
->
null
}
}
override
fun
contentSameAs
(
other
:
HideItem
):
Boolean
=
item
==
other
.
item
override
fun
itemSameAs
(
other
:
HideItem
):
Boolean
=
item
.
info
==
other
.
item
.
info
override
fun
compareTo
(
other
:
HideItem
)
=
comparator
.
compare
(
this
,
other
)
companion
object
{
private
val
comparator
=
compareBy
<
HideItem
>(
{
it
.
itemsChecked
==
0
},
{
it
.
info
}
)
}
}
class
HideProcessItem
(
val
item
:
StatefulProcess
,
val
viewModel
:
HideViewModel
val
process
:
HideProcessInfo
)
:
ObservableItem
<
HideProcessItem
>()
{
override
val
layoutRes
=
R
.
layout
.
item_hide_process_md2
@get
:
Bindable
var
isHidden
=
item
.
isHidden
var
isHidden
=
process
.
isHidden
set
(
value
)
=
set
(
value
,
field
,
{
field
=
it
},
BR
.
hidden
)
{
viewModel
.
toggleItem
(
this
)
val
arg
=
if
(
isHidden
)
"add"
else
"rm"
val
(
name
,
pkg
)
=
process
Shell
.
su
(
"magiskhide --$arg $pkg $name"
).
submit
()
}
fun
toggle
()
{
isHidden
=
!
isHidden
}
override
fun
contentSameAs
(
other
:
HideProcessItem
)
=
item
==
other
.
item
override
fun
itemSameAs
(
other
:
HideProcessItem
)
=
item
.
name
==
other
.
item
.
name
override
fun
contentSameAs
(
other
:
HideProcessItem
)
=
process
==
other
.
process
override
fun
itemSameAs
(
other
:
HideProcessItem
)
=
process
.
name
==
other
.
process
.
name
}
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideTarget.kt
deleted
100644 → 0
View file @
b44dcc2d
package
com.topjohnwu.magisk.ui.hide
class
HideTarget
(
line
:
String
)
{
val
packageName
:
String
val
process
:
String
init
{
val
split
=
line
.
split
(
Regex
(
"\\|"
),
2
)
packageName
=
split
[
0
]
process
=
split
.
getOrElse
(
1
)
{
packageName
}
}
}
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideViewModel.kt
View file @
84f92bd6
package
com.topjohnwu.magisk.ui.hide
import
android.content.pm.ApplicationInfo
import
android.content.pm.PackageManager
import
androidx.databinding.Bindable
import
androidx.lifecycle.viewModelScope
import
com.topjohnwu.magisk.BR
...
...
@@ -9,16 +10,17 @@ import com.topjohnwu.magisk.arch.Queryable
import
com.topjohnwu.magisk.arch.filterableListOf
import
com.topjohnwu.magisk.arch.itemBindingOf
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.utils.currentLocale
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.ktx.get
import
com.topjohnwu.magisk.ktx.packageInfo
import
com.topjohnwu.magisk.ktx.packageName
import
com.topjohnwu.magisk.ktx.processes
import
com.topjohnwu.magisk.utils.set
import
com.topjohnwu.superuser.Shell
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.withContext
class
HideViewModel
(
private
val
magiskRepo
:
MagiskRepository
)
:
BaseViewModel
(),
Queryable
{
class
HideViewModel
:
BaseViewModel
(),
Queryable
{
override
val
queryDelay
=
1000L
...
...
@@ -45,63 +47,74 @@ class HideViewModel(
override
fun
refresh
()
=
viewModelScope
.
launch
{
state
=
State
.
LOADING
val
apps
=
magiskRepo
.
fetchApps
()
val
hides
=
magiskRepo
.
fetchHideTargets
()
val
(
appList
,
diff
)
=
withContext
(
Dispatchers
.
Default
)
{
val
list
=
apps
val
(
apps
,
diff
)
=
withContext
(
Dispatchers
.
Default
)
{
val
pm
=
get
<
PackageManager
>()
val
hides
=
Shell
.
su
(
"magiskhide --ls"
).
exec
().
out
.
map
{
HideTarget
(
it
)
}
val
apps
=
pm
.
getInstalledApplications
(
0
)
.
asSequence
()
.
filter
{
it
.
enabled
&&
!
blacklist
.
contains
(
it
.
packageName
)
}
.
map
{
HideAppInfo
(
it
,
pm
)
}
.
map
{
createTarget
(
it
,
hides
)
}
.
map
{
HideItem
(
it
,
this
@HideViewModel
)
}
.
sort
()
list
to
items
.
calculateDiff
(
list
)
.
filter
{
it
.
processes
.
isNotEmpty
()
}
.
map
{
HideItem
(
it
)
}
.
toList
()
.
sorted
()
apps
to
items
.
calculateDiff
(
apps
)
}
items
.
update
(
app
List
,
diff
)
items
.
update
(
app
s
,
diff
)
submitQuery
()
state
=
State
.
LOADED
}
// ---
private
fun
createTarget
(
app
:
HideAppInfo
,
hideList
:
List
<
HideTarget
>):
HideAppTarget
{
val
hidden
=
hideList
.
filter
{
it
.
packageName
==
app
.
info
.
packageName
}
val
packageName
=
app
.
info
.
packageName
val
processes
=
app
.
processes
.
map
{
name
->
StatefulProcess
(
name
,
packageName
,
hidden
.
any
{
name
==
it
.
process
})
private
fun
createTarget
(
info
:
HideAppInfo
,
hideList
:
List
<
HideTarget
>):
HideAppTarget
{
val
pkg
=
info
.
packageName
val
hidden
=
hideList
.
filter
{
it
.
packageName
==
pkg
}
val
processNames
=
info
.
packageInfo
.
processes
.
distinct
()
val
processes
=
processNames
.
map
{
name
->
HideProcessInfo
(
name
,
pkg
,
hidden
.
any
{
name
==
it
.
process
})
}
return
HideAppTarget
(
app
,
processes
)
return
HideAppTarget
(
info
,
processes
)
}
private
fun
List
<
HideItem
>.
sort
()
=
compareByDescending
<
HideItem
>
{
it
.
itemsChecked
!=
0
}
.
thenBy
{
it
.
item
.
info
.
name
.
toLowerCase
(
currentLocale
)
}
.
thenBy
{
it
.
item
.
info
.
info
.
packageName
}
.
let
{
sortedWith
(
it
)
}
// ---
override
fun
query
()
=
items
.
filter
{
fun
showHidden
()=
it
.
itemsChecked
!=
0
override
fun
query
()
{
items
.
filter
{
fun
showHidden
()
=
it
.
itemsChecked
!=
0
fun
filterSystem
():
Boolean
{
return
isShowSystem
||
it
.
item
.
info
.
info
.
flags
and
ApplicationInfo
.
FLAG_SYSTEM
==
0
}
fun
filterSystem
()
=
isShowSystem
||
it
.
info
.
flags
and
ApplicationInfo
.
FLAG_SYSTEM
==
0
fun
filterQuery
():
Boolean
{
fun
inName
()
=
it
.
item
.
info
.
name
.
contains
(
query
,
true
)
fun
inPackage
()
=
it
.
item
.
info
.
info
.
packageName
.
contains
(
query
,
true
)
fun
inProcesses
()
=
it
.
item
.
processes
.
any
{
it
.
name
.
contains
(
query
,
true
)
}
return
inName
()
||
inPackage
()
||
inProcesses
()
}
fun
filterQuery
():
Boolean
{
fun
inName
()
=
it
.
info
.
label
.
contains
(
query
,
true
)
fun
inPackage
()
=
it
.
info
.
packageName
.
contains
(
query
,
true
)
fun
inProcesses
()
=
it
.
processes
.
any
{
p
->
p
.
process
.
name
.
contains
(
query
,
true
)
}
return
inName
()
||
inPackage
()
||
inProcesses
()
}
showHidden
()
||
(
filterSystem
()
&&
filterQuery
())
showHidden
()
||
(
filterSystem
()
&&
filterQuery
())
}
state
=
State
.
LOADED
}
// ---
fun
toggleItem
(
item
:
HideProcessItem
)
{
magiskRepo
.
toggleHide
(
item
.
isHidden
,
item
.
item
.
packageName
,
item
.
item
.
name
)
}
fun
resetQuery
()
{
query
=
""
}
companion
object
{
private
val
blacklist
by
lazy
{
listOf
(
packageName
,
"android"
,
"com.android.chrome"
,
"com.chrome.beta"
,
"com.chrome.dev"
,
"com.chrome.canary"
,
"com.android.webview"
,
"com.google.android.webview"
)
}
}
}
app/src/main/res/layout/item_hide_md2.xml
View file @
84f92bd6
...
...
@@ -39,12 +39,12 @@
android:id=
"@+id/hide_icon"
style=
"@style/WidgetFoundation.Image"
android:layout_margin=
"@dimen/l1"
android:src=
"@{item.i
tem.info.icon
}"
android:src=
"@{item.i
nfo.iconImage
}"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
app:layout_constraintVertical_bias=
"0"
tools:src=
"@drawable/ic_
magisk
"
/>
tools:src=
"@drawable/ic_
launcher
"
/>
<TextView
android:id=
"@+id/hide_name"
...
...
@@ -53,7 +53,7 @@
android:layout_marginStart=
"@dimen/l1"
android:ellipsize=
"middle"
android:singleLine=
"true"
android:text=
"@{item.i
tem.info.name
}"
android:text=
"@{item.i
nfo.label
}"
android:textAppearance=
"@style/AppearanceFoundation.Body"
android:textStyle=
"bold"
app:layout_constraintBottom_toTopOf=
"@+id/hide_package"
...
...
@@ -65,10 +65,9 @@
<TextView
android:id=
"@+id/hide_package"
gone=
"@{item.item.info.info.packageName.empty}"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:text=
"@{item.i
tem.info.i
nfo.packageName}"
android:text=
"@{item.info.packageName}"
android:textAppearance=
"@style/AppearanceFoundation.Caption.Variant"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"@+id/hide_name"
...
...
@@ -90,7 +89,7 @@
<androidx.recyclerview.widget.RecyclerView
goneUnless=
"@{item.isExpanded}"
itemBinding=
"@{viewModel.itemInternalBinding}"
items=
"@{item.
item
s}"
items=
"@{item.
processe
s}"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:background=
"?colorSurfaceVariant"
...
...
@@ -105,7 +104,7 @@
style=
"@style/WidgetFoundation.ProgressBar"
android:layout_width=
"match_parent"
android:layout_gravity=
"top"
android:progress=
"@{item.
itemsC
heckedPercent}"
/>
android:progress=
"@{item.
c
heckedPercent}"
/>
</com.google.android.material.card.MaterialCardView>
...
...
app/src/main/res/layout/item_hide_process_md2.xml
View file @
84f92bd6
...
...
@@ -29,7 +29,8 @@
android:layout_marginEnd=
"@dimen/l1"
android:layout_marginBottom=
"@dimen/l_75"
android:singleLine=
"true"
android:text=
"@{item.item.name}"
android:ellipsize=
"middle"
android:text=
"@{item.process.name}"
android:textAppearance=
"@style/AppearanceFoundation.Caption.Variant"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toStartOf=
"@+id/hide_process_checkbox"
...
...
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