Don't reload ApplicationInfo list

Fix #94
This commit is contained in:
topjohnwu
2017-02-13 04:00:45 +08:00
parent 1ef5bd7076
commit 1bfafdb44f
5 changed files with 44 additions and 18 deletions
@@ -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<Void, Void, Void> {
public class LoadApps extends ParallelTask<Void, Void, Void> {
public LoadApps(Activity context) {
super(context);
@@ -20,20 +19,20 @@ public class LoadApps extends SerialTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
PackageManager pm = magiskManager.getPackageManager();
magiskManager.appList = pm.getInstalledApplications(0);
for (Iterator<ApplicationInfo> i = magiskManager.appList.iterator(); i.hasNext(); ) {
List<ApplicationInfo> list = pm.getInstalledApplications(0);
for (Iterator<ApplicationInfo> 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();
}
}
@@ -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<Object, Void, Void> {
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<String> 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<Object, Void, Void> {
exec("disable; setprop persist.magisk.hide 0");
}
public void list() {
isList = true;
if (magiskManager == null)
return;
exec("list");
}
}