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

View File

@ -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();
}

View File

@ -28,7 +28,7 @@ public class MagiskManager extends Application {
// Events
public final CallbackEvent<Void> blockDetectionDone = new CallbackEvent<>();
public final CallbackEvent<Void> packageLoadDone = new CallbackEvent<>();
public final CallbackEvent<Void> magiskHideDone = new CallbackEvent<>();
public final CallbackEvent<Void> reloadMainActivity = new CallbackEvent<>();
public final CallbackEvent<Void> moduleLoadDone = new CallbackEvent<>();
public final CallbackEvent<Void> repoLoadDone = new CallbackEvent<>();

View File

@ -50,8 +50,8 @@ public class ApplicationAdapter extends RecyclerView.Adapter<ApplicationAdapter.
}
public void setLists(List<ApplicationInfo> listApps, List<String> hideList) {
mOriginalList = mList = Collections.unmodifiableList(listApps);
mHideList = new ArrayList<>(hideList);
mOriginalList = mList = listApps;
mHideList = hideList;
notifyDataSetChanged();
}

View File

@ -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();
}
}

View File

@ -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");
}
}