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
2e091b04
Commit
2e091b04
authored
Jul 04, 2018
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Sort hidden apps to the top
parent
60296493
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
39 additions
and
37 deletions
+39
-37
MagiskHideFragment.java
src/full/java/com/topjohnwu/magisk/MagiskHideFragment.java
+2
-6
ApplicationAdapter.java
...ava/com/topjohnwu/magisk/adapters/ApplicationAdapter.java
+37
-31
No files found.
src/full/java/com/topjohnwu/magisk/MagiskHideFragment.java
View file @
2e091b04
...
...
@@ -28,7 +28,6 @@ public class MagiskHideFragment extends Fragment implements Topic.Subscriber {
private
ApplicationAdapter
appAdapter
;
private
SearchView
.
OnQueryTextListener
searchListener
;
private
String
lastFilter
;
@Override
public
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
...
...
@@ -41,25 +40,22 @@ public class MagiskHideFragment extends Fragment implements Topic.Subscriber {
public
View
onCreateView
(
LayoutInflater
inflater
,
@Nullable
ViewGroup
container
,
@Nullable
Bundle
savedInstanceState
)
{
View
view
=
inflater
.
inflate
(
R
.
layout
.
fragment_magisk_hide
,
container
,
false
);
unbinder
=
ButterKnife
.
bind
(
this
,
view
);
lastFilter
=
""
;
mSwipeRefreshLayout
.
setRefreshing
(
true
);
mSwipeRefreshLayout
.
setOnRefreshListener
(()
->
appAdapter
.
refresh
());
appAdapter
=
new
ApplicationAdapter
(
getActivity
()
);
appAdapter
=
new
ApplicationAdapter
();
recyclerView
.
setAdapter
(
appAdapter
);
searchListener
=
new
SearchView
.
OnQueryTextListener
()
{
@Override
public
boolean
onQueryTextSubmit
(
String
query
)
{
lastFilter
=
query
;
appAdapter
.
filter
(
query
);
return
false
;
}
@Override
public
boolean
onQueryTextChange
(
String
newText
)
{
lastFilter
=
newText
;
appAdapter
.
filter
(
newText
);
return
false
;
}
...
...
@@ -86,7 +82,7 @@ public class MagiskHideFragment extends Fragment implements Topic.Subscriber {
@Override
public
void
onTopicPublished
(
Topic
topic
)
{
mSwipeRefreshLayout
.
setRefreshing
(
false
);
appAdapter
.
filter
(
lastFilter
);
appAdapter
.
filter
(
null
);
}
@Override
...
...
src/full/java/com/topjohnwu/magisk/adapters/ApplicationAdapter.java
View file @
2e091b04
package
com
.
topjohnwu
.
magisk
.
adapters
;
import
android.content.Context
;
import
android.content.pm.ApplicationInfo
;
import
android.content.pm.PackageManager
;
import
android.support.v7.widget.RecyclerView
;
...
...
@@ -13,11 +12,10 @@ import android.widget.Filter;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
com.topjohnwu.magisk.MagiskManager
;
import
com.topjohnwu.magisk.R
;
import
com.topjohnwu.magisk.asyncs.ParallelTask
;
import
com.topjohnwu.magisk.utils.Const
;
import
com.topjohnwu.magisk.utils.Topic
;
import
com.topjohnwu.magisk.utils.Utils
;
import
com.topjohnwu.superuser.Shell
;
import
java.util.ArrayList
;
...
...
@@ -30,25 +28,19 @@ import butterknife.ButterKnife;
public
class
ApplicationAdapter
extends
RecyclerView
.
Adapter
<
ApplicationAdapter
.
ViewHolder
>
{
private
List
<
ApplicationInfo
>
mOriginalList
,
m
List
;
private
List
<
String
>
mH
ideList
;
private
List
<
ApplicationInfo
>
fullList
,
show
List
;
private
List
<
String
>
h
ideList
;
private
PackageManager
pm
;
private
ApplicationFilter
filter
;
private
Topic
magiskHideDone
;
public
ApplicationAdapter
(
Context
context
)
{
mOriginalList
=
m
List
=
Collections
.
emptyList
();
mH
ideList
=
Collections
.
emptyList
();
public
ApplicationAdapter
()
{
fullList
=
show
List
=
Collections
.
emptyList
();
h
ideList
=
Collections
.
emptyList
();
filter
=
new
ApplicationFilter
();
pm
=
context
.
getPackageManager
();
magiskHideDone
=
Utils
.
getMagiskManager
(
context
).
magiskHideDone
;
pm
=
MagiskManager
.
get
().
getPackageManager
();
new
LoadApps
().
exec
();
}
private
boolean
lowercaseContains
(
CharSequence
string
,
CharSequence
nonNullLowercaseSearch
)
{
return
!
TextUtils
.
isEmpty
(
string
)
&&
string
.
toString
().
toLowerCase
().
contains
(
nonNullLowercaseSearch
);
}
@Override
public
ViewHolder
onCreateViewHolder
(
ViewGroup
parent
,
int
viewType
)
{
View
mView
=
LayoutInflater
.
from
(
parent
.
getContext
()).
inflate
(
R
.
layout
.
list_item_app
,
parent
,
false
);
...
...
@@ -57,28 +49,28 @@ public class ApplicationAdapter extends RecyclerView.Adapter<ApplicationAdapter.
@Override
public
void
onBindViewHolder
(
final
ViewHolder
holder
,
int
position
)
{
ApplicationInfo
info
=
m
List
.
get
(
position
);
ApplicationInfo
info
=
show
List
.
get
(
position
);
holder
.
appIcon
.
setImageDrawable
(
info
.
loadIcon
(
pm
));
holder
.
appName
.
setText
(
info
.
loadLabel
(
pm
));
holder
.
appPackage
.
setText
(
info
.
packageName
);
holder
.
checkBox
.
setOnCheckedChangeListener
(
null
);
holder
.
checkBox
.
setChecked
(
mH
ideList
.
contains
(
info
.
packageName
));
holder
.
checkBox
.
setChecked
(
h
ideList
.
contains
(
info
.
packageName
));
holder
.
checkBox
.
setOnCheckedChangeListener
((
v
,
isChecked
)
->
{
if
(
isChecked
)
{
Shell
.
Async
.
su
(
"magiskhide --add "
+
info
.
packageName
);
mH
ideList
.
add
(
info
.
packageName
);
h
ideList
.
add
(
info
.
packageName
);
}
else
{
Shell
.
Async
.
su
(
"magiskhide --rm "
+
info
.
packageName
);
mH
ideList
.
remove
(
info
.
packageName
);
h
ideList
.
remove
(
info
.
packageName
);
}
});
}
@Override
public
int
getItemCount
()
{
return
m
List
.
size
();
return
show
List
.
size
();
}
public
void
filter
(
String
constraint
)
{
...
...
@@ -104,17 +96,21 @@ public class ApplicationAdapter extends RecyclerView.Adapter<ApplicationAdapter.
private
class
ApplicationFilter
extends
Filter
{
private
boolean
lowercaseContains
(
String
s
,
CharSequence
filter
)
{
return
!
TextUtils
.
isEmpty
(
s
)
&&
s
.
toLowerCase
().
contains
(
filter
);
}
@Override
protected
FilterResults
performFiltering
(
CharSequence
constraint
)
{
if
(
constraint
==
null
||
constraint
.
length
()
==
0
)
{
mList
=
mOrigina
lList
;
showList
=
ful
lList
;
}
else
{
m
List
=
new
ArrayList
<>();
show
List
=
new
ArrayList
<>();
String
filter
=
constraint
.
toString
().
toLowerCase
();
for
(
ApplicationInfo
info
:
mOrigina
lList
)
{
if
(
lowercaseContains
(
info
.
loadLabel
(
pm
),
filter
)
for
(
ApplicationInfo
info
:
ful
lList
)
{
if
(
lowercaseContains
(
info
.
loadLabel
(
pm
)
.
toString
()
,
filter
)
||
lowercaseContains
(
info
.
packageName
,
filter
))
{
m
List
.
add
(
info
);
show
List
.
add
(
info
);
}
}
}
...
...
@@ -131,22 +127,32 @@ public class ApplicationAdapter extends RecyclerView.Adapter<ApplicationAdapter.
@Override
protected
Void
doInBackground
(
Void
...
voids
)
{
mOriginalList
=
pm
.
getInstalledApplications
(
0
);
for
(
Iterator
<
ApplicationInfo
>
i
=
mOriginalList
.
iterator
();
i
.
hasNext
();
)
{
fullList
=
pm
.
getInstalledApplications
(
0
);
hideList
=
Shell
.
Sync
.
su
(
"magiskhide --ls"
);
for
(
Iterator
<
ApplicationInfo
>
i
=
fullList
.
iterator
();
i
.
hasNext
();
)
{
ApplicationInfo
info
=
i
.
next
();
if
(
Const
.
HIDE_BLACKLIST
.
contains
(
info
.
packageName
)
||
!
info
.
enabled
)
{
i
.
remove
();
}
}
Collections
.
sort
(
mOriginalList
,
(
a
,
b
)
->
a
.
loadLabel
(
pm
).
toString
().
toLowerCase
()
.
compareTo
(
b
.
loadLabel
(
pm
).
toString
().
toLowerCase
()));
mHideList
=
Shell
.
Sync
.
su
(
"magiskhide --ls"
);
Collections
.
sort
(
fullList
,
(
a
,
b
)
->
{
boolean
ah
=
hideList
.
contains
(
a
.
packageName
);
boolean
bh
=
hideList
.
contains
(
b
.
packageName
);
if
(
ah
==
bh
)
{
return
a
.
loadLabel
(
pm
).
toString
().
toLowerCase
().
compareTo
(
b
.
loadLabel
(
pm
).
toString
().
toLowerCase
());
}
else
if
(
ah
)
{
return
-
1
;
}
else
{
return
1
;
}
});
return
null
;
}
@Override
protected
void
onPostExecute
(
Void
v
)
{
magiskHideDone
.
publish
(
false
);
MagiskManager
.
get
().
magiskHideDone
.
publish
(
false
);
}
}
}
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