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
1e24c72c
Commit
1e24c72c
authored
Mar 13, 2019
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use our own existing implementation
parent
21756496
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
269 additions
and
345 deletions
+269
-345
build.gradle
app/build.gradle
+0
-1
AppViewBinder.java
...ain/java/com/topjohnwu/magisk/adapters/AppViewBinder.java
+0
-170
ApplicationAdapter.java
...ava/com/topjohnwu/magisk/adapters/ApplicationAdapter.java
+261
-84
ProcessViewBinder.java
...java/com/topjohnwu/magisk/adapters/ProcessViewBinder.java
+0
-80
MagiskHideFragment.java
...va/com/topjohnwu/magisk/fragments/MagiskHideFragment.java
+8
-10
No files found.
app/build.gradle
View file @
1e24c72c
...
@@ -29,7 +29,6 @@ dependencies {
...
@@ -29,7 +29,6 @@ dependencies {
implementation
'com.caverock:androidsvg-aar:1.3'
implementation
'com.caverock:androidsvg-aar:1.3'
implementation
'org.kamranzafar:jtar:2.3'
implementation
'org.kamranzafar:jtar:2.3'
implementation
'net.sourceforge.streamsupport:android-retrostreams:1.7.0'
implementation
'net.sourceforge.streamsupport:android-retrostreams:1.7.0'
implementation
'me.drakeet.multitype:multitype:3.5.0'
implementation
'com.github.sevar83:indeterminate-checkbox:1.0.5'
implementation
'com.github.sevar83:indeterminate-checkbox:1.0.5'
def
androidXVersion
=
"1.0.0"
def
androidXVersion
=
"1.0.0"
...
...
app/src/main/java/com/topjohnwu/magisk/adapters/AppViewBinder.java
deleted
100644 → 0
View file @
21756496
package
com
.
topjohnwu
.
magisk
.
adapters
;
import
android.content.res.Resources
;
import
android.graphics.drawable.Drawable
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.Nullable
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.buildware.widget.indeterm.IndeterminateCheckBox
;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.superuser.Shell
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.List
;
import
butterknife.BindView
;
import
java9.util.Comparators
;
import
me.drakeet.multitype.ItemViewBinder
;
public
class
AppViewBinder
extends
ItemViewBinder
<
AppViewBinder
.
App
,
AppViewBinder
.
ViewHolder
>
{
private
final
List
<
Object
>
items
;
AppViewBinder
(
List
<
Object
>
items
)
{
this
.
items
=
items
;
}
@Override
protected
@NonNull
ViewHolder
onCreateViewHolder
(
@NonNull
LayoutInflater
inflater
,
@NonNull
ViewGroup
parent
)
{
return
new
ViewHolder
(
inflater
.
inflate
(
R
.
layout
.
list_item_hide_app
,
parent
,
false
));
}
@Override
protected
void
onBindViewHolder
(
@NonNull
ViewHolder
holder
,
@NonNull
App
app
)
{
IndeterminateCheckBox
.
OnStateChangedListener
listener
=
(
IndeterminateCheckBox
indeterminateCheckBox
,
@Nullable
Boolean
stat
)
->
{
if
(
stat
!=
null
&&
stat
)
{
for
(
ProcessViewBinder
.
Process
process
:
app
.
processes
)
{
Shell
.
su
(
"magiskhide --add "
+
process
.
fullname
).
submit
();
process
.
hidden
=
true
;
}
}
else
if
(
stat
!=
null
)
{
for
(
ProcessViewBinder
.
Process
process
:
app
.
processes
)
{
Shell
.
su
(
"magiskhide --rm "
+
process
.
fullname
).
submit
();
process
.
hidden
=
false
;
}
}
app
.
getStatBool
(
true
);
};
holder
.
app_name
.
setText
(
app
.
name
);
holder
.
app_icon
.
setImageDrawable
(
app
.
icon
);
holder
.
package_name
.
setText
(
app
.
packageName
);
holder
.
checkBox
.
setOnStateChangedListener
(
null
);
holder
.
checkBox
.
setState
(
app
.
getStatBool
(
false
));
holder
.
checkBox
.
setOnStateChangedListener
(
listener
);
if
(
app
.
expand
)
{
holder
.
checkBox
.
setVisibility
(
View
.
GONE
);
setBottomMargin
(
holder
.
itemView
,
0
);
}
else
{
holder
.
checkBox
.
setVisibility
(
View
.
VISIBLE
);
setBottomMargin
(
holder
.
itemView
,
2
);
}
holder
.
itemView
.
setOnClickListener
((
v
)
->
{
int
index
=
getPosition
(
holder
);
if
(
app
.
expand
)
{
app
.
expand
=
false
;
items
.
removeAll
(
app
.
processes
);
getAdapter
().
notifyItemRangeRemoved
(
index
+
1
,
app
.
processes
.
size
());
setBottomMargin
(
holder
.
itemView
,
2
);
holder
.
checkBox
.
setOnStateChangedListener
(
null
);
holder
.
checkBox
.
setVisibility
(
View
.
VISIBLE
);
holder
.
checkBox
.
setState
(
app
.
getStatBool
(
true
));
holder
.
checkBox
.
setOnStateChangedListener
(
listener
);
}
else
{
holder
.
checkBox
.
setVisibility
(
View
.
GONE
);
setBottomMargin
(
holder
.
itemView
,
0
);
app
.
expand
=
true
;
items
.
addAll
(
index
+
1
,
app
.
processes
);
getAdapter
().
notifyItemRangeInserted
(
index
+
1
,
app
.
processes
.
size
());
}
});
}
private
void
setBottomMargin
(
View
view
,
int
dp
)
{
ViewGroup
.
LayoutParams
params
=
view
.
getLayoutParams
();
ViewGroup
.
MarginLayoutParams
marginParams
;
if
(
params
instanceof
ViewGroup
.
MarginLayoutParams
)
{
marginParams
=
(
ViewGroup
.
MarginLayoutParams
)
params
;
}
else
{
marginParams
=
new
ViewGroup
.
MarginLayoutParams
(
params
);
}
int
px
=
(
int
)
(
0.5f
+
dp
*
Resources
.
getSystem
().
getDisplayMetrics
().
density
);
marginParams
.
bottomMargin
=
px
;
view
.
setLayoutParams
(
marginParams
);
}
static
class
ViewHolder
extends
RecyclerView
.
ViewHolder
{
@BindView
(
R
.
id
.
app_icon
)
ImageView
app_icon
;
@BindView
(
R
.
id
.
app_name
)
TextView
app_name
;
@BindView
(
R
.
id
.
package_name
)
TextView
package_name
;
@BindView
(
R
.
id
.
checkbox
)
IndeterminateCheckBox
checkBox
;
ViewHolder
(
View
itemView
)
{
super
(
itemView
);
new
AppViewBinder$ViewHolder_ViewBinding
(
this
,
itemView
);
}
}
public
static
class
App
implements
Comparable
<
App
>
{
Drawable
icon
;
String
name
;
String
packageName
;
int
flags
;
List
<
ProcessViewBinder
.
Process
>
processes
;
boolean
expand
=
false
;
int
stat
=
-
1
;
App
(
Drawable
icon
,
String
name
,
String
packageName
,
int
flags
)
{
this
.
icon
=
icon
;
this
.
name
=
name
;
this
.
packageName
=
packageName
;
this
.
flags
=
flags
;
this
.
processes
=
new
ArrayList
<>();
}
int
getStat
(
boolean
update
)
{
if
(
stat
>
1
&&
!
update
)
return
stat
;
int
n
=
0
;
for
(
ProcessViewBinder
.
Process
process
:
processes
)
{
if
(
process
.
hidden
)
n
++;
}
if
(
n
==
processes
.
size
())
stat
=
2
;
else
if
(
n
>
0
)
stat
=
1
;
else
stat
=
0
;
return
stat
;
}
Boolean
getStatBool
(
boolean
update
)
{
int
stat
=
getStat
(
update
);
switch
(
stat
)
{
case
2
:
return
true
;
case
1
:
return
null
;
case
0
:
default
:
return
false
;
}
}
@Override
public
int
compareTo
(
App
o
)
{
Comparator
<
App
>
c
;
c
=
Comparators
.
comparing
((
App
t
)
->
t
.
stat
);
c
=
Comparators
.
reversed
(
c
);
c
=
Comparators
.
thenComparing
(
c
,
t
->
t
.
name
,
String:
:
compareToIgnoreCase
);
return
c
.
compare
(
this
,
o
);
}
}
}
app/src/main/java/com/topjohnwu/magisk/adapters/ApplicationAdapter.java
View file @
1e24c72c
This diff is collapsed.
Click to expand it.
app/src/main/java/com/topjohnwu/magisk/adapters/ProcessViewBinder.java
deleted
100644 → 0
View file @
21756496
package
com
.
topjohnwu
.
magisk
.
adapters
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.CheckBox
;
import
android.widget.TextView
;
import
androidx.annotation.NonNull
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.utils.Utils
;
import
com.topjohnwu.superuser.Shell
;
import
java.util.Comparator
;
import
butterknife.BindView
;
import
java9.util.Comparators
;
import
me.drakeet.multitype.ItemViewBinder
;
public
class
ProcessViewBinder
extends
ItemViewBinder
<
ProcessViewBinder
.
Process
,
ProcessViewBinder
.
ViewHolder
>
{
@Override
protected
@NonNull
ViewHolder
onCreateViewHolder
(
@NonNull
LayoutInflater
inflater
,
@NonNull
ViewGroup
parent
)
{
return
new
ViewHolder
(
inflater
.
inflate
(
R
.
layout
.
list_item_hide_process
,
parent
,
false
));
}
@Override
protected
void
onBindViewHolder
(
@NonNull
ViewHolder
holder
,
@NonNull
Process
process
)
{
holder
.
process
.
setText
(
process
.
name
);
holder
.
checkbox
.
setOnCheckedChangeListener
(
null
);
holder
.
checkbox
.
setChecked
(
process
.
hidden
);
holder
.
checkbox
.
setOnCheckedChangeListener
((
v
,
isChecked
)
->
{
if
(
isChecked
)
{
Shell
.
su
(
"magiskhide --add "
+
process
.
fullname
).
submit
();
process
.
hidden
=
true
;
}
else
{
Shell
.
su
(
"magiskhide --rm "
+
process
.
fullname
).
submit
();
process
.
hidden
=
false
;
}
});
}
static
class
ViewHolder
extends
RecyclerView
.
ViewHolder
{
@BindView
(
R
.
id
.
process
)
TextView
process
;
@BindView
(
R
.
id
.
checkbox
)
CheckBox
checkbox
;
ViewHolder
(
View
itemView
)
{
super
(
itemView
);
new
ProcessViewBinder$ViewHolder_ViewBinding
(
this
,
itemView
);
}
}
public
static
class
Process
implements
Comparable
<
Process
>
{
String
name
;
boolean
hidden
;
String
fullname
;
String
packageName
;
Process
(
String
name
,
boolean
hidden
,
String
packageName
)
{
this
.
name
=
name
;
this
.
hidden
=
hidden
;
this
.
packageName
=
packageName
;
this
.
fullname
=
Utils
.
fmt
(
"%s %s"
,
packageName
,
name
);
}
@Override
public
int
compareTo
(
Process
o
)
{
Comparator
<
Process
>
c
;
c
=
Comparators
.
comparing
((
Process
t
)
->
!
t
.
name
.
startsWith
(
t
.
packageName
));
c
=
Comparators
.
thenComparing
(
c
,
t
->
t
.
name
,
String:
:
compareToIgnoreCase
);
return
c
.
compare
(
this
,
o
);
}
}
}
app/src/main/java/com/topjohnwu/magisk/fragments/MagiskHideFragment.java
View file @
1e24c72c
...
@@ -21,7 +21,6 @@ import com.topjohnwu.magisk.components.BaseFragment;
...
@@ -21,7 +21,6 @@ import com.topjohnwu.magisk.components.BaseFragment;
import
com.topjohnwu.magisk.utils.Topic
;
import
com.topjohnwu.magisk.utils.Topic
;
import
butterknife.BindView
;
import
butterknife.BindView
;
import
me.drakeet.multitype.MultiTypeAdapter
;
public
class
MagiskHideFragment
extends
BaseFragment
implements
Topic
.
Subscriber
{
public
class
MagiskHideFragment
extends
BaseFragment
implements
Topic
.
Subscriber
{
...
@@ -29,7 +28,7 @@ public class MagiskHideFragment extends BaseFragment implements Topic.Subscriber
...
@@ -29,7 +28,7 @@ public class MagiskHideFragment extends BaseFragment implements Topic.Subscriber
@BindView
(
R
.
id
.
recyclerView
)
RecyclerView
recyclerView
;
@BindView
(
R
.
id
.
recyclerView
)
RecyclerView
recyclerView
;
private
SearchView
search
;
private
SearchView
search
;
private
ApplicationAdapter
a
pplicationA
dapter
;
private
ApplicationAdapter
adapter
;
private
SearchView
.
OnQueryTextListener
searchListener
;
private
SearchView
.
OnQueryTextListener
searchListener
;
@Override
@Override
...
@@ -44,23 +43,22 @@ public class MagiskHideFragment extends BaseFragment implements Topic.Subscriber
...
@@ -44,23 +43,22 @@ public class MagiskHideFragment extends BaseFragment implements Topic.Subscriber
View
view
=
inflater
.
inflate
(
R
.
layout
.
fragment_magisk_hide
,
container
,
false
);
View
view
=
inflater
.
inflate
(
R
.
layout
.
fragment_magisk_hide
,
container
,
false
);
unbinder
=
new
MagiskHideFragment_ViewBinding
(
this
,
view
);
unbinder
=
new
MagiskHideFragment_ViewBinding
(
this
,
view
);
MultiTypeAdapter
adapter
=
new
MultiTypeAdapter
();
adapter
=
new
ApplicationAdapter
(
requireActivity
());
applicationAdapter
=
new
ApplicationAdapter
(
requireActivity
(),
adapter
);
recyclerView
.
setAdapter
(
adapter
);
recyclerView
.
setAdapter
(
adapter
);
mSwipeRefreshLayout
.
setRefreshing
(
true
);
mSwipeRefreshLayout
.
setRefreshing
(
true
);
mSwipeRefreshLayout
.
setOnRefreshListener
(
a
pplicationA
dapter:
:
refresh
);
mSwipeRefreshLayout
.
setOnRefreshListener
(
adapter:
:
refresh
);
searchListener
=
new
SearchView
.
OnQueryTextListener
()
{
searchListener
=
new
SearchView
.
OnQueryTextListener
()
{
@Override
@Override
public
boolean
onQueryTextSubmit
(
String
query
)
{
public
boolean
onQueryTextSubmit
(
String
query
)
{
a
pplicationA
dapter
.
filter
(
query
);
adapter
.
filter
(
query
);
return
false
;
return
false
;
}
}
@Override
@Override
public
boolean
onQueryTextChange
(
String
newText
)
{
public
boolean
onQueryTextChange
(
String
newText
)
{
a
pplicationA
dapter
.
filter
(
newText
);
adapter
.
filter
(
newText
);
return
false
;
return
false
;
}
}
};
};
...
@@ -84,8 +82,8 @@ public class MagiskHideFragment extends BaseFragment implements Topic.Subscriber
...
@@ -84,8 +82,8 @@ public class MagiskHideFragment extends BaseFragment implements Topic.Subscriber
boolean
showSystem
=
!
item
.
isChecked
();
boolean
showSystem
=
!
item
.
isChecked
();
item
.
setChecked
(
showSystem
);
item
.
setChecked
(
showSystem
);
Config
.
set
(
Config
.
Key
.
SHOW_SYSTEM_APP
,
showSystem
);
Config
.
set
(
Config
.
Key
.
SHOW_SYSTEM_APP
,
showSystem
);
a
pplicationA
dapter
.
setShowSystem
(
showSystem
);
adapter
.
setShowSystem
(
showSystem
);
a
pplicationA
dapter
.
filter
(
search
.
getQuery
().
toString
());
adapter
.
filter
(
search
.
getQuery
().
toString
());
}
}
return
true
;
return
true
;
}
}
...
@@ -98,6 +96,6 @@ public class MagiskHideFragment extends BaseFragment implements Topic.Subscriber
...
@@ -98,6 +96,6 @@ public class MagiskHideFragment extends BaseFragment implements Topic.Subscriber
@Override
@Override
public
void
onPublish
(
int
topic
,
Object
[]
result
)
{
public
void
onPublish
(
int
topic
,
Object
[]
result
)
{
mSwipeRefreshLayout
.
setRefreshing
(
false
);
mSwipeRefreshLayout
.
setRefreshing
(
false
);
a
pplicationA
dapter
.
filter
(
search
.
getQuery
().
toString
());
adapter
.
filter
(
search
.
getQuery
().
toString
());
}
}
}
}
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