diff --git a/app/src/main/java/com/topjohnwu/magisk/MagiskHideFragment.java b/app/src/main/java/com/topjohnwu/magisk/MagiskHideFragment.java index ccc70407e..2f610a9b5 100644 --- a/app/src/main/java/com/topjohnwu/magisk/MagiskHideFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/MagiskHideFragment.java @@ -15,7 +15,7 @@ import android.view.ViewGroup; import android.widget.SearchView; import com.topjohnwu.magisk.adapters.ApplicationAdapter; -import com.topjohnwu.magisk.asyncs.LoadApps; +import com.topjohnwu.magisk.asyncs.MagiskHide; import com.topjohnwu.magisk.components.Fragment; import com.topjohnwu.magisk.utils.CallbackEvent; import com.topjohnwu.magisk.utils.Logger; @@ -50,7 +50,7 @@ public class MagiskHideFragment extends Fragment implements CallbackEvent.Listen PackageManager packageManager = getActivity().getPackageManager(); mSwipeRefreshLayout.setRefreshing(true); - mSwipeRefreshLayout.setOnRefreshListener(() -> new LoadApps(getActivity()).exec()); + mSwipeRefreshLayout.setOnRefreshListener(() -> new MagiskHide(getActivity()).list()); appAdapter = new ApplicationAdapter(packageManager); recyclerView.setAdapter(appAdapter); @@ -71,8 +71,8 @@ public class MagiskHideFragment extends Fragment implements CallbackEvent.Listen } }; - if (getApplication().packageLoadDone.isTriggered) - onTrigger(getApplication().packageLoadDone); + if (getApplication().magiskHideDone.isTriggered) + onTrigger(getApplication().magiskHideDone); return view; } @@ -88,12 +88,12 @@ public class MagiskHideFragment extends Fragment implements CallbackEvent.Listen public void onStart() { super.onStart(); getActivity().setTitle(R.string.magiskhide); - getApplication().packageLoadDone.register(this); + getApplication().magiskHideDone.register(this); } @Override public void onStop() { - getApplication().packageLoadDone.unRegister(this); + getApplication().magiskHideDone.unRegister(this); super.onStop(); } diff --git a/app/src/main/java/com/topjohnwu/magisk/MagiskManager.java b/app/src/main/java/com/topjohnwu/magisk/MagiskManager.java index 2d2b86c87..172476cdc 100644 --- a/app/src/main/java/com/topjohnwu/magisk/MagiskManager.java +++ b/app/src/main/java/com/topjohnwu/magisk/MagiskManager.java @@ -28,7 +28,7 @@ public class MagiskManager extends Application { // Events public final CallbackEvent blockDetectionDone = new CallbackEvent<>(); - public final CallbackEvent packageLoadDone = new CallbackEvent<>(); + public final CallbackEvent magiskHideDone = new CallbackEvent<>(); public final CallbackEvent reloadMainActivity = new CallbackEvent<>(); public final CallbackEvent moduleLoadDone = new CallbackEvent<>(); public final CallbackEvent repoLoadDone = new CallbackEvent<>(); diff --git a/app/src/main/java/com/topjohnwu/magisk/adapters/ApplicationAdapter.java b/app/src/main/java/com/topjohnwu/magisk/adapters/ApplicationAdapter.java index d3c7e7c2a..7c9086df9 100644 --- a/app/src/main/java/com/topjohnwu/magisk/adapters/ApplicationAdapter.java +++ b/app/src/main/java/com/topjohnwu/magisk/adapters/ApplicationAdapter.java @@ -50,8 +50,8 @@ public class ApplicationAdapter extends RecyclerView.Adapter listApps, List hideList) { - mOriginalList = mList = Collections.unmodifiableList(listApps); - mHideList = new ArrayList<>(hideList); + mOriginalList = mList = listApps; + mHideList = hideList; notifyDataSetChanged(); } diff --git a/app/src/main/java/com/topjohnwu/magisk/asyncs/LoadApps.java b/app/src/main/java/com/topjohnwu/magisk/asyncs/LoadApps.java index c9c544e01..14a91e86c 100644 --- a/app/src/main/java/com/topjohnwu/magisk/asyncs/LoadApps.java +++ b/app/src/main/java/com/topjohnwu/magisk/asyncs/LoadApps.java @@ -4,14 +4,13 @@ import android.app.Activity; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; -import com.topjohnwu.magisk.MagiskManager; import com.topjohnwu.magisk.adapters.ApplicationAdapter; -import com.topjohnwu.magisk.utils.Shell; import java.util.Collections; import java.util.Iterator; +import java.util.List; -public class LoadApps extends SerialTask { +public class LoadApps extends ParallelTask { public LoadApps(Activity context) { super(context); @@ -20,20 +19,20 @@ public class LoadApps extends SerialTask { @Override protected Void doInBackground(Void... voids) { PackageManager pm = magiskManager.getPackageManager(); - magiskManager.appList = pm.getInstalledApplications(0); - for (Iterator i = magiskManager.appList.iterator(); i.hasNext(); ) { + List list = pm.getInstalledApplications(0); + for (Iterator i = list.iterator(); i.hasNext(); ) { ApplicationInfo info = i.next(); if (ApplicationAdapter.BLACKLIST.contains(info.packageName) || !info.enabled) i.remove(); } - Collections.sort(magiskManager.appList, (a, b) -> a.loadLabel(pm).toString().toLowerCase() + Collections.sort(list, (a, b) -> a.loadLabel(pm).toString().toLowerCase() .compareTo(b.loadLabel(pm).toString().toLowerCase())); - magiskManager.magiskHideList = Shell.su(MagiskManager.MAGISK_HIDE_PATH + "list"); + magiskManager.appList = Collections.unmodifiableList(list); return null; } @Override protected void onPostExecute(Void v) { - magiskManager.packageLoadDone.trigger(); + new MagiskHide(activity).list(); } } diff --git a/app/src/main/java/com/topjohnwu/magisk/asyncs/MagiskHide.java b/app/src/main/java/com/topjohnwu/magisk/asyncs/MagiskHide.java index 9f65c866a..ebadd06c9 100644 --- a/app/src/main/java/com/topjohnwu/magisk/asyncs/MagiskHide.java +++ b/app/src/main/java/com/topjohnwu/magisk/asyncs/MagiskHide.java @@ -1,17 +1,37 @@ package com.topjohnwu.magisk.asyncs; +import android.app.Activity; + import com.topjohnwu.magisk.MagiskManager; import com.topjohnwu.magisk.utils.Shell; +import java.util.List; + public class MagiskHide extends SerialTask { + private boolean isList = false; + + public MagiskHide() {} + + public MagiskHide(Activity context) { + super(context); + } + @Override protected Void doInBackground(Object... params) { String command = (String) params[0]; - Shell.su(MagiskManager.MAGISK_HIDE_PATH + command); + List ret = Shell.su(MagiskManager.MAGISK_HIDE_PATH + command); + if (isList) + magiskManager.magiskHideList = ret; return null; } + @Override + protected void onPostExecute(Void v) { + if (isList) + magiskManager.magiskHideDone.trigger(); + } + public void add(CharSequence packageName) { exec("add " + packageName); } @@ -28,4 +48,11 @@ public class MagiskHide extends SerialTask { exec("disable; setprop persist.magisk.hide 0"); } + public void list() { + isList = true; + if (magiskManager == null) + return; + exec("list"); + } + }